EasyMorph for QlikView / Qlik Sense

Load scripts in Qlik applications can be replaced with EasyMorph in vast majority of cases. The integration takes only two lines of script per app, and provides multiple benefits:

  • Easier and faster development. Especially when it comes to debugging.
  • Reloading happens only from the point of last change (often proactively in the background). No need to reload everything from the beginning every time.
  • No annoying errors caused by a missed comma or typo, thrown long after the script started running.
  • Automatic asynchronous multi-threaded execution (Qlik scripts are single-threaded). Querying a database and loading a file is typically done simultaneously in EasyMorph.
  • EasyMorph has a bigger set of transformations than the Qlik scripting language. Everything you do in a Qlik script can be done in EasyMorph, including pivoting/unpivoting, interval match loads, resident / keep / concatenate loads, etc.
  • Automatically generated human-readable documentation in plain English that can be embedded right into Qlik apps (in web mode).
  • Built-in charts. You can visualize and profile data in the middle of the transformation logic.


Some of the biggest EasyMorph customers use EasyMorph with QlikView or Qlik Sense.

Note that EasyMorph is not as memory efficient as the Qlik's in-memory engine. Large applications (10+ GB of uncompressed data) might require arranging data partitioning in EasyMorph with incremental loading in Qlik. In all other cases EasyMorph should work out of the box with minimal setup (described below).

How it works

The integration works as follows:

  1. 1. A Qlik application runs an EasyMorph project using the EXECUTE statement.
  2. 2. The project creates one or more QVD files that correspond to tables in the app's in-memory data model.
  3. 3. The Qlik app loads the QVDs. The data model is created.
EasyMorph ETL for Qlik
See example: Integration with QlikView. Important! The example requires a demo license key which you can download here: Demo license key. No registration required.

From a practical perspective it's convenient to give the project a name similar to the app's name, and put it into the same folder. E.g. for MyApp.qvw it should be MyApp.morph located in the same folder.

The load script of the Qlik app consists of just two lines:

$(Must_include=C:\Some\Path\easymorph.qs);
CALL ImportModel('fact_table.qvd|dim1.qvd|dim2.qvd|...');
Here, easymorph.qs is a universal script for running EasyMorph projects. It can be re-used in multiple Qlik applications. In case of QlikView applications it can look as below:
SUB ImportModel(vFiles)
	// The path to morph.exe.
	SET pathEasyMorph = C:\Users\someuser\AppData\Local\EasyMorph\morph.exe;
	
	// Assume the EasyMorph project has the same name as the app,
	// and is located in the same folder.
	LET pathProject = Replace( DocumentPath(), '.qvw', '.morph');
	
	// The single quote character.
	LET quote = chr(39);
	
	// Create a comma-separated file list from the pipe-separated list.
	// A.qvd|B.qvd  -->  'A.qvd','B.qvd'
	LET list = quote & replace(vFiles, '|', quote & ',' & quote) & quote;
	
	// Run the EasyMorph project that generates QVD files for the data model.
	EXECUTE "$(pathEasyMorph)" /c "$(pathProject)";	
	
	FOR EACH file in $(list)
		// Read a QVD generated by the EasyMorph project.
		LOAD * FROM [$(file)] (qvd);
	NEXT file
END SUB
For Qlik Sense applications a slightly different variant of the universal script should be used. It should explicitly define the name of EasyMorph project to run. Note also that the EXECUTE statement requires the legacy mode enabled in Qlik Sense Server.


Try EasyMorph with Qlik today. It's easy.

Download