데이터 정리
Qlik Sense에 로드한 소스 데이터가 Qlik Sense 앱에서 반드시 필요한 방식으로 유지되지 않는 경우가 있습니다. Qlik Sense에서는 데이터를 적합한 형식으로 변환할 수 있도록 해주는 다수의 함수 및 문을 제공합니다.
매핑은 Qlik Sense 스크립트에서 해당 스크립트를 실행할 때 필드 값 또는 이름을 바꾸거나 수정하는 데 사용할 수 있습니다. 따라서 매핑을 사용하면 데이터를 정리하여 더 일관성 있게 만들거나 필드 값의 일부 또는 전체를 바꿀 수 있습니다.
서로 다른 테이블에서 데이터를 로드할 때 필드 값의 의미가 같더라도 이름이 항상 일관성 있게 지정되는 것은 아닙니다. 일관성 결여는 연결에 방해가 되므로 해결할 필요가 있습니다. 필드 값을 비교하는 매핑 테이블을 만들면 이 문제를 매끄럽게 해결할 수 있습니다.
매핑 테이블
Mapping load 또는 Mapping select를 통해 로드된 테이블은 일반 테이블과는 다르게 처리됩니다. 이러한 테이블은 별도의 메모리 영역에 저장되며 스크립트 실행 시 매핑 테이블로만 사용됩니다. 스크립트 실행 후에는 이들 테이블이 자동으로 삭제됩니다.
규칙:
- 매핑 테이블에는 두 개의 열, 즉 비교 값을 포함하는 첫째 열과 원하는 매핑 값을 포함하는 둘째 열이 있어야 합니다.
- 두 열에는 이름을 지정해야 하지만 이름은 중요하지 않습니다. 열 이름은 일반 내부 테이블의 필드 이름과 연결되지 않습니다.
Mapping 함수 및 문
이 자습서에서는 다음 매핑 함수/문을 설명합니다.
• Mapping 접두사
• ApplyMap()
• MapSubstring()
• Map … Using 문
• Unmap 문
Mapping 접두사
Mapping 접두사는 스크립트에서 매핑 테이블을 만드는 데 사용됩니다. 그런 다음, 매핑 테이블을 ApplyMap() 함수, MapSubstring() 함수 또는 Map … Using 문에서 사용할 수 있습니다.
다음과 같이 하십시오.
- 새 앱을 만들고 이름을 지정합니다.
- 데이터 로드 편집기에서 새 스크립트 섹션을 추가합니다.
- Countries 섹션을 호출합니다.
- 다음 스크립트를 입력합니다.
CountryMap:
MAPPING LOAD * INLINE [
Country, NewCountry
U.S.A., US
U.S., US
United States, US
United States of America, US
];
CountryMap 테이블에는 다음 두 열이 저장됩니다. Country 및 NewCountry를 참조하십시오. Country 열에는 Country 필드에 국가를 입력한 다양한 방법을 저장합니다. NewCountry 열에는 해당 값의 매핑 방법을 저장합니다. 이 매핑 테이블은 Country 필드에 일관된 US 국가 값을 저장하는 데 사용됩니다. 예를 들어 Country 필드에 U.S.A.가 저장되면 이를 US로 매핑합니다.
ApplyMap() 함수
ApplyMap()을 사용하면 이전에 만든 매핑 테이블에 기반하여 필드의 데이터를 바꿀 수 있습니다. ApplyMap() 함수를 사용하려면 먼저 매핑 테이블을 로드해야 합니다. 로드할 Data.xlsx 테이블의 데이터는 다음과 같습니다.
ID | 이름 | Country | 코드 |
---|---|---|---|
1 | John Black | U.S.A. | SDFGBS1DI |
2 | Steve Johnson | U.S. | 2ABC |
3 | Mary White | United States | DJY3DFE34 |
4 | Susan McDaniels | u | DEF5556 |
5 | Dean Smith | US | KSD111DKFJ1 |
국가가 다양한 방법으로 입력되었음을 알 수 있습니다. 국가 필드를 일관성 있게 만들기 위해 매핑 테이블이 로드된 후 ApplyMap() 함수가 사용됩니다.
다음과 같이 하십시오.
- 위에서 입력한 스크립트 아래에서 Data.xlsx를 선택하고 로드한 다음 스크립트를 삽입합니다.
- 새로 만든 LOAD 문 위에 다음을 입력합니다.
- 아래와 같이 Country,가 포함된 줄을 수정합니다.
- 데이터 로드를 클릭합니다.
- 국가가 잘못 입력되었을 수 있는 경우를 처리하기 위해 ApplyMap() 함수의 세 번째 매개 변수로 'US'를 추가합니다.
- 데이터 로드를 클릭합니다.
Data:
스크립트는 다음과 같이 표시되어야 합니다.
CountryMap:
MAPPING LOAD * INLINE [
Country, NewCountry
U.S.A., US
U.S., US
United States, US
United States of America, US
];
Data:
LOAD
ID,
Name,
Country,
Code
FROM [lib://DataFiles/Data.xlsx]
(ooxml, embedded labels, table is Sheet1);
ApplyMap('CountryMap', Country) as Country,
ApplyMap() 함수의 첫 번째 매개 변수에는 작은따옴표로 묶인 맵 이름이 있습니다. 두 번째 매개 변수는 바꿀 데이터가 포함된 필드입니다.
결과 테이블은 다음과 같습니다.
United States의 다양한 철자는 모두 US로 변경되었습니다. 철자가 올바르지 않은 레코드가 하나 있으므로 ApplyMap() 함수는 해당 필드 값을 변경하지 않았습니다. ApplyMap() 함수를 사용하면 매핑 테이블에 일치 값이 없는 경우 세 번째 매개 변수를 사용하여 기본 표현식을 추가할 수 있습니다.
ApplyMap('CountryMap', Country, 'US') as Country,
스크립트는 다음과 같이 표시되어야 합니다.
CountryMap:
MAPPING LOAD * INLINE [
Country, NewCountry
U.S.A., US
U.S., US
United States, US
United States of America, US
];
Data:
LOAD
ID,
Name,
ApplyMap('CountryMap', Country, 'US') as Country,
Code
FROM [lib://DataFiles/Data.xlsx]
(ooxml, embedded labels, table is Sheet1);
결과 테이블은 다음과 같습니다.
MapSubstring() 함수
MapSubstring() 함수를 사용하면 필드의 일부분을 매핑할 수 있습니다.
이제 ApplyMap()으로 생성된 테이블에서 숫자를 텍스트로 쓰려고 하며, 따라서 숫자 데이터를 텍스트로 바꾸는 데 MapSubstring() 함수가 사용됩니다.
이 작업을 수행하기 위해서는 먼저 매핑 테이블을 만들어야 합니다.
다음과 같이 하십시오.
- CountryMap 섹션과 Data 섹션 사이에 다음 스크립트 줄을 추가합니다.
- 스크립트의 Data 섹션에서 Code 문을 다음과 같이 수정합니다.
- 데이터 로드를 클릭합니다.
CodeMap:
MAPPING LOAD * INLINE [
F1, F2
1, one
2, two
3, three
4, four
5, five
11, eleven
];
CodeMap 테이블에서는 숫자 1 ~ 5 및 11이 매핑됩니다.
MapSubString('CodeMap', Code) as Code
스크립트는 다음과 같이 표시되어야 합니다.
CountryMap:
MAPPING LOAD * INLINE [
Country, NewCountry
U.S.A., US
U.S., US
United States, US
United States of America, US
];
CodeMap:
MAPPING LOAD * INLINE [
F1, F2
1, one
2, two
3, three
4, four
5, five
11, eleven
];
Data:
LOAD
ID,
Name,
ApplyMap('CountryMap', Country, 'US') as Country,
MapSubString('CodeMap', Code) as Code
FROM [lib://DataFiles/Data.xlsx]
(ooxml, embedded labels, table is Sheet1);
결과 테이블은 다음과 같습니다.
숫자는 Code 필드의 텍스트로 바뀌었습니다. ID=3 및 ID=4의 경우처럼 숫자가 두 번 이상 나타나면 텍스트도 반복됩니다. ID=4. Susan McDaniels는 코드에 6이 있습니다. 6은 CodeMap 테이블에서 매핑되어 있지 않으므로 변경되지 않은 상태를 유지합니다. ID=5, Dean Smith는 코드에 111이 있습니다. 이는 'elevenone'으로 매핑되었습니다.
Map … Using
Map … Using 문도 필드에 매핑을 적용하는 데에 사용할 수 있습니다. 하지만 ApplyMap()과는 약간 다르게 작동됩니다. ApplyMap()은 필드 이름이 발견될 때마다 매핑을 처리하지만 Map … Using은 해당 값이 내부 테이블의 필드 이름 아래에 저장된 경우에 매핑을 처리합니다.
예를 살펴보도록 하겠습니다. 스크립트에서 Country 필드를 여러 번 로드했고 필드가 로드될 때마다 매핑을 적용한다고 가정해봅니다. 이 자습서의 앞부분에서 설명한 대로 ApplyMap() 함수를 사용하거나 Map … Using을 사용할 수 있습니다.
Map … Using을 사용하면 필드가 내부 테이블에 저장될 때 필드에 매핑이 적용됩니다. 그러므로 아래 예에서는 Data1 테이블의 Country 필드에 매핑이 적용되고 Data2 테이블의 Country2 필드에는 적용되지 않습니다. Map … Using 문은 Country로 이름이 지정된 필드에만 적용될 수 있기 때문입니다. Country2 필드가 내부 테이블에 저장되면 더 이상 이름이 Country로 지정되지 않습니다. Country2 테이블에 매핑이 적용되도록 하려면 ApplyMap() 함수를 사용해야 합니다.
Unmap 문은 Map … Using 문을 끝내므로 Country가 Unmap 문 뒤에 로드되면 CountryMap은 적용되지 않습니다.
다음과 같이 하십시오.
- Data 테이블에 대한 스크립트를 다음으로 대체합니다.
- 데이터 로드를 클릭합니다.
Map Country Using CountryMap;
Data1:
LOAD
ID,
Name,
Country
FROM [lib://DataFiles/Data.xlsx]
(ooxml, embedded labels, table is Sheet1);
Data2:
LOAD
ID,
Country as Country2
FROM [lib://DataFiles/Data.xlsx]
(ooxml, embedded labels, table is Sheet1);
UNMAP;
결과 테이블은 다음과 같습니다.