Datenpflege durch Mapping
Es kann vorkommen, dass die Quelldaten, die Sie in Qlik Sense laden, nicht so beschaffen sind, wie Sie sie in der Qlik Sense App haben wollen. Qlik Sense bietet viele Funktionen und Befehle, durch die Sie Ihre Daten in ein Format umwandeln können, das Ihnen weiterhilft.
Mapping kann in einem Qlik Sense Skript bei Ausführung des Skripts zum Ersetzen oder Ändern von Feldwerten oder Namen verwendet werden. So kann Mapping verwendet werden, um Daten zu löschen und konsistenter zu machen oder einen Feldwert ganz oder teilweise zu ersetzen.
In der Praxis haben Werte aus mehreren Tabellen oft unterschiedliche Bezeichnungen oder Schreibweisen, obwohl der Informationsgehalt derselbe ist. Dadurch kommen in der Software inhaltlich korrekte Verknüpfungen nicht zustande, wenn die Schreibweise nicht exakt übereinstimmt. Dieses Problem lässt sich durch Mapping beheben.
Mapping-Tabellen
Tabellen, die über Mapping load oder Mapping select geladen werden, werden anders als andere Tabellen behandelt. Sie werden lediglich während der Ausführung des Skripts für das Mapping benötigt und separat gespeichert. Nach der Ausführung des Skripts werden diese Tabellen automatisch gelöscht.
Es gilt:
- Mapping-Tabellen bestehen aus zwei Spalten: Die erste enthält Vergleichswerte, die zweite die gewünschten Mapping-Werte.
- Die zwei Spalten müssen benannt werden, doch die Namen haben keine Relevanz. Die Spaltennamen müssen keine Verbindung zu Feldnamen in normalen internen Tabellen haben.
Mapping-Funktionen und -Anweisungen
Die folgenden Mapping-Funktionen/-Anweisungen werden in diesem Tutorial behandelt:
• Mapping-Zusatz
• ApplyMap()
• MapSubstring()
• Map … Using-Anweisung
• Unmap-Anweisung
Mapping-Zusatz
Mit dem Mapping-Zusatz wird eine Mapping-Tabelle in einem Skript erstellt. Die Mapping-Tabelle kann dann mit der ApplyMap()-Funktion, der MapSubstring()-Funktion oder der Map … Using-Anweisung verwendet werden.
Gehen Sie folgendermaßen vor:
- Erstellen Sie eine neue App und geben Sie ihm einen Namen.
- Fügen Sie einen neuen Skriptabschnitt im Dateneditor hinzu.
- Rufen Sie den Abschnitt Countries auf.
- Geben Sie folgendes Skript ein:
CountryMap:
MAPPING LOAD * INLINE [
Country, NewCountry
U.S.A., US
U.S., US
United States, US
United States of America, US
];
Die Tabelle CountryMap speichert zwei Spalten: Country und NewCountry. Die Spalte Country speichert die verschiedenen Weisen, wie das Land in das Feld Country eingegeben wurde. Die Spalte NewCountry speichert, wie die Werte zugeordnet werden. Diese Mapping-Tabelle wird zum Speichern von konsistenten US-Länderwerten im Feld Country verwendet. Wenn zum Beispiel U.S.A. im Feld Country gespeichert wird, ordnen Sie ihm US zu.
ApplyMap()-Funktion
Verwenden Sie ApplyMap(), um Daten in einem Feld basierend auf einer zuvor erstellten Mapping-Tabelle zu ersetzen. Die Mapping-Tabelle muss geladen werden, bevor die ApplyMap()-Funktion verwendet werden kann. Die Daten in der Tabelle Data.xlsx, die Sie laden werden, sehen wie folgt aus:
ID | Name | Land | Code |
---|---|---|---|
1 | John Black | U.S.A. | SDFGBS1DI |
2 | Steve Johnson | U.S. | 2ABC |
3 | Mary White | Vereinigte Staaten | DJY3DFE34 |
4 | Susan McDaniels | u | DEF5556 |
5 | Dean Smith | USA | KSD111DKFJ1 |
Beachten Sie, dass das Land auf verschiedene Weisen eingegeben wurde. Damit das Länderfeld konsistent ist, wird die Mapping-Tabelle geladen und dann die ApplyMap()-Funktion verwendet.
Gehen Sie folgendermaßen vor:
- Wählen Sie unter dem oben eingegebenen Skript Data.xlsx aus, laden Sie die Datei und fügen Sie dann das Skript ein.
- Geben Sie Folgendes oberhalb der soeben erstellten LOAD-Anweisung ein:
- Ändern Sie die Zeile mit Country, wie folgt:
- Klicken Sie auf Daten laden.
- Fügen Sie ''US' als dritten Parameter der ApplyMap()-Funktion hinzu, um Fällen beizukommen, in denen das Land falsch eingegeben wurde:
- Klicken Sie auf Daten laden.
Data:
Ihr Skript sollte folgendermaßen aussehen:
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,
Beim ersten Parameter der Funktion ApplyMap() ist der Zuordnungsname von einfachen Anführungszeichen umschlossen. Der zweite Parameter ist das Feld, dessen Daten ersetzt werden sollen.
Die sich ergebende Tabelle sieht folgendermaßen aus:
Die verschiedenen Schreibweisen von United States wurden alle in US geändert. Es gibt einen Datensatz, der nicht richtig geschrieben wurde, weshalb die ApplyMap()-Funktion diesen Feldwert nicht geändert hat. Mithilfe der ApplyMap()-Funktion können Sie den dritten Parameter zum Hinzufügen einer Standardformel verwenden, wenn die Mapping-Tabelle keinen passenden Wert besitzt.
ApplyMap('CountryMap', Country, 'US') as Country,
Ihr Skript sollte folgendermaßen aussehen:
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);
Die sich ergebende Tabelle sieht folgendermaßen aus:
MapSubstring()-Funktion
Die MapSubstring()-Funktion ermöglicht Ihnen, Teile eines Felds zuzuordnen.
In der durch ApplyMap() erstellten Tabelle wollen wir die Zahlen als Text schreiben. Dafür ersetzen wir mit der MapSubstring()-Funktion die numerischen Daten durch Text.
Zunächst muss eine Mapping-Tabelle erstellt werden.
Gehen Sie folgendermaßen vor:
- Fügen Sie die folgenden Skriptzeilen nach dem Abschnitt CountryMap, aber vor dem Abschnitt Data hinzu.
- Ändern Sie im Abschnitt Data des Skripts den Code-Befehl wie folgt:
- Klicken Sie auf Daten laden.
CodeMap:
MAPPING LOAD * INLINE [
F1, F2
1, one
2, two
3, three
4, four
5, five
11, eleven
];
In der CodeMap-Tabelle erfolgt ein Durchlauf der Zahlen 1 bis 5 und 11.
MapSubString('CodeMap', Code) as Code
Ihr Skript sollte folgendermaßen aussehen:
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);
Die sich ergebende Tabelle sieht folgendermaßen aus:
Die numerischen Zeichen wurden im Code-Feld durch Text ersetzt. Wenn eine Zahl wie bei ID=3 und ID=4 mehr als einmal erscheint, wird der Text auch wiederholt. ID=4. Susan McDaniels hatte eine 6 in ihrem Code. Da die 6 in der CodeMap-Tabelle nicht zugeordnet wurde, bleibt sie unverändert. ID=5, Dean Smith hatte 111 in seinem Code. Dies wurde als 'elevenone' zugeordnet.
Map … Using
Die Map … Using-Anweisung kann auch zum Anwenden einer Zuordnung auf ein Feld verwendet werden. Sie funktioniert aber ein wenig anders als ApplyMap(). Während ApplyMap() jedes Mal beim Stoßen auf den Feldnamen das Mapping bedient, erfolgt dies bei Map … Using nur, wenn der Wert unter dem Feldnamen in der internen Tabelle gespeichert ist.
Werfen wir einen Blick auf ein Beispiel. Angenommen, wir laden das Country-Feld mehrere Male im Skript und möchten jedes Mal, wenn das Feld geladen wird, eine Zuordnung anwenden. Wir können die ApplyMap()-Funktion wie zuvor in diesem Tutorial dargestellt oder Map … Using verwenden.
Bei Verwendung von Map … Using wird die Zuordnung auf das Feld angewendet, wenn dieses in der internen Tabelle gespeichert ist. Also wird im Beispiel unten die Zuordnung auf das Country-Feld in der Data1-Tabelle angewendet, aber nicht auf das Country2-Feld in der Data2-Tabelle. Das ist darauf zurückzuführen, dass der Map … Using-Befehl nur auf Felder mit dem Namen Country angewendet wird. Wenn das Country2-Feld in der internen Tabelle gespeichert wird, heißt es nicht länger Country. Wenn Sie die Zuordnung auf die Tabelle Country2 anwenden wollen, müssen Sie die ApplyMap()-Funktion verwenden.
Der Unmap-Befehl beschließt den Map … Using-Befehl, d. h. wenn Country nach dem Unmap-Befehl geladen werden soll, wird CountryMap nicht angewendet.
Gehen Sie folgendermaßen vor:
- Ersetzen Sie das Skript für die Tabelle Data durch Folgendes:
- Klicken Sie auf Daten laden.
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;
Die sich ergebende Tabelle sieht folgendermaßen aus: