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.
Doe het volgende:
- Maak een nieuwe app en geef deze een naam.
- Voeg een nieuwe scriptsectie toe in de Editor voor het laden van gegevens.
- Roep de sectie Countries aan.
- Voer het volgende script in:
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:
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.
Doe het volgende:
- Onder het script dat u hierboven hebt ingevoerd, selecteert en laadt u Data.xlsx. Voeg vervolgens het script in.
- Voeg het volgende toe boven de nieuw gemaakte opdracht LOAD:
- Wijzig als volgt de regel die Country, bevat:
- Klik op Gegevens laden.
- Voeg 'US' toe als derde parameter van de functie ApplyMap() om gevallen af te handelen waarbij de naam van het land verkeerd is gespeld:
- Klik op Gegevens laden.
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);
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.
De resulterende tabel ziet er als volgt uit:
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.
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);
De resulterende tabel ziet er als volgt uit:
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.
Doe het volgende:
- Voeg de volgende scriptregels toe na de sectie CountryMap, maar vóór de sectie Data.
- Wijzig in de sectie Data van het script de opdracht Code als volgt:
- Klik op Gegevens laden.
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.
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);
De resulterende tabel ziet er als volgt uit:
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'.
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.
Doe het volgende:
- Vervang het script voor de tabel Data door het volgende:
- Klik op Gegevens 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;
De resulterende tabel ziet er als volgt uit: