Använda mappning som ett alternativ till länkning

Join-prefixet i QlikView ä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 land, som lagras i kundtabellen (Customers).

Orders -datatabell
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
Customers -datatabell
CustomerID Name Country ...
1 DataSales Spain ...
2 BusinessCorp Italy ...
3 TechCo Germany ...
4 Mobecho France ...

För att slå upp landet (Country) för en kund behöver vi en mappningstabell som ser ut så här:

CustomerID Country
1 Spain
2 Italy
3 Germany
4 France

Mappningstabellen, som vi kallar MapCustomerIDtoCountry, är definierad i skriptet enligt följande:

MapCustomerIDtoCountry: Mapping LOAD CustomerID, Country From Customers ;

Nästa steg är att tillämpa mappningen med hjälp av ApplyMap-funktionen när vi läser in tabellen:

Orders: S *, ApplyMap('MapCustomerIDtoCountry', CustomerID, null()) as Country From Orders ;

Den tredje parametern av ApplyMap-funktionen används för att definiera vad som ska returneras när värdet inte hittas i mappningstabellen, i det här fallet Null().

Tabellen som skapas ser ut så här:

OrderID OrderDate ShipperID Freight CustomerID Country
12987 2007-12-01 1 27 3 Germany
12988 2007-12-01 1 65 4 France
12989 2007-12-02 2 32 2 Italy
12990 2007-12-03 1 76 3 Germany