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 Qlik Sense se pueden efectuar joins en el script, produciendo tablas lógicas.
Es posible unir tablas ya en el script. La lógica de Qlik Sense 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 Qlik Sense 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 las dos tablas a la intersección de los datos de la tabla antes de que las tablas se almacenen en Qlik Sense, se ha diseñado para reducir el número de casos en los que es necesario usar uniones explícitas.
Join
La manera más fácil de hacer un join es mediante la inclusión del prefijo Join en el script, el cual une una tabla interna con otra tabla designada o con la última tabla previamente creada. La unión será una unión externa, creando todas las combinaciones posibles de valores de ambas tablas.
Ejemplo:
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.
Para más información, vea Join.
Uso de Join
El prefijo explícito Join en el lenguaje de script de Qlik Sense realiza una unión completa (full join) de las dos tablas. El resultado es una sola tabla. Tales uniones a menudo pueden dar como resultado tablas muy grandes.
Haga lo siguiente:
- Abra la app Tutorial de script avanzado.
- Agregue una nueva sección de script en el Editor de carga de datos.
- Denomine a la sección Transactions.
-
En DataFiles en el menú a la derecha, haga clic en Seleccionar datos.
- Cargue y después seleccione Transactions.csv.
- En la ventana Seleccionar datos de, haga clic en Insertar script.
- Cargue y a continuación seleccione Salesman.xlsx.
- En la ventana Seleccionar datos de, haga clic en Insertar script.
- Haga clic en Cargar datos.
- Abra el Visor del modelo de datos. El modelo de datos tendrá el siguiente aspecto:
Su script debería tener el aspecto siguiente:
No obstante, tener las tablas Transactions y Salesman separadas puede no ser el resultado deseable. Puede que desee unir ambas tablas.
Haga lo siguiente:
- Para dar un nombre a la tabla unida, agregue la siguiente línea sobre la primera sentencia LOAD:
- Para unir las tablas Transactions y Salesman, agregue la siguiente línea encima de la segunda sentencia LOAD:
- Haga clic en Cargar datos.
- Abra el Visor del modelo de datos. El modelo de datos tendrá el siguiente aspecto:
Transactions:
Join(Transactions)
Su script debería tener el aspecto siguiente:
Transactions:
LOAD
"Transaction ID",
"Salesman ID",
Product,
"Serial No",
"ID Customer",
"List Price",
"Gross Margin"
FROM [lib://DataFiles/Transactions.csv]
(txt, codepage is 28591, embedded labels, delimiter is ',', msq);
Join(Transactions)
LOAD
"Salesman ID",
Salesman,
"Distributor ID"
FROM [lib://DataFiles/Salesman.xlsx]
(ooxml, embedded labels, table is Salesman);
Todos los campos de las tablas Transactions y Salesman están combinados ahora en una sola tabla Transactions.
Keep
Una de las principales características de Qlik Sense es su capacidad de hacer asociaciones entre tablas en lugar de unirlas (mediante join). Esto reduce mucho espacio en memoria e incrementa la velocidad, lo que se traduce en una flexibilidad enorme. La funcionalidad de 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 reduce una o las dos tablas a la intersección de los datos de la tabla antes de que se almacenen en Qlik Sense. El prefijo Keep debe ir precedido siempre de una de las 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 Qlik Sense como dos tablas independientes y con distintos nombres.
Para más información, vea Keep.
Inner
Los prefijos Join y Keep en el script de carga de datos pueden ir precedidos por el prefijo Inner.
Si se usa antes de Join, especifica que el join entre las dos tablas debería ser un inner join. La tabla resultante contiene solo combinaciones ente las dos tablas, con un conjunto completo de datos de ambas partes.
Si se usa antes de Keep, especifica que las dos tablas deberían reducirse a su intersección común antes de ser almacenadas en Qlik Sense.
Ejemplo:
En estos ejemplos utilizamos las tablas fuente Table1 y Table2.
Tenga en cuenta que esto son únicamente ejemplos. No hay ejercicios de acompañamiento que completar en Qlik Sense.
A | B |
---|---|
1 | aa |
2 | cc |
3 | ee |
A | C |
---|---|
1 | xx |
4 | yy |
Inner Join
Primero hacemos un Inner Join en las tablas, lo que da como resultado a VTable, que contiene solo una fila, el único registro que existe en ambas tablas, con datos combinados de ambas tablas.
A | B | C |
---|---|---|
1 | aa | xx |
Inner Keep
Si en cambio realizamos un Inner Keep, todavía tendremos dos tablas. Las dos tablas están asociadas por el campo común A.
A | B |
---|---|
1 | aa |
A | C |
---|---|
1 | xx |
Para más información, vea Inner.
Left
Los prefijos Join y Keep en el script de carga de datos pueden ir precedidos por el prefijo left.
Si se usa antes de Join, especifica que el join entre las dos tablas debería 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 reducirse a su intersección común con la primera tabla antes de ser almacenada en Qlik Sense.
Ejemplo:
En estos ejemplos utilizamos las tablas fuente Table1 y Table2.
A | B |
---|---|
1 | aa |
2 | cc |
3 | ee |
A | C |
---|---|
1 | xx |
4 | yy |
Primero realizamos un Left Join en las tablas, dando como resultado VTable, que contiene todas las filas de Table1, combinadas con campos de las correspondientes filas en Table2.
A | B | C |
---|---|---|
1 | aa | xx |
2 | cc | - |
3 | ee | - |
Si en cambio realizamos un Left Keep, todavía tendremos dos tablas. Las dos tablas están asociadas por el campo común A.
A | B |
---|---|
1 | aa |
2 | cc |
3 | ee |
A | C |
---|---|
1 | xx |
Para más información, vea Left.
Right
Los prefijos Join y Keep en el lenguaje de script de Qlik Sense pueden ir precedidos por el prefijo right.
Si se usa antes de Join, especifica que el join entre las dos tablas debería ser un right 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 reducirse a su intersección común con la segunda tabla antes de ser almacenada en Qlik Sense.
Ejemplo:
En estos ejemplos utilizamos las tablas fuente Table1 y Table2.
A | B |
---|---|
1 | aa |
2 | cc |
3 | ee |
A | C |
---|---|
1 | xx |
4 | yy |
Primero realizamos un Right Join en las tablas, dando como resultado VTable, que contiene todas las filas de Table2, combinadas con campos de las correspondientes filas en Table1.
A | B | C |
---|---|---|
1 | aa | xx |
4 | - | yy |
Si en cambio realizamos un Right Keep, todavía tendremos dos tablas. Las dos tablas están asociadas por el campo común A.
A | B |
---|---|
1 | aa |
A | C |
---|---|
1 | xx |
4 | yy |
Para más información, vea Right.