Datatvätt
Det finns tillfällen då källdata som du laddar i Qlik Sense inte nödvändigtvis ser ut som du vill ha dem i Qlik Sense-appen. Qlik Sense tillhandahåller en rad olika funktioner och satser som du kan använda för att omvandla data till ett format som fungerar för dig.
Mappning kan användas i ett Qlik Sense-skript för att ersätta eller ändra fältvärden eller namn när skriptet körs, så mappning kan användas för att rensa upp data och göra dem mer enhetliga eller för att ersätta delar av ett fältvärde, eller hela fältvärdet.
Vid laddning av data från olika tabeller har inte fältvärden som betecknar samma sak alltid samma namn. Eftersom en sådan brist på överensstämmelse hindrar associationer, bör problemet åtgärdas. En bra metod för att göra detta är att skapa en mappningstabell för att jämföra fältvärden.
Mappningstabeller
Tabeller som laddas via Mapping-laddning eller Mapping-val behandlas annorlunda än andra tabeller. De lagras i en separat del av minnet och används bara som mappningstabeller när skriptet körs. När skriptet har körts utelämnas dessa tabeller automatiskt.
Regler:
- En mappningstabell måste ha två kolumner, varav den första ska innehålla värdena som ska jämföras, den andra de önskade mappningsvärdena.
- Kolumnerna måste döpas, men då namnen inte har någon koppling till fältnamn i vanliga interna tabeller är de inte relevanta i sig.
Mapping-funktioner och -satser
Följande mappningsfunktioner/-satser kommer att tas upp i denna introduktionskurs:
• Prefixet Mapping
• ApplyMap()
• MapSubstring()
• Satsen Map … Using
• Satsen Unmap
Prefixet Mapping
Prefixet Mapping används i ett skript för att skapa en mappningstabell. Mappningstabellen kan sedan användas med funktionen ApplyMap(), funktionen MapSubstring() eller satsen Map … Using.
Gör följande:
- Skapa en ny app och ge den ett namn.
- Lägg till ett nytt skriptavsnitt i Skriptredigeraren.
- Kalla avsnittet Countries.
- Ange följande skript:
CountryMap:
MAPPING LOAD * INLINE [
Country, NewCountry
U.S.A., US
U.S., US
United States, US
United States of America, US
];
I CountryMap-tabellen sparas två kolumner: Country och NewCountry. I kolumnen Country sparas de olika sätt på vilka ett land har angetts i fältet Country. I kolumnen NewCountry sparas det sätt på vilket värdena ska mappas. Den här mappningstabellen kommer att användas för att spara enhetliga US-landsvärden i fältet Country. Om exempelvis U.S.A. har sparats i fältet Country, mappa det som US.
ApplyMap() funktion
Använd ApplyMap() när du vill ersätta data i ett fält utifrån en mappningstabell som skapats tidigare. Mappningstabellen måste laddas innan funktionen ApplyMap() kan användas. Data i tabellen Data.xlsx som du ska ladda ser ut så här:
ID | Namn | Land | Code |
---|---|---|---|
1 | John Black | U.S.A. | SDFGBS1DI |
2 | Steve Johnson | U.S.A. | 2ABC |
3 | Mary White | United States | DJY3DFE34 |
4 | Susan McDaniels | u | DEF5556 |
5 | Dean Smith | USA | KSD111DKFJ1 |
Observera att landet har skrivits på olika sätt. För att göra landsfältet enhetligt laddas mappningstabellen och funktionen ApplyMap() används.
Gör följande:
- Under skriptet du skrev ovan, väljer och laddar du Data.xlsx. Infoga sedan skriptet.
- Infoga följande ovanför LOAD-satsen du just har skapat:
- Ändra den rad som innehåller Country, på följande sätt:
- Klicka på Ladda data.
- Lägg till 'US' som den tredje parametern i funktionen ApplyMap() för att hantera sådana fall där landet kan ha angetts felaktigt:
- Klicka på Ladda data.
Data:
Ditt skript bör se ut så här:
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,
Den första parametern i funktionen ApplyMap() har kartnamnet omslutet av enkla citattecken. Den andra parametern är det fält som innehåller de data som ska ersättas.
Den resulterande tabellen ser ut så här:
De olika stavningarna av United States har alla ändrats till US. Det finns en post som inte har stavats korrekt, så funktionen ApplyMap() ändrade inte det här fältvärdet. Med hjälp av funktionen ApplyMap() kan du använda den tredje parametern för att lägga till ett standarduttryck om mappningstabellen inte har något matchande värde.
ApplyMap('CountryMap', Country, 'US') as Country,
Ditt skript bör se ut så här:
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);
Den resulterande tabellen ser ut så här:
Funktionen MapSubstring()
Med funktionen MapSubstring() kan du mappa delar av ett fält.
I den tabell som skapats med ApplyMap() vill vi nu att siffrorna ska skrivas som text, så att funktionen MapSubstring() används för att ersätta numeriska data med text.
För att det ska gå att göra detta måste en mappningstabell först skapas.
Gör följande:
- Lägg till följande rader i skriptet efter avsnittet CountryMap, men före avsnittet Data.
- I avsnittet Data i skriptet ändrar du satsen Code enligt följande:
- Klicka på Ladda data.
CodeMap:
MAPPING LOAD * INLINE [
F1, F2
1, one
2, two
3, three
4, four
5, five
11, eleven
];
I tabellen CodeMap mappas numren 1 till 5 samt 11.
MapSubString('CodeMap', Code) as Code
Ditt skript bör se ut så här:
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);
Den resulterande tabellen ser ut så här:
De numeriska tecknen ersattes med text i fältet Code. Om en siffra visas mer än en gång som i fallet med ID=3 och ID=4, upprepas också texten. ID=4. Susan McDaniels hade siffran 6 i sin kod. Eftersom 6 inte mappades i CodeMap-tabellen förblir den oförändrad. ID=5, Dean Smith, hade 111 i sin kod. Denna har mappats som "elevenone".
Map … Using
Satsen Map … Using kan också användas för att tillämpa en mappning på ett fält. Den fungerar dock lite annorlunda än ApplyMap(). Medan ApplyMap() hanterar mappningen varje gång fältnamnet påträffas, hanterar Map … Using mappningen när värdet har sparats under fältnamnet i den interna tabellen.
Vi ska titta på ett exempel. Anta att vi laddar fältet Country flera gånger i skriptet och vill tillämpa en karta varje gång fältet laddades. Funktionen ApplyMap() kan användas på det sätt som illustrerades tidigare i den här introduktionskursen eller också kan Map … Using användas.
Om Map … Using används tillämpas kartan på fältet när fältet är sparat i den interna tabellen. Så i exemplet nedan tillämpas kartan på fältet Country i tabellen Data1 men skulle inte tillämpas på fältet Country2 i tabellen Data2. Detta beror på att satsen Map … Using enbart tillämpas på fält med namnet Country. När fältet Country2 sparas i den interna tabellen har det inte längre namnet Country. Om du vill att kartan ska tillämpas på Country2-tabellen skulle du behöva använda funktionen ApplyMap().
Satsen Unmap avslutar satsen Map … Using, vilket innebär att om Country skulle laddas in efter satsen Unmap så skulle CountryMap inte tillämpas.
Gör följande:
- Ersätt skriptet för tabellen Data med följande:
- Klicka på Ladda data.
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;
Den resulterande tabellen ser ut så här: