Category

Sunday, April 20, 2014

Qlikview Script from QVD Files

QlikView stores some metadata with qvd files in the qvd header section. This information is in the form of XML and includes name of thw qvw that generated qvd, field headers, length, format etc.
Along with this information, you will also find code that is used to create the qvd file like Load, SQL select statements and store statements along with database connection string.
There are 3 ways to get the script code from the qvd files.

Text editor: 
If the QVD file is moderately small size, you can simply open the  QVD file with Text editor like NotePad++ and look out the contents of the QVD file.  The file starts with xml version info followed  <QvdTableHeader> which marks beginning of the header section.
At the end of the header section, SQL statements, Load, Store statements and data base connect statements are enclosed between <Statment> </Statement> tags and <LineageInfo> </LineageInfo> tags.
Please be careful before opening any huge QVD file with text editor as it may freeze the system. The other options mentioned below are ideal to huge QVD files.

QlikView Desktop:
Click on Table Files in script window and select the QVD file. Once dialog window opens with QVD preview, select Xml radio button. Under the tables section, select  QvdTableHeader/Lineage/LineageInfo to view the code.
QVD import window

EasyQlik QViewer:
As mentioned in one of my earlier post, EasyQlik QViewer is an useful tool to view QVD contents.
Open the QVD file with EasyQlik QViewer tool and navigate to View -> File Metadata. It pops up a File Metadata window and displays the code.


Feel free to comment, if you are aware of any other method to get the code from QVD files.

Import and export Qlikview documents into XML files

Qlikview provides option to export Qlikview documents into set of XML files. Once, you have created an XML files, it can be used to recreate the Qlikview application. 
Lets look at how to export the document into XML files.

Under Menu select File -> Export ->Export document and layout.

QV Document Export

Select the folder and click on OK. I suggest you create a new folder.

Browse Folders

Now open the folder and you will notice few XML files created.  These XML files contain metadata about the Qlikview document. This information can be used to recreate the Qlikview document.
Export option does not export the data from Qlikview document.

XML files

Now, lets look at how to recreate the Qlikview document from the XML files.
  1. Copy the folder and paste in to another folder.
  2. Rename the copied folder to have suffix "-prj". e.g: If the folder name is "Export example" , rename it to "Export example-prj".
  3. Create an new empty Qlikview document (no code, no objects) and save it in the same path as the folder copied in the above step with the same name as folder name without "-prj". e.g: "Export example.qvw"
  4. Close the empty Qlikview document created in step 3.
  5. Navigate to the folder where the Qlikview document is saved and open the Qlikview document.


Project folder


Surprise! the empty document we saved few minutes back has got the nice layout and script code. The layout and code is exactly same as the document exported. But, without the data.  You can now reload the document and save the document with data.

Thursday, April 3, 2014

Partial Reload for Fast and Selective Reloads

How many times you have loaded huge application for hours and realized you either missed a table or need to reload data in a table. But, refreshing the application takes long time. This is where Partial Reload comes into play.
Partial Reload allows Qlikview applications to add or replace selective tables into the data model while retaining already existing tables unaffected. Due to selective tables load, full reload is eliminated and reload becomes faster.

Partial Reload option is available File menu option or invoked using Ctrl+Shift+R shortcut key.

This command executes only those load and select statements that are preceded by a replace or add prefix. Other data tables remain unaffected by the command. 
Note that, It also executes any other statement (excluding normal load and select) in the script such as drop, join, keep etc.

Let's look at the usage of 2  prefixes:
add load, replace load examples
ADD  - This prefix is used to add ( or create) a new table to the existing data model.

REPLACE - This prefix is used to replace an existing table in the data model. New table name should be identical to the existing table name. If the table does not exist already, new table is created and added to the data model.

ADD/REPLACE load statements are treated just like any other load statements during regular reloads. By using ONLY keyword we can restrict ADD/REPLACE load statements execution to partial reloads only. During normal reloads these ADD ONLY / REPLACE ONLY load statements are ignored.

ONLY example

During Partial Reload, to avoid executing any other statements apart from ADD/REPLACE loads,  we can use IsPartialReload() function. This function returns -1 (True) during partial reload and 0 (False) during normal reload.
During development or testing, if a table needs to added or reloaded without affecting other tables in the data model, use the code snippet in the first tab of the script.
IsPartialReload() example

We can also use  IsPartialReload() to execute any Qlikview script statements such as drop tables, drop field to manipulate the data model  or store tables in the qvw into QVDs etc.
IsPartialreload() example -2

Partial reloads are extremely useful during coding and testing phase of Qlikview dashboard. It saves lot of reload time, makes debugging and testing faster.



Monday, March 24, 2014

Custom Sort in Qlikview

In one of my dashboards,  user asked me to create a pivot table that displays assets for top 10 dimension values and everything else grouped and displayed under 'Other'. So, at most the pivot table will have 11 values displayed in the dimension. This requirement can easily be achieved by creating calculated dimension using aggr () and rank () function as explained in my earlier post.
However, the tricky part was the custom sorting requirement. The dimension values need to be sorted in alphabetical ascending order but 'Others' should to be the last value.
After trying several work arounds, I solved custom sorting requirement using match () function. Under Sort tab in chart properties, selected Expression and  used following expression:

Match (aggr (if (rank(sum (Assets))<=10, Currency,'Others'), Currency),'1','2','3','4','5','6','7','8','9','10','Others')


I also selected Text A -> Z.

As you may know, Match() takes input string (aggr() expression in this case) and range of values. It returns the position of the input string in the range values. If the string is not found, it returns 0. In this scenario, it simply returns 11 for 'Others' and 0 for everything else.

This made 'Others' to be sorted as last value (11th position) and everything else is sorted in alphabetical order.

Custom sorting in Qlikview can also be achieved by creating an inline table with 2 columns, containing dimension value (same name as actual dimension column) and sort order ( numeric column with sort order numbers).  Qlikview associates dimension column with actual dimension in the data model. While sorting in UI, we can select expression and use the sort order column from the inline table for custom sort order. 
But , this was a different case as the dimension values are constantly changing and too many dimensions to code the inline table.

Feel free to comment if you know any other alternative or better solutions

Sunday, March 23, 2014

Some Useful Tools and Links

In this post , I'm trying to document some useful Qlikview tools that I often use to make Qlikview application development better, faster and easier.

Nested If-statements Generator
How many times you have struggled get a complex, nested if statements correctly. This online tool by Stefan Walther makes it quite easy to write the nested If statements.
Tool link
Documentation

Set Analysis Wizard for Qlikview
Stefan Walther created one more online tool to create Set analysis expressions along with documentation.
Tool link
Documentation

EasyQlik Qviewer
Often we run into situation where we need to open and analyze the QVD files. To examine the QVD content, the only easy way is to load the QVD into QVW.
EasyQlik Qviewer comes handy in these situations. It is a fast and lightweight standalone file viewer for analyzing Qlikview's QVD files. This helpful tool has many features apart from opening the QVD files.
It speeds up analysis and debugging and saves lot time. Though Its a paid tool, trial version is available with some limitations.
Link

Document Analyzer And Other Useful Tools
Rob Wunderlich has developed some of the very useful Qlikview tools. I particularly use
DocLog Analyzer. This tool will load qvw document logs from a directory and provide visualization of where time is spent in a script.
Link to All Tools

Qlikview Optimizer
This application uses .mem file to provides insight into RAM usage of qvw document. 
Tool link

QlikView Notepad++ Language Definition
This custom language definition for Notepad++ developed by qlikviewaddict provides convenient platform to edit qlikview load scripts and qvs files. The QlikView Custom Language Definition for Notepad++ gives basic syntax highlighting, auto-completion and code tool-tips when working with QlikView script files in Notepad++.
Tool link


Qlikview Data Profiler
This handy tool by Steve Dark provides quick and easy way of viewing the data that is in the qvw application. It is basically a QVW file with list box, table and other objects. These objects can be copied and pasted into any Qlikview application to view the data of that document.
Link to Data Profiler Page

Qlikview Power Tools
Power Tools is a small utility program or application that aid in performing a specific functionality or that extends QlikView functionality in some other way. The Power Tools are not supported and is seen as use-as-is tools, supplied separate from the QlikView product suite.
These tools are mostly helpful in managing server side activities.
Link to Power Tools Page


Qlikview Server CAL Manager
This application provides insights into server CALs allocation and usage. It can also delete the unused CALs after a defined number of days.


I'm sure there are many other useful tools that's missing from the list. Feel free to comment if you know of any.