Ga naar hoofdinhoud

Gegevens opschonen

Er zijn momenten waarop de brongegevens die u in Qlik Sense laadt niet de vorm hebben zoals u ze in de Qlik Sense-app wilt opslaan. Qlik Sense biedt u een keur aan functies en opdrachten waarmee u uw gegevens kunt transformeren in een indeling die geschikt is voor uw doeleinden.

Mapping kan worden gebruikt in een Qlik Sense-script om veldwaarden of -namen te vervangen of wijzigen als het script wordt uitgevoerd, dus kan mapping worden gebruikt voor het opschonen van gegevens en het meer consistent maken hiervan of om een veldwaarde geheel of gedeeltelijk te vervangen.

Als u gegevens uit verschillende tabellen laadt, zijn de namen van veldwaarden die hetzelfde betekenen niet altijd consistent. Aangezien dit gebrek aan consistentie associaties in de weg staat, moet dit probleem worden opgelost. Dit kunt u op elegante wijze doen door een toewijzingstabel te maken om veldwaarden te vergelijken.

Tabellen toewijzen

Tabellen geladen met Mapping load of Mapping select worden anders behandeld dan andere tabellen. Zij worden opgeslagen in een afzonderlijk gebied van het geheugen en uitsluitend als toewijzingstabellen gebruikt tijdens de uitvoering van het script. Nadat het script is uitgevoerd, worden deze tabellen automatisch verwijderd.

Regels:

  • Een toewijzingstabel moet uit twee kolommen bestaan, de eerste met vergelijkingswaarden en de tweede met de gewenste toewijzingswaarden.
  • De twee kolommen moeten een naam hebben, waarbij de namen op zichzelf niet van belang zijn. De kolomnamen hebben geen verbinding met veldnamen in reguliere interne tabellen.

Functies en opdrachten Mapping

De volgende functies/opdrachten voor mapping komen aan bod in deze zelfstudie:

• Prefix Mapping

ApplyMap()

MapSubstring()

• Opdracht Map … Using

• Opdracht Unmap

Prefix Mapping

Het prefix Mapping wordt gebruikt in een script om een toewijzingstabel te maken. Deze toewijzingstabel kan vervolgens worden gebruikt met de functie ApplyMap(), de functie MapSubstring() of de opdracht Map … Using.

  1. Maak een nieuwe app en geef deze een naam.
  2. Voeg een nieuwe scriptsectie toe in de Editor voor het laden van gegevens.
  3. Roep de sectie Countries aan.
  4. Voer het volgende script in:
  5. CountryMap: MAPPING LOAD * INLINE [ Country, NewCountry U.S.A., US U.S., US United States, US United States of America, US ];

    In de tabel CountryMap worden twee kolommen opgeslagen: Country en NewCountry. De kolom Country bevat de verschillende manieren waarop land is ingevoerd in het veld Country. In de kolom NewCountry wordt opgeslagen hoe de waarden worden toegewezen. Deze toewijzingstabel wordt gebruikt voor het opslaan van consistente US landwaarden in het veld Country. Als bijvoorbeeld U.S.A. is opgeslagen in het veld Country, wijst u het toe aan US.

Functie ApplyMap()

Gebruik ApplyMap() om gegevens in een veld te vervangen op basis van een eerder gemaakte toewijzingstabel. De toewijzingstabel moet worden geladen voordat de functie ApplyMap() kan worden gebruikt. De gegevens in de tabel Data.xlsx die u gaat laden, zien er als volgt uit:

Gegevenstabel
ID Naam Land: Code
1 John Black VS SDFGBS1DI
2 Steve Johnson V.S. 2ABC
3 Mary White Verenigde Staten DJY3DFE34
4 Susan McDaniels u DEF5556
5 Dean Smith VS KSD111DKFJ1

U ziet dat het land op verschillende manieren is gespecificeerd. Teneinde het landveld consistent te maken, wordt de toewijzingstabel geladen en wordt vervolgens de functie ApplyMap() gebruikt.

  1. Onder het script dat u hierboven hebt ingevoerd, selecteert en laadt u Data.xlsx. Voeg vervolgens het script in.
  2. Voeg het volgende toe boven de nieuw gemaakte opdracht LOAD:
  3. Data:

    Uw script zou er als volgt moeten uitzien:

    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. Wijzig als volgt de regel die Country, bevat:
  5. ApplyMap('CountryMap', Country) as Country,

    De eerste parameter van de functie ApplyMap() bevat de toewijzingsnaam tussen enkele aanhalingstekens. De tweede parameter is het veld met de gegevens die moeten worden vervangen.

  6. Klik op Gegevens laden.
  7. De resulterende tabel ziet er als volgt uit:

    Tabel met de gegevens geladen met de functie ApplyMap()

    Tabel met de gegevens geladen met de functie ApplyMap.

    De verschillende spellingen van United States zijn allemaal gewijzigd in US. Er is één record die niet correct is gespeld, dus heeft de functie ApplyMap() die veldwaarde niet gewijzigd. Via de functie ApplyMap() kunt u de derde parameter gebruiken om een standaarduitdrukking toe te voegen als de toewijzingstabel geen overeenkomstige waarde bevat.

  8. Voeg 'US' toe als derde parameter van de functie ApplyMap() om gevallen af te handelen waarbij de naam van het land verkeerd is gespeld:
  9. ApplyMap('CountryMap', Country, 'US') as Country,

    Uw script zou er als volgt moeten uitzien:

    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. Klik op Gegevens laden.
  11. De resulterende tabel ziet er als volgt uit:

    Tabel met de gegevens geladen met de functie ApplyMap

InformatieZie voor meer informatie over ApplyMap() deze blogpost in Qlik Community: Niet samenvoegen - gebruik in plaats daarvan Applymap

Functie MapSubstring()

Met de functie MapSubstring() kunt u onderdelen toewijzen aan een veld.

In de tabel die door ApplyMap() is gemaakt, willen we nu de getallen uitschrijven als tekst, dus wordt de functie MapSubstring() gebruikt voor het vervangen van de numerieke gegevens door tekst.

Hiertoe moet eerst een toewijzingstabel worden gemaakt.

  1. Voeg de volgende scriptregels toe na de sectie CountryMap, maar vóór de sectie Data.
  2. CodeMap: MAPPING LOAD * INLINE [ F1, F2 1, one 2, two 3, three 4, four 5, five 11, eleven ];

    In de tabel CodeMap worden de getallen 1 t/m 5 en 11 toegewezen.

  3. Wijzig in de sectie Data van het script de opdracht Code als volgt:
  4. MapSubString('CodeMap', Code) as Code

    Uw script zou er als volgt moeten uitzien:

    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. Klik op Gegevens laden.
  6. De resulterende tabel ziet er als volgt uit:

    Tabel met de gegevens geladen met de functie MapSubString

    Tabel met de gegevens geladen met de functie MapSubString.

    De numerieke tekens zijn vervangen door tekst in het veld Code. Als een getal meer dan eenmaal voorkomt, zoals bij ID=3 en ID=4, wordt de tekst eveneens herhaald. ID=4. Susan McDaniels had een 6 in haar code. Aangezien 6 niet was toegewezen in de tabel CodeMap, blijft deze ongewijzigd. ID=5, Dean Smith, had 111 in zijn code. Dit is toegewezen als 'elevenone'.

InformatieZie voor meer informatie over MapSubstring() deze blogpost in Qlik Community: Toewijzen

Map … Using

De opdracht Map … Using kan ook worden gebruikt om een toewijzing op een veld toe te passen. Dat werkt wel iets anders dan ApplyMap(). Terwijl ApplyMap() de toewijzing uitvoert telkens wanneer de veldnaam wordt aangetroffen, handelt Map … Using de toewijzing af als de waarde wordt opgeslagen onder de veldnaam in de interne tabel.

Laten we eens een voorbeeld gaan bekijken. Stel dat we het veld Country meerdere keren in het script laden en een toewijzing willen toepassen telkens wanneer het veld wordt geladen. De functie ApplyMap() zou kunnen worden gebruikt zoals eerder geïllustreerd in deze zelfstudie of Map … Using kan worden gebruikt.

Als Map … Using wordt gebruikt, wordt de toewijzing toegepast op het veld als het veld wordt opgeslagen in de interne tabel. In het onderstaande voorbeeld wordt de toewijzing toegepast op het veld Country in de tabel Data1, maar wordt deze niet toegepast op het veld Country2 in de tabel Data2. Dit komt doordat de opdracht Map … Using alleen wordt toegepast op velden met de naam Country. Als het veld Country2 wordt opgeslagen in de interne tabel, heeft dit niet langer de naam Country. Als u de toewijzing wilt toepassen op de tabel Country2, moet u de functie ApplyMap() gebruiken.

De opdracht Unmap beëindigt de opdracht Map … Using, zodat, als Country zou worden geladen na de opdracht Unmap, de opdracht CountryMap niet zou worden toegepast.

  1. Vervang het script voor de tabel Data door het volgende:
  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. Klik op Gegevens laden.
  4. De resulterende tabel ziet er als volgt uit:

    Tabel met de gegevens geladen met de functie Map … Using

    Tabel met de gegevens geladen met de functie Map ... Using.