Mapping gebruiken als alternatief voor joins
Het prefix Join in QlikView 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).
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 | Name | Country | ... |
---|---|---|---|
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:
CustomerID | Country |
---|---|
1 | Spain |
2 | Italy |
3 | Germany |
4 | France |
De toewijzingstabel die we MapCustomerIDtoCountry noemen, wordt in het -script als volgt gedefinieerd:
In de volgende stap passen we de toewijzing toe met de functie ApplyMap tijdens het laden van de tabel met bestellingen:
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:
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 |