Combinar tablas con Join y Keep

Un join es una operación que usa dos tablas y las combina en una sola. Los registros de la tabla resultante son combinaciones de registros de las tablas originales, normalmente de manera que los dos registros contribuyen a que cualquier combinación en la tabla resultante tenga un valor común para uno o varios campos comunes, lo que se conoce como un natural join. En QlikView se pueden efectuar joins en el script, produciendo tablas lógicas.

La lógica de QlikView no percibirá entonces dichas tablas como separadas, sino como el resultado de la unión (join), es decir, como si se tratara de una única tabla lógica. En algunas situaciones esto puede ser necesario, pero tiene sus inconvenientes:

  • Las tablas cargadas suelen aumentar de tamaño, lo cual hace que QlikView funcione a menor velocidad.
  • Parte de la información podría perderse: la frecuencia (el número de registros) de la tabla original podría no estar ya disponible.

La funcionalidad de Keep, que tiene el efecto de reducir una o ambas tablas a la intersección de los datos tabulares antes de almacenarlas en QlikView, se ha diseñado precisamente para reducir el número de casos en que hay que utilizar joins explícitos.

Nota: En esta documentación se utiliza el término unir (join) generalmente para referirse a las uniones efectuadas antes de crear las tablas internas. Sin embargo, la asociación que se realiza una vez creadas las tablas lógicas, también es un join en esencia.

Join

La manera más fácil de hacer una unión es empleando el prefijo Join en el script; este une la tabla interna con otra tabla o con la última tabla lógica creada. La unión será del tipo outer join, creando todas las combinaciones posibles de valores de ambas tablas.

Example:  

LOAD a, b, c from table1.csv;

join LOAD a, d from table2.csv;

La tabla interna resultante tiene los campos a, b, c y d. El número de registros difiere dependiendo de los valores de campo de las dos tablas.

Nota: Los nombres de los campos que se desea unir deberán ser exactamente iguales. El número de campos que se van a unir es arbitrario. Normalmente, las tablas deberían tener uno o varios campos en común. Si no tienen ningún campo en común, se devuelve el producto cartesiano de las tablas. También es posible tener todos los campos en común, pero en general no tiene sentido. A menos que se haya especificado el nombre de una tabla previamente cargada en la sentencia Join, el prefijo Join utilizará la última tabla previamente creada. Por lo tanto, el orden de las dos sentencias no es arbitrario.

Keep

Una de las principales características de QlikView es su capacidad de hacer asociaciones entre tablas en lugar de unirlas (mediante join). Esto permite ahorrar mucho espacio en la memoria e incrementar la velocidad, lo que se traduce en una flexibilidad enorme. La funcionalidad keep se ha diseñado para reducir el número de casos en los que se tengan que usar joins explícitos.

El prefijo Keep entre dos sentencias LOAD o SELECT tiene el efecto de reducir una o ambas tablas a la intersección de datos tabulares antes de almacenarlas en QlikView. El prefijo Keep debe ir siempre precedido por una de ls palabras clave Inner,Left o Right. La selección de los registros desde las tablas se hace de la misma forma que en un join correspondiente. No obstante, las dos tablas no se unen y se almacenan en QlikView como dos tablas independientes y con distintos nombres.

Inner

Los prefijos Join y Keep del lenguaje de script de QlikView pueden llevar el prefijo Inner.

Si se usa delante de Join, especifica que el join entre las dos tablas debe ser un inner join (una unión interna). La tabla resultante contiene solo combinaciones ente las dos tablas, con un conjunto completo de datos de ambas partes.

Si se usa delante de Keep, especifica que las dos tablas deben ser reducidas a su intersección común antes de almacenarlas en QlikView.

Example:  

En estos ejemplos se utilizan las tablas de origen Table1 y Table2:

Inner Ejemplos de tablas de origen

En primer lugar se realiza un Inner Join en las tablas, lo que da como resultado VTable, que contiene solo una fila, el único registro existente en ambas tablas, con los datos combinados de ambas tablas.

VTable:

SELECT * from Table1;

inner join SELECT * from Table2;

Ejemplo de Inner Join

Si en cambio se realiza Inner Keep, se seguirán teniendo dos tablas. Las dos tablas están, por supuesto, asociadas a través del campo A.

VTab1:

SELECT * from Table1;

VTab2:

inner keep SELECT * from Table2;

Ejemplo de Inner Keep

Left

Los prefijos Join y Keep del lenguaje de script de QlikView pueden llevar el prefijo left.

Si se usa delante de Join, significa que la unión o join entre las dos tablas debe ser un left join. La tabla resultante contiene solo combinaciones entre las dos tablas, con el conjunto de datos completo de la primera tabla.

Si se usa antes de Keep, especifica que la segunda tabla debe ser reducida a su intersección común con la primera tabla antes de ser almacenada en QlikView.

Example:  

En estos ejemplos se utilizan las tablas de origen Table1 y Table2:

Left Ejemplos de tablas de origen

En primer lugar, se realiza un Left Join en las tablas, lo que da como resultado VTable, que contiene todas las filas de la Table1, junto con los campos de las filas coincidentes en la Table2.

VTable:

SELECT * from Table1;

left join SELECT * from Table2;

Ejemplo de Left Join

Si en cambio se realiza Left Keep, se seguirán teniendo dos tablas. Las dos tablas están, por supuesto, asociadas a través del campo A.

VTab1:

SELECT * from Table1;

VTab2:

left keep SELECT * from Table2;

Ejemplo de Left Keep

Right

Los prefijos Join y Keep del lenguaje de script de QlikView pueden llevar el prefijo right.

Si se usa delante de Join, significa que la unión o join entre las dos tablas debe ser un left join. La tabla resultante solo contiene combinaciones entre las dos tablas, con un conjunto completo de datos de la segunda tabla.

Si se usa antes de Keep, especifica que la primera tabla debe ser reducida a su intersección común con la segunda tabla, antes de ser almacenada en QlikView.

Example:  

En estos ejemplos se utilizan las tablas de origen Table1 y Table2:

Right Ejemplos de tablas de origen

En primer lugar, se realiza un Right Join en las tablas, lo que da como resultado VTable, que contiene todas las filas de la Table2, junto con los campos de las filas coincidentes en la Table1.

VTable:

SELECT * from Table1;

right join SELECT * from Table2;

Ejemplo de Right Join

Si en cambio se realiza Right Keep, se seguirán teniendo dos tablas. Las dos tablas están, por supuesto, asociadas a través del campo A.

VTab1:

SELECT * from Table1;

VTab2:

right keep SELECT * from Table2;

Ejemplo de Right Keep