Przeskocz do zawartości głównej

Czyszczenie danych

Czasami konieczne jest przetworzenie danych źródłowych ładowanych do programu Qlik Sense, aby w aplikacji Qlik Sense miały one pożądaną postać. W rozwiązaniu Qlik Sense dostępnych jest wiele funkcji i instrukcji umożliwiających przekształcanie danych do odpowiedniego formatu.

W skrypcie Qlik Sense można stosować mapowanie w celu zastępowania lub modyfikowania wartości lub nazw pól podczas wykonywania skryptu. Mapowanie umożliwia więc czyszczenie danych i poprawianie ich spójności, jak również zastępowanie wartości pól w części lub w całości.

Podczas ładowania danych z różnych tabel często zdarza się, że pola o identycznym znaczeniu mają różne nazwy. Takie niespójności utrudniają tworzenie asocjacji, więc konieczne jest ich korygowanie. Elegancką metodą rozwiązania tego problemu jest utworzenie tabeli mapowania używanej do porównywania wartości pól.

Tabele mapowania

Tabele ładowane za pomocą Mapping load lub Mapping select są traktowane inaczej niż inne tabele. Są one przechowywane w odrębnym obszarze pamięci i używane wyłącznie jako tabele mapowania podczas wykonywania skryptu. Po wykonaniu skryptu tabele te są automatycznie usuwane.

Reguły:

  • Tabela mapowania musi zawierać dokładnie dwie kolumny, z których pierwsza zawiera wartości sprawdzane, a druga pożądane wartości docelowe mapowania.
  • Obie kolumny muszą mieć nazwy, ale same nazwy nie mają żadnego znaczenia. Podane tu nazwy kolumn nie są w żaden sposób związane z nazwami pól zwykłych tabel wewnętrznych.

Funkcje i instrukcje Mapping

W tym kursie zostaną omówione następujące funkcje i instrukcje mapowania:

• Prefiks Mapping

ApplyMap()

MapSubstring()

• Instrukcja Map … Using

• Instrukcja Unmap

Prefiks Mapping

Prefiks Mapping służy do utworzenia tabeli mapowania w skrypcie. Takiej tabeli mapowania można następnie używać z funkcją ApplyMap(), funkcją MapSubstring() lub instrukcją Map … Using.

  1. Utwórz nową aplikację i nadaj jej nazwę.
  2. Dodaj nową sekcję skryptu w edytorze ładowania danych.
  3. Wywołaj sekcję Countries.
  4. Wprowadź następujący skrypt:
  5. CountryMap: MAPPING LOAD * INLINE [ Country, NewCountry U.S.A., US U.S., US United States, US United States of America, US ];

    Tabela CountryMap zawiera dwie kolumny: Country i NewCountry. Kolumna Country zawiera różne wersje nazw krajów wpisane w polu Country. Kolumna NewCountry zawiera mapowania tych wartości. Tabela mapowania posłuży do zapisywania w polu Country spójnych wartości odpowiadających Stanom Zjednoczonym (w tym przypadku US). Jeśli na przykład pole Country zawiera wartość U.S.A., zostanie ona zmapowana na US.

ApplyMap() funkcja

Użyj ApplyMap(), aby zastąpić dane w polu na podstawie wcześniej utworzonej tabeli mapowania. Przed użyciem funkcji ApplyMap() trzeba załadować odpowiednią tabelę mapowania. Dane w tabeli Data.xlsx, które zostaną załadowane, wyglądają następująco:

Tabela danych
Identyfikator Name Country Kod
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

Należy zauważyć, że kraj jest wprowadzany na różne sposoby. Aby zawartość pola kraju była spójna, ładujemy tabelę mapowania i używamy funkcji ApplyMap().

  1. Poniżej skryptu wprowadzonego powyżej wybierz i załaduj plik Data.xlsx, a następnie wstaw skrypt.
  2. Wprowadź następujące dane powyżej nowej utworzonej instrukcji LOAD:
  3. Data:

    Skrypt powinien wyglądać następująco:

    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);

  4. Zmodyfikuj wiersz zawierający pole Country, w następujący sposób:
  5. ApplyMap('CountryMap', Country) as Country,

    Pierwszy parametr funkcji ApplyMap() to nazwa mapy w pojedynczych cudzysłowach. Drugi parametr określa pole zawierające dane, które będą zastępowane.

  6. Kliknij polecenie Ładuj dane.
  7. Wynikowa tabela wygląda następująco:

    Tabela przedstawia dane załadowane przy użyciu funkcji ApplyMap()

    Tabela przedstawia dane załadowane przy użyciu funkcji ApplyMap

    Wszystkie warianty nazwy United States zostały zamienione na US. Jeden z rekordów zawierał błąd pisowni, więc funkcja ApplyMap() nie zmieniła tej wartości pola. Do funkcji ApplyMap() można dodać trzeci parametr w celu określenia wyrażenia domyślnego, które będzie używane w razie braku pasującej wartości w tabeli mapowania.

  8. Dodaj wartość 'US' jako trzeci parametr funkcji ApplyMap(), co pozwoli obsłużyć przypadki nieprawidłowego wpisania kraju:
  9. ApplyMap('CountryMap', Country, 'US') as Country,

    Skrypt powinien wyglądać następująco:

    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);

  10. Kliknij polecenie Ładuj dane.
  11. Wynikowa tabela wygląda następująco:

    Tabela przedstawia dane załadowane przy użyciu funkcji ApplyMap

InformacjaAby dowiedzieć się więcej na temat funkcji ApplyMap(), zapoznaj się z tym artykułem na blogu Qlik Community: Don't join - use Applymap instead (Nie łącz, używaj opcji Applymap)

MapSubstring() funkcja

Funkcja MapSubstring() umożliwia mapowanie części pola.

Przetworzymy tabelę utworzoną przez funkcję ApplyMap(), aby liczby były zapisane słownie. Funkcja MapSubstring() posłuży do zastąpienia danych liczbowych tekstem.

W tym celu trzeba najpierw utworzyć tabelę mapowania.

  1. Dodaj następujące wiersze skryptu po sekcji CountryMap, ale przed sekcją Data.
  2. CodeMap: MAPPING LOAD * INLINE [ F1, F2 1, one 2, two 3, three 4, four 5, five 11, eleven ];

    Tabela CodeMap mapuje liczby od 1 do 5 oraz liczbę 11.

  3. W sekcji Data skryptu zmodyfikuj instrukcję Code następująco:
  4. MapSubString('CodeMap', Code) as Code

    Skrypt powinien wyglądać następująco:

    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);

  5. Kliknij polecenie Ładuj dane.
  6. Wynikowa tabela wygląda następująco:

    Tabela przedstawia dane załadowane przy użyciu funkcji MapSubString

    Tabela przedstawia dane załadowane przy użyciu funkcji MapSubString.

    Zapisy liczbowe w polu Code zostały zastąpione tekstem. Jeśli liczba występuje więcej niż raz, jak w przypadku ID=3 i ID=4, tekst również jest powtarzany. ID=4. Susan McDaniels zawiera wartość 6 w kodzie. Ponieważ dla liczby 6 nie określono mapowania w tabeli CodeMap, pozostała ona bez zmian. W kodzie osoby o ID=5 (Dean Smith) występowała liczba 111. Została ona zmapowana jako „elevenone”.

InformacjaAby dowiedzieć się więcej na temat funkcji MapSubstring(), zapoznaj się z tym artykułem na blogu Qlik Community: Mapping … and not the geographical kind (Mapowanie, ale nie takie geograficzne)

Map … Using

Za pomocą funkcji Map … Using można zastosować mapę do pola. Jednak, działa to trochę inaczej niż w przypadku funkcji ApplyMap(). W przypadku funkcji ApplyMap() mapowanie jest stosowane przy każdym napotkaniu nazwy pola przy przetwarzaniu, natomiast instrukcja Map … Using dokonuje mapowania na etapie zapisywania wartości w tabeli wewnętrznej w polu o określonej nazwie.

Przyjrzyjmy się przykładowi. Załóżmy, że wielokrotnie ładujemy pole Country w skrypcie i chcemy stosować mapowanie przy każdym załadowaniu. Można do tego celu użyć funkcji ApplyMap(), jak we wcześniejszej części tego kursu, lub skorzystać z instrukcji Map … Using.

Zastosowanie instrukcji Map … Using spowoduje zastosowanie mapy do pola na etapie zapisywania pola w tabeli wewnętrznej. W poniższym przykładzie mapowanie zostanie zastosowane do pola Country w tabeli Data1, ale nie do pola Country2 w tabeli Data2. Wynika to stąd, że instrukcja Map … Using jest stosowana jedynie do pól o nazwie Country. Po zapisaniu w tabeli wewnętrznej pole Country2 nie ma już nazwy Country. Jeśli mapowanie miałoby być stosowane również do tabeli Country2, należałoby użyć funkcji ApplyMap().

Instrukcja Unmap kończy instrukcję Map … Using, więc gdyby pole Country zostało załadowane po instrukcji Unmap, tabela mapowania CountryMap nie zostałaby zastosowana.

  1. Skrypt dla tabeli Data zastąp następującym skryptem:
  2. 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;

  3. Kliknij polecenie Ładuj dane.
  4. Wynikowa tabela wygląda następująco:

    Tabela przedstawia dane załadowane przy użyciu funkcji Map … Using

    Tabela przedstawia dane załadowane przy użyciu funkcji Map … Using.