Mapping gebruiken als alternatief voor joins

Het prefix Join in Qlik Sense is een krachtige manier om meerdere gegevenstabellen te combineren in het gegevensmodel. Een nadeel is dat de gecombineerde tabellen groot kunnen worden, wat leidt tot een lagere snelheid. Een alternatief voor Join in situaties waarin u één waarde moet opzoeken uit een andere tabel, is het gebruik van mapping. U hoeft dan geen onnodige gegevens te laden die de berekeningen trager maken en rekenfouten kunnen veroorzaken omdat joins het aantal records in de tabellen kunnen veranderen.

Een toewijzingstabel bestaat uit twee kolommen: een vergelijkingsveld (invoer) en een veld met de toewijzingswaarde (uitvoer).

In dit voorbeeld hebben we een tabel met orders (Orders) en willen we het land van de klant weten. Dit is opgeslagen in de klantentabel (Customers).

Gegevenstabel Orders
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
Gegevenstabel Customers
CustomerID Naam Land: ...
1 DataSales Spain ...
2 BusinessCorp Italy ...
3 TechCo Germany ...
4 Mobecho France ...

Om het land (Country) van een klant op te zoeken, hebben we een toewijzingstabel nodig die er als volgt uitziet:

Toewijzingstabel
CustomerID Land:
1 Spain
2 Italy
3 Germany
4 France

De toewijzingstabel die we MapCustomerIDtoCountry noemen, wordt in het script als volgt gedefinieerd:

MapCustomerIDtoCountry: Mapping LOAD CustomerID, Country From Customers ;

In de volgende stap passen we de toewijzing toe met de functie ApplyMap tijdens het laden van de tabel met bestellingen:

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

De derde parameter van de functie ApplyMap legt vast wat moet worden geretourneerd als de waarde niet wordt gevonden in de toewijzingstabel, in dit geval Null().

De resulterende tabel ziet er als volgt uit:

Resultaattabel
OrderID OrderDate ShipperID Freight CustomerID Land:
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