Usar la correspondencia como alternativa a la unión

El prefijo Join de QlikView constituye un potente método para combinar varias tablas de datos en el modelo de datos. Una desventaja es que las tablas combinadas pueden llegar a ser grandes y crear problemas de rendimiento. Una alternativa a Join en situaciones en las que tenga que buscar un único valor de otra tabla es utilizar la correspondencia en su lugar De este modo se puede evitar la carga de datos innecesarios que ralentizan los cálculos y que puede crear errores de cálculo, ya que las uniones pueden cambiar el número de registros en las tablas.

Una tabla de correspondencia consta de dos columnas: un campo de comparación (entrada) y un campo de valor de correspondencia (salida).

En este ejemplo tenemos una tabla de pedidos (Orders) y necesitamos saber el país del cliente, que se almacena en la tabla de clientes (Customers).

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

Para buscar el país (Country) de un cliente, se necesita una tabla de correspondencia con este aspecto:

CustomerID Country
1 Spain
2 Italy
3 Germany
4 France

La tabla de correspondencia, a la que llamamos MapCustomerIDtoCountry, se define en el script de la siguiente forma:

MapCustomerIDtoCountry: Mapping LOAD CustomerID, Country From Customers ;

El siguiente paso consiste en aplicar la correspondencia, mediante la ApplyMap función, al cargar la tabla de pedidos:

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

El tercer parámetro de la función ApplyMap se utiliza para definir qué se debe devolver cuando el valor no se encuentra en la tabla de correspondencia, en este caso Null().

La tabla resultante tendrá el siguiente aspecto:

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