Zu Hauptinhalt springen

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-Anwendung 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.

  1. Erstellen Sie eine neue App und geben Sie ihm einen Namen.
  2. Fügen Sie einen neuen Skriptabschnitt im Dateneditor hinzu.
  3. Rufen Sie den Abschnitt Countries auf.
  4. Geben Sie folgendes Skript ein:
  5. 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:

Datentabelle
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.

  1. Wählen Sie unter dem oben eingegebenen Skript Data.xlsx aus, laden Sie die Datei und fügen Sie dann das Skript ein.
  2. Geben Sie Folgendes oberhalb der soeben erstellten LOAD-Anweisung ein:
  3. 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);

  4. Ändern Sie die Zeile mit Country, wie folgt:
  5. 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.

  6. Klicken Sie auf Daten laden.
  7. Die sich ergebende Tabelle sieht folgendermaßen aus:

    Tabelle mit den Daten, die anhand der ApplyMap()-Funktion geladen wurden

    Tabelle mit den Daten, die anhand der Funktion „ApplyMap“ geladen wurden

    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.

  8. Fügen Sie ''US' als dritten Parameter der ApplyMap()-Funktion hinzu, um Fällen beizukommen, in denen das Land falsch eingegeben wurde:
  9. 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);

  10. Klicken Sie auf Daten laden.
  11. Die sich ergebende Tabelle sieht folgendermaßen aus:

    Tabelle mit den Daten, die anhand der ApplyMap-Funktion geladen wurden

InformationshinweisWeitere Informationen zur Verwendung von ApplyMap() finden Sie in folgendem Blog-Eintrag in Qlik Community: Don't join - use Applymap instead (Nicht verknüpfen – stattdessen Applymap verwenden)

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.

  1. Fügen Sie die folgenden Skriptzeilen nach dem Abschnitt CountryMap, aber vor dem Abschnitt Data hinzu.
  2. 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.

  3. Ändern Sie im Abschnitt Data des Skripts den Code-Befehl wie folgt:
  4. 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);

  5. Klicken Sie auf Daten laden.
  6. Die sich ergebende Tabelle sieht folgendermaßen aus:

    Tabelle mit den Daten, die anhand der MapSubString-Funktion geladen wurden

    Tabelle mit den Daten, die anhand der Funktion „MapSubString“ geladen wurden.

    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.

InformationshinweisWeitere Informationen zur Verwendung von MapSubstring() finden Sie in folgendem Blog-Eintrag in Qlik Community: Mapping … and not the geographical kind (Mapping ... und zwar nicht der geografische Typ)

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.

  1. Ersetzen Sie das Skript für die Tabelle Data durch Folgendes:
  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. Klicken Sie auf Daten laden.
  4. Die sich ergebende Tabelle sieht folgendermaßen aus:

    Tabelle mit den Daten, die anhand der Map … Using-Funktion geladen wurden

    Tabelle mit den Daten, die anhand der Funktion „Map ... Using“ geladen wurden.