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).
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 |
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:
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:
El siguiente paso es aplicar la asignación de correspondencias, mediante el uso de la función ApplyMap al cargar la tabla de pedidos:
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:
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 |