# 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 applikationen. 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 applikation och ge den ett namn.
2. Lägg till ett nytt skriptavsnitt i Skriptredigeraren.
3. Kalla avsnittet Countries.
4. 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:

Datatabell

| ID | Namn | Land | Kod |
| --- | --- | --- | --- |
| 1 | John Black | USA | SDFGBS1DI |
| 2 | Steve Johnson | U.S.A. | 2ABC |
| 3 | Mary White | USA | 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:
   ```
   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);
   ```
3. Ändra den rad som innehåller `Country,` på följande sätt:
   ```
   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.
4. Klicka på Ladda data.

   Den resulterande tabellen ser ut så här:

   Tabell som visar data som laddats med funktionen ApplyMap()

   Tabell som visar data som laddats med funktionen ApplyMap()

   Tabell som visar data som laddats med funktionen ApplyMap()ApplyMap() ![Tabell som visar data som laddats med funktionen ApplyMap.](https://help.qlik.com/sv-SE/cloud-services/Subsystems/Hub/Content/Resources/Images/tutorial-data-cleansing-applymap.png)

   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.
5. 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:
   ```
   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);
   ```
6. Klicka på Ladda data.

   Den resulterande tabellen ser ut så här:

   Tabell som visar data som laddats med funktionen ApplyMap

   Tabell som visar data som laddats med funktionen ApplyMap

   Tabell som visar data som laddats med funktionen ApplyMapApplyMap ![](https://help.qlik.com/sv-SE/cloud-services/Subsystems/Hub/Content/Resources/Images/tutorial-data-cleansing-applymap-updated.png)

Anteckning om informationFör att lära dig mer om ApplyMap(), se det här blogginlägget i Qlik Community: [Använd inte join – använd Applymap istället](https://community.qlik.com/t5/Qlik-Design-Blog/Don-t-join-use-Applymap-instead/ba-p/1467592)

## MapSubstring() funktion

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.
   ```
   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.
2. I avsnittet Data i skriptet ändrar du satsen Code enligt följande:
   ```
   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);
   ```
3. Klicka på Ladda data.

   Den resulterande tabellen ser ut så här:

   Tabell som visar data som laddats med funktionen MapSubString

   Tabell som visar data som laddats med funktionen MapSubString

   Tabell som visar data som laddats med funktionen MapSubStringMapSubString ![Tabell som visar data som laddats med funktionen MapSubString.](https://help.qlik.com/sv-SE/cloud-services/Subsystems/Hub/Content/Resources/Images/tutorial-data-cleansing-mapsubstring.png)

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

Anteckning om informationOm du vill veta mer om MapSubstring(), se det här blogginlägget i Qlik Community: [Mappning … och inte den geografiska typen](https://community.qlik.com/t5/Qlik-Design-Blog/Mapping-and-not-the-geographical-kind/ba-p/1463192)

## 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:
   ```
   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;
   ```
2. Klicka på Ladda data.

   Den resulterande tabellen ser ut så här:

   Tabell som visar data som laddats med funktionen Map … Using

   Tabell som visar data som laddats med funktionen Map … Using

   Tabell som visar data som laddats med funktionen Map … UsingMap … Using ![Tabell som visar data som laddats med funktionen Map … Using.](https://help.qlik.com/sv-SE/cloud-services/Subsystems/Hub/Content/Resources/Images/tutorial-data-cleansing-mapusing.png)