The keep command in QlikView is used to combine data from two data sets keeping both the data sets available in memory. It is very similar to joins we covered in the previous chapter except for two major differences. First difference is − in case of keep; both the datasets are available in QlikView's memory while in join the load statements produce only one data set from which you have to choose the columns. The second difference being − there is no concept of outer keep where as we have outer join available in case of joins.
Let us consider the following two CSV data files, which are used as input for further illustrations.
Product List: ProductID,ProductCategory 1,Outdoor Recreation 2,Clothing 3,Costumes & Accessories 4,Athletics 5,Personal Care 6,Hobbies & Creative Arts Product Sales: ProductID,ProductCategory,SaleAmount 4,Athletics,1212 5,Personal Care,5211 6,Hobbies & Creative Arts,1021 7,Display Board,2177 8,Game,1145 9,soap,1012 10,Beverages & Tobacco,2514
We load the above input data using the script editor, which is invoked by pressing Control+E. Choose the option Table Files and browse for the Input file. Then we edit the commands in the script to create an inner keep between the tables.
Inner keep fetches only those rows, which are present in both the tables. In this case, the rows available in both Product List and Product Sales table are fetched. We create a Table Boxes using the menu Layout → New Sheet Objects → Table Box.
First, we choose only the productSales table, which gives us the fields - ProductID, ProductCategory and SaleAmount to be displayed.
Next, we choose the ProductList data set, which gives us the fields ProductID and ProductCategory.
Finally, we choose the All Tables option and get all the available fields from all the tables.
The following report shows all the Tables Boxes from the above given steps.
Left keep is similar to left join, which keeps all the rows from the table in the left along with both the data set being available in QlikView's memory.
The following script is used to create the resulting data sets with left keep command.
productsales: LOAD ProductID, ProductCategory, SaleAmount FROM [C:\Qlikview\data\product_lists.csv] (txt, codepage is 1252, embedded labels, delimiter is ',', msq); left keep(productsales) productlists: LOAD ProductID, ProductCategory FROM [C:\Qlikview\data\Productsales.csv] (txt, codepage is 1252, embedded labels, delimiter is ',', msq);
When we change the script as above and refresh the data in the report using Control+R, we get the following data in the sheet objects.
Right keep is similar to left join, which keeps all the rows from the table in the right along with both the data set being available in QlikView's memory.
The following script is used to create the resulting data sets with left keep command.
productsales: LOAD ProductID, ProductCategory, SaleAmount FROM [C:\Qlikview\data\product_lists.csv] (txt, codepage is 1252, embedded labels, delimiter is ',', msq); right keep(productsales) productlists: LOAD ProductID, ProductCategory FROM [C:\Qlikview\data\Productsales.csv] (txt, codepage is 1252, embedded labels, delimiter is ',', msq);
When we change the script as above and refresh the data in the report using Control+R, we get the following data in the sheet objects.