Combining tables with Join and Keep
A join is an operation that takes two tables and combines them into one. The records of the resulting table are combinations of records in the original tables, usually in such a way that the two records contributing to any given combination in the resulting table have a common value for one or several common fields, a so-called natural join. In QlikView, joins can be made in the script, producing logical tables.
The QlikView logic will then not see the separate tables, but rather the result of the join, which is a single internal table. In some situations this is needed, but there are disadvantages:
- The loaded tables often become larger, and QlikView works slower.
- Some information may be lost: the frequency (number of records) within the original table may no longer be available.
The Keep functionality, which has the effect of reducing one or both of the two tables to the intersection of table data before the tables are stored in QlikView, has been designed to reduce the number of cases where explicit joins needs to be used.
Join
The simplest way to make a join is with the Join prefix in the script, which joins the internal table with another named table or with the last previously created table. The join will be an outer join, creating all possible combinations of values from the two tables.
Example:
LOAD a, b, c from table1.csv;
join LOAD a, d from table2.csv;
The resulting internal table has the fields a, b, c and d. The number of records differs depending on the field values of the two tables.
Keep
One of the main features of QlikView is its ability to make associations between tables instead of joining them, which reduces space in memory, increases speed and gives enormous flexibility. The keep functionality has been designed to reduce the number of cases where explicit joins need to be used.
The Keep prefix between two LOAD or SELECT statements has the effect of reducing one or both of the two tables to the intersection of table data before they are stored in QlikView. The Keep prefix must always be preceded by one of the keywords Inner, Left or Right. The selection of records from the tables is made in the same way as in a corresponding join. However, the two tables are not joined and will be stored in QlikView as two separately named tables.
Inner
The Join and Keep prefixes in the QlikView script language can be preceded by the prefix Inner.
If used before Join, it specifies that the join between the two tables should be an inner join. The resulting table contains only combinations between the two tables with a full data set from both sides.
If used before Keep, it specifies that the two tables should be reduced to their common intersection before being stored in QlikView.
Example:
In these examples we use the source tables Table1 and Table2:
First, we perform an Inner Join on the tables, resulting in VTable, containing only one row, the only record existing in both tables, with data combined from both tables.
VTable:
SELECT * from Table1;
inner join SELECT * from Table2;
If we perform an Inner Keep instead, you will still have two tables. The two tables are of course associated via the common field A.
VTab1:
SELECT * from Table1;
VTab2:
inner keep SELECT * from Table2;
Left
The Join and Keep prefixes in the QlikView script language can be preceded by the prefix left.
If used before Join, it specifies that the join between the two tables should be a left join. The resulting table only contains combinations between the two tables with a full data set from the first table.
If used before Keep, it specifies that the second table should be reduced to its common intersection with the first table before being stored in QlikView.
Example:
In these examples we use the source tables Table1 and Table2:
First, we perform a Left Join on the tables, resulting in VTable, containing all rows from Table1, combined with fields from matching rows in Table2.
VTable:
SELECT * from Table1;
left join SELECT * from Table2;
If we perform an Left Keep instead, you will still have two tables. The two tables are of course associated via the common field A.
VTab1:
SELECT * from Table1;
VTab2:
left keep SELECT * from Table2;
Right
The Join and Keep prefixes in the QlikView script language can be preceded by the prefix right.
If used before Join, it specifies that the join between the two tables should be a right join. The resulting table only contains combinations between the two tables with a full data set from the second table.
If used before Keep, it specifies that the first table should be reduced to its common intersection with the second table before being stored in QlikView.
Example:
In these examples we use the source tables Table1 and Table2:
First, we perform a Right Join on the tables, resulting in VTable, containing all rows from Table2, combined with fields from matching rows in Table1.
VTable:
SELECT * from Table1;
right join SELECT * from Table2;
If we perform an Right Keep instead, you will still have two tables. The two tables are of course associated via the common field A.
VTab1:
SELECT * from Table1;
VTab2:
right keep SELECT * from Table2;