Utilizzo del mapping come alternativa all'unione
Il prefisso Join in QlikView è un metodo efficace per la combinazione di più tabelle dati nel modello dati. Uno dei suoi svantaggi è che le dimensioni delle tabelle combinate possono diventare eccessive creando problemi di prestazioni. Una soluzione alternativa a Join nei casi in cui occorra ricercare un unico valore in un'altra tabella è quella di utilizzare il mapping. Ciò evita di dover caricare dati superflui che rallentano i calcoli e possono creare errori di calcolo, dato che le unioni possono modificare il numero di record nelle tabelle.
Una tabella di mapping è composta da due colonne; un campo di confronto (input) e un campo con il valore del mapping (output).
In questo esempio, occorre presentare una tabella di ordini (Orders) ed è necessario conoscere il paese del cliente, memorizzato nella tabella dei clienti (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 | ... |
Per poter ricercare il paese (Country) di un cliente, occorre una tabella di mapping come quella seguente:
| CustomerID | Country |
|---|---|
| 1 | Spain |
| 2 | Italy |
| 3 | Germany |
| 4 | France |
La tabella di mapping, denominata MapCustomerIDtoCountry, viene definita nello script nel modo seguente:
Il passaggio successivo è quello di applicare il mapping mediante la funzione ApplyMap durante il caricamento della tabella dell'ordine:
Il terzo parametro della funzione ApplyMap viene utilizzato per definire i valori da restituire quando il valore non è stato trovato nella tabella di mapping, in questo caso Null().
La tabella risultante avrà l'aspetto seguente:
| 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 |