Gå till huvudinnehåll

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:

  1. Skapa en ny app och ge den ett namn.
  2. Lägg till ett nytt skriptavsnitt i Skriptredigeraren.
  3. Kalla avsnittet Countries.
  4. Ange följande skript:
  5. 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:

Data table
ID Namn Land Code
1 John Black U.S.A. SDFGBS1DI
2 Steve Johnson U.S. 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:

  1. Under skriptet du skrev ovan, väljer och laddar du Data.xlsx. Infoga sedan skriptet.
  2. Infoga följande ovanför LOAD-satsen du just har skapat:
  3. 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);

  4. Ändra den rad som innehåller Country, på följande sätt:
  5. 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.

  6. Klicka på Ladda data.
  7. Den resulterande tabellen ser ut så här:

    Tabell som visar data som laddats med funktionen ApplyMap()
    Table showing data loaded using ApplyMap function.

    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.

  8. 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:
  9. 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);

  10. Klicka på Ladda data.
  11. Den resulterande tabellen ser ut så här:

    Tabell som visar data som laddats med funktionen ApplyMap

Observera: Du kan läsa mer om ApplyMap() i följande blogginlägg i Qlik Community: Don't join - use Applymap instead (Länka inte – använd Applymap istället)

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:

  1. Lägg till följande rader i skriptet efter avsnittet CountryMap, men före avsnittet Data.
  2. 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.

  3. I avsnittet Data i skriptet ändrar du satsen Code enligt följande:
  4. 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);

  5. Klicka på Ladda data.
  6. Den resulterande tabellen ser ut så här:

    Tabell som visar data som laddats med funktionen MapSubString
    Table showing data loaded using MapSubString function.

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

Observera: Du kan läsa mer om MapSubstring() i följande blogginlägg i Qlik Community: Mapping … and not the geographical kind (Använda maps ... och det handlar inte om geografi)

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:

  1. Ersätt skriptet för tabellen Data med följande:
  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. Klicka på Ladda data.
  4. Den resulterande tabellen ser ut så här:

    Tabell som visar data som laddats med funktionen Map … Using
    Table showing data loaded using Map … Using function.