Använda mappning som ett alternativ till länkning
Join-prefixet i Qlik Sense är ett kraftfullt sätt att kombinera flera datatabeller i datamodellen.
En nackdel är att de kombinerade tabellerna kan bli stora och skapa prestandaproblem. Ett alternativ till Join i situationer när du behöver slå upp ett enda värde från en annan tabell är att använda mappning i stället. Detta kan göra så att du slipper läsa in onödiga data som gör beräkningarna långsammare och kan skapa beräkningsfel, eftersom joins kan ändra antalet poster i tabellerna.
En mappningstabell består av två kolumner: ett jämförelsefält (indata) och ett mappningsvärdesfält (utdata).
I det här exemplet har vi en tabell med order (Orders) och behöver veta kundens länder, som finns lagrade i kundtabellen (Customers).
OrderID | OrderDate | ShipperID | Freight | CustomerID |
---|---|---|---|---|
12987 | 2007-12-01 | 1 | 27 | 3 |
12988 | 2007-12-01 | 1 | 65 | 4 |
12989 | 2007-12-02 | 2 | 32 | 2 |
12990 | 2007-12-03 | 1 | 76 | 3 |
CustomerID | Namn | Land | ... |
---|---|---|---|
1 | DataSales | Spanien | ... |
2 | BusinessCorp | Italien | ... |
3 | TechCo | Tyskland | ... |
4 | Mobecho | Frankrike | ... |
För att slå upp landet (Country) för en kund behöver vi en mappningstabell som ser ut så här:
CustomerID | Land |
---|---|
1 | Spanien |
2 | Italien |
3 | Tyskland |
4 | Frankrike |
Mappningstabellen, som vi kallar MapCustomerIDtoCountry, är definierad i skriptet enligt följande:
Nästa steg är att tillämpa mappningen med hjälp av funktionen ApplyMap när vi laddar sorteringstabellen:
Den tredje parametern av funktionen ApplyMap används för att definiera vad som ska returneras när ett värde inte hittas i mappningstabellen, i det här fallet Null().
Tabellen som skapas ser ut så här:
OrderID | OrderDate | ShipperID | Freight | CustomerID | Land |
---|---|---|---|---|---|
12987 | 2007-12-01 | 1 | 27 | 3 | Tyskland |
12988 | 2007-12-01 | 1 | 65 | 4 | Frankrike |
12989 | 2007-12-02 | 2 | 32 | 2 | Italien |
12990 | 2007-12-03 | 1 | 76 | 3 | Tyskland |