Usar la correspondencia como alternativa a la unión

El prefijo Join en Qlik Sense es una forma potente de combinar varias tablas de datos en el modelo de datos. Una desventaja es que las tablas combinadas pueden llegar a ser muy extensas y crear problemas de rendimiento. Una alternativa a Join en aquellas situaciones en las que necesita buscar un valor único de otra tabla es utilizar la asignación 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 se compone de dos columnas: un campo de comparación (entrada) y un campo de valores de correspondencia (salida).

En este ejemplo, tenemos una tabla de pedidos (Orders) y necesitamos conocer los países de los clientes, que están almacenados en la tabla de clientes (Customers).

Tabla de datos Orders
IDPedido FechaPedido IDTransporte Flete IDCliente
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
IDCliente Nombre País: ...
1 DatosVentas España ...
2 BusinessCorp Italia ...
3 TechCo Alemania ...
4 Mobecho Francia ...

Para buscar el país (Country) de un cliente, necesitamos una tabla de correspondencia con el siguiente aspecto:

Tabla de correspondencia
IDCliente País:
1 España
2 Italia
3 Alemania
4 Francia

La tabla de correspondencia, a la cual denominaremos MapCustomerIDtoCountry, se define en el script de la siguiente manera:

MapCustomerIDtoCountry: Mapping LOAD CustomerID, Country From Customers ;

El siguiente paso es aplicar la asignación de correspondencias, mediante el uso de la función ApplyMap al cargar la tabla de pedidos:

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

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

La tabla resultante tendrá el siguiente aspecto:

Tabla resultante
IDPedido FechaPedido IDTransporte Flete IDCliente País:
12987 2007-12-01 1 27 3 Alemania
12988 2007-12-01 1 65 4 Francia
12989 2007-12-02 2 32 2 Italia
12990 2007-12-03 1 76 3 Alemania