데이터 정리
서로 다른 테이블에서 데이터를 로드할 때 필드 값의 의미가 같더라도 이름이 항상 일관성 있게 지정되는 것은 아니므로 주의해야 합니다. 일관성 결여는 귀찮은 문제일 뿐만 아니라 연결에 방해가 되므로 해결할 필요가 있습니다. 필드 값을 비교하는 매핑 테이블을 만들면 이 문제를 매끄럽게 해결할 수 있습니다.
매핑 테이블
mapping load 또는 mapping select를 통해 로드된 테이블은 일반 테이블과는 다르게 처리됩니다. 이러한 테이블은 별도의 메모리 영역에 저장되며 스크립트 실행 중 매핑 테이블로만 사용됩니다. 스크립트 실행이 완료되면 자동으로 삭제됩니다.
규칙:
- 매핑 테이블에는 두 개의 열, 즉 비교 값을 포함하는 첫째 열과 원하는 매핑 값을 포함하는 둘째 열이 있어야 합니다.
- 두 열에는 이름을 지정해야 하지만 이름은 중요하지 않습니다. 열 이름은 일반 내부 테이블의 필드 이름과 연결되지 않습니다.
매핑 테이블 사용
국가 목록이 나열된 여러 테이블을 로드할 때 동일한 한 국가가 다양한 이름으로 나오는 경우를 볼 수 있습니다. 이 예에서 U.S.A.는 US, U.S., United States로 나열됩니다.
컨케트네이트된 테이블에 미국을 의미하는 레코드가 세 가지로 다르게 포함되지 않도록 하려면 그림에 나오는 것과 비슷한 테이블을 만들고 매핑 테이블로 로드합니다.
전체 스크립트는 다음과 같습니다.
CountryMap:
Mapping LOAD x,y from MappingTable.txt
(ansi, txt, delimiter is ',', embedded
labels);
Map Country using CountryMap;
LOAD Country,City from CountryA.txt
(ansi, txt, delimiter is ',', embedded labels);
LOAD Country, City from CountryB.txt
(ansi, txt, delimiter is ',', embedded labels);
mapping 문은 MappingTable.txt 파일을 CountryMap 레이블이 있는 매핑 테이블로 로드합니다.
map 문을 통해 이전에 로드된 매핑 테이블 CountryMap을 사용하여 Country 필드를 매핑할 수 있습니다.
LOAD 문은 CountryA 및 CountryB 테이블을 로드합니다. 이 테이블은 동일한 필드 집합이 있기에 컨케트네이트되며, 매핑 테이블의 첫째 열 값과 필드 값을 비교할 Country 필드가 포함되어 있습니다. 필드 값 US, U.S., United States가 발견되고 매핑 테이블의 둘째 열 값인 USA로 대체됩니다.
자동 매핑은 QlikView테이블에 필드가 저장되기 전 일련의 이벤트에서 마지막으로 수행됩니다. 일반적인 LOAD 또는 SELECT 문의 이벤트 순서를 대략적으로 정리하면 다음과 같습니다.
- 표현식 평가
- as로 필드의 이름 바꾸기
- alias로 필드의 이름 바꾸기
- 테이블 이름 한정(해당하는 경우)
- 필드 이름이 일치하는 경우 데이터 매핑
즉, 매핑은 표현식 실행 도중 필드 이름이 발견될 때마다 수행되는 것이 아니라 QlikView 테이블의 필드 이름으로 값이 저장될 때 수행됩니다.
매핑을 비활성화하려면 unmap 문을 사용합니다.
표현식 수준에서 매핑을 수행하려면 applymap 함수를 사용합니다.
부분 문자열 수준에서 매핑을 수행하려면 mapsubstring 함수를 사용합니다.