One of the most useful features of Qlik Sense for me when developing a front-end is how easy it is to paginate data. Any front-end developer knows that updating thousands of dom elements is not exactly ideal, because dom updates are slow. But Qlik Sense makes it so easy to avoid ever having to do that.

For instance, take a look at the location dropdown for the Solar Eclipse demo at There’s over 29,000 rows there! But, here’s the trick – there’s only ever 10 rows in the dom at any time, and when a user scrolls what’s actually happening is the dropdown is receiving new data from Qlik Sense.

To paginate data with Qlik Sense is pretty simple. With enigma.js you’ll just create your object, either a hypercube or a list object, like usual, but you don’t need to pass it any qInitialDataFetch attribute. Then anytime you need some data, you just call a method to get data. Which method you call depends on your object. For a straight hypercube, you’d just call getHyperCubeData method like below -


  qInfo: {
    qType: "visualization"
  qHyperCubeDef: {       
    qDimensions: [
      // qDimensions
    qMeasures: [
      // qMeasures
}).then((object) => {
  object.getHyperCubeData('/qHyperCubeDef', [
   // this will fetch 1 page of data, but you could request multiple pages by adding more qPages here
      qTop: 0,
      qLeft: 1,
      qHeight: 2,
      qWidth: 10
  ]).then((data) => {
    // do stuff with data


If your hypercube is in pivot, stack, or tree mode, or if your object is a list object, you’ll have to use the corresponding method in place of getHyperCubeData, which you can find here


If you’re using the Capability APIs, while not technically supported, the same methods work with the object that is returned from the promise (not the layout returned in the callback).

Jennell McIntire

Dimension Colors

Posted by Jennell McIntire Oct 20, 2017

A few months ago, I wrote a blog about setting colors in master dimensions and measures.  Today I am going to share a little more about how master dimensions can be set to a single color or multiple colors.  Let’s first talk about setting a dimension to a single color.  This can be helpful when you want to use a color other than the Qlik Sense default color in your charts.  For instance, a bar chart may look like this with the default blue color.

default blue.png

But if your app is using a different color theme, you may want all the bars to be purple for instance.  You can do this by setting the Dimension color on the Edit dimension tab of the master dimension to the color you would like the dimension to be.  This color will be the same for all dimension values which is good practice when there are many dimension values.

edit dimension small.pngpurple small.png



















Now let's discuss setting a master dimension to multiple colors.  Sometimes you may need the color for each dimension value to be different.  This is when you can use the Value colors tab of the master dimension to set the colors of each dimension value.  The stacked bar chart below is a good example of when you may want the dimension values to have different colors.  This chart is looking at the calls by activity type and call type.  The call type dimension values are set to 3 different shades of blue so that they can be distinguished in the stacked bar chart.  If the color values were not set, then the standard blue, red and yellow colors would be used instead.


stacked small.png

The color values can be set on the Value colors tab of the master dimension (see image below).  A color scheme can be used to set the colors or each value can be set manually.  The call type field only has 3 values so it is a good candidate for value colors.  You want to avoid using values colors or coloring by dimension if there are several different dimension values.  Too many different colors (or not so different colors) can become confusing and indistinguishable to the user.

value colors.png


On the Value colors tab, there is also the option to select a color for Others, if you are adding any limitations to the dimension, or for Null values.  When using the value colors to color your dimensions, be sure to select color by dimension and enable library color in the properties of the chart.  Check out this video in Qlik Sense Help for more information.


These color features available in dimension master items provide one place to set and edit the dimension colors used in charts.  You can set it once and use it in multiple charts.  This promotes consistency in our apps thus making them easier to digest and understand.




cloud blog 2.pngHey Guys! Thanks for taking a moment to read this blog and view the brief 60 second video on our Qlik Web Connectors. It is no surprise that we are surrounded by mountains of data. But, what good is it if you don't have easy access to it? I'm not talking about data that sits in traditional files and databases. I'm talking about data that sits in numerous cloud-based services, social media and web sites.Depending on your business, this data can contain valuable insights that help you make better decisions as wells as customer sentiments that help improve your products and services.


Our Qlik Web Connectors is the answer to your additional data needs, whether its from a cloud-based CRM, data warehouse or social media application. Watch the below video to learn how simple it is to fetch this data and bring it directly into your Qlik Sense or QlikView environments. And...Qlik Sense Cloud Business subscribers, guess what, you have access it to them too!


Qlik Sense in 60 - Qlik Web Connectors


NOTE: To increase resolution or size of the video, select the YouTube logo at the bottom right of the player. You will be brought directly to YouTube where you can increase the resolution and size of the player window. Look for the 'settings' gears icon in the lower right of the player once at YouTube.


Qlik Sense Cloud Business Subscribers:

As stated in the video, Qlik Sense Cloud Business subscribers can also get immediate access to a great selection of many of our web connectors, with more being added on a regular basis. With Qlik Sense Cloud Business, subscribers can quickly and easily fetch data from many web-based sources with a new integrated connector selection list and query manager. The addition of these features, eliminates the need to copy and paste any script as you would when using the standalone Qlik Web Connector service.


How-To Videos

For more information on a list of Web Connectors just released for Qlik Sense Cloud Business check out our recent announcement here: Getting More Connected in the Cloud


Additional Web Connector Resources:


Learn more from my colleague Adam Mayer who shows some brief examples using Twiter, Facebook and Google Analytics:



We want to hear from you, so please join the conversation by posting your questions and comments below.




Mike Tarallo


Can't see the video?


Download the .mp4 and watch from your computer or mobile device

There are cases where we need to switch among charts in a mashup. The easiest way is with jQuery show/hide or if you are using Angular then show the chart based on the model value.


But what about if we have many charts, with the same measures but only the dimensions change? What if we could just change the dimension in the engine and let the engine take care of all the changes and animations?


This is possible through the Visualization API and the applyPatches() method.


Here I will explain how to create a simple dropdown that changes based on the dimension selected. Since I am using Angularjs 1.5.8 like Qlik Sense September 2017, I have created a component that

a) gets first object,

b) populates a dropdown with titles and

c) upon change, the chart is changing based on the dimension provided


First, we get the first object as usual and display it in our mashup. This is what the html looks like





                    {title:'Total Costs by Branch', dimension:'Branch'},

                    {title:'Total Costs by Work Center', dimension:'Work Center Name'},

                    {title:'Total Costs by Division', dimension:'Division'},

                    {title:'Total Costs by Collection', dimension:'Collection'}




Here, in the "qvid" is the id (BRjnYJ) of the first object. In the "data" we add the title as we want it to display in our dropdown and the actual dimension.


In our components's Javascript code, we get and then show the object as usual$ctrl.qvid).then(function (viz) {

        $ctrl.viz = viz;





Here is the html code for the component

<div class="sense-object-multi-dropdown">

    <div class="v title-1">{{ $ctrl.currentData.title }}</div>

    <div class="dropdown">

        <a class="btn btn-secondary dropdown-toggle" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">

            <i class="fa fa-chevron-down" aria-hidden="true"></i>


        <div class="dropdown-menu" aria-labelledby="dropdownMenuButton">

            <a class="dropdown-item" href ng-repeat="item in $" ng-click="$ctrl.change(item)">{{item.title}}</a>



    <div class="qvobject" id="obj" height="{{$ctrl.height}}"></div>



Now, by just this, the page should have a chart and a dropdown populated.

2017-10-12 10_41_09-Plant Operations.png


Now, let's add the code that will change the dimension

    $ctrl.change = function(item) {

        $ctrl.currentData = item;


            qOp: "replace",

            qPath: "/qHyperCubeDef/qDimensions/0/qDef/qFieldDefs/0",

             qValue: `\"${$ctrl.currentData.dimension}\"`

  }], true);



Here we are telling the engine that, hey for this object (model), replace the first field (qFieldDefs) of the first dimension (qDimensions) to the one I am giving you.


That's it. Once the engine receives the new change via websocket, it will redraw automatically, without any flickering and it will animate from one chart to the next.


Attached is my entire component if you want to use it in your Angular apps. Feel free to remove all the unnecessary libraries to make it work.



Live example: Plant Operations "Total Costs by Division"



Coming from a traditional business intelligence and ETL background where I’ve used both proprietary and open source solutions – things like OLAP, data modeling, SQL, 4GLs, semantic layers and even coding dashboards were commonplace for many years. So when I started with Qlik, I was not only thrilled, but quite biased towards the way I manged and created analytics . As I set out to build my first Qlik application I immediately had many questions:

  • Where do I build my semantic / metadata layer?
  • Where is my data modeler tool to define my table relationships?
  • How do I place parameters to pass where-conditions to my database?
  • How do I wire my visualizations to make my dashboards interactive?


As I set out on this journey to appreciate Qlik, I was surprised at what I found. In this multi-part blog series I will share with you some of my pleasant surprises that changed the way I create and work with analytics.

So let’s dive in further to my first Qlik pleasant surprise.


#1: Where's the "Semantic Layer"?!


NOTE: The subject matter in this topic can have many moving parts and is not meant to be a direct comparison to traditional BI or other data visualization tools. It is an expression of my experiences when first working with Qlik and meant to inform those who might have similar expectations when comparing Qlik to other BI tools.

A typical first step when using BI tools is that you usually create a metadata or semantic layer before you can begin creating your reports and dashboards. Depending on the tools being used, sometimes you even need to create more than one…one layer to support operational reporting and one to support interactive OLAP. (Often when a vendor's software stack combines a number of acquired tools, you may see this occur.) Creating abstraction layers such as these are usually performed by BI administrators whom are familiar with the data. Metadata / semantic layers provide a unified, consolidated view of data across the organization. They are important middlemen that connect back-end data to BI client tools and add a layer of governance and security. These centralized repositories store many attributes of your data including specific attributes used by the tools:

  • Connection information
  • Business friendly field names
  • Field and row-level security
  • Aggregations
  • Data modeling properties such as keys, and referential integrity
  • Calculated expressions

Once a semantic layer is prepared, the BI client tools can begin using the "data models", "business objects", "data dictionary" etc, to create reports and dashboards.

Now, when I started working with Qlik, I was unsure how this step was performed -OR- perhaps what I was doing seemed more transparent and less rigid than what I was used to. For starters I could quickly load data directly from many sources and go directly into my analysis. Qlik simply loads and indexes data into its apps during the app creation. These apps then operate within an associative indexing engine. (more on that in another article) - If I wanted to add multiple sources, I can visually profile the data and define relationships automatically - no complex data modeling or SQL required. I did not need to worry if I was "joining" correctly or even understand the relationships of the tables. I found this to be a huge time-saver and the process was fairly simple to navigate. This was indeed a pleasant surprise.

10-10-2017 8-20-16 AM.png

Once the data was loaded into the app, I immediately had access to my fields and could begin creating my analysis. In addition, I discovered that I can also set up reusable expressions, measures, dimensions and even predefined visualizations, through a feature known as Master Items. Master Items are defined in the Qlik Sense App rather than a centralized server. They allow business users to use a pre-defined library of assets so they can easily create and customize visualizations. (Note: Master Items are more beneficial to users of Qlik Sense Enterprise as opposed to those using Qlik Sense Desktop.)


This was a pleasant surprise as it was extremely easy to get started with Qlik and cut my data preparation time significantly, in turn giving me more time to create my analysis.So basically, I discovered that Qlik, defines its "semantic layer" within the app itself, as opposed to a separate repository?!? Hmmm.....

A healthy debate ensues

To some degree, I understand there are some opinions about this approach, and some may say "That's not a semantic layer". Now there are ways that you can export a Qlik data model and data index, created within the app, to disk (.qvd) and use them with other applications. This has been done widely and successfully by many of our customers. But...with the new Master Items approach introduced in Qlik Sense, we needed a way to centralized those assets for other applications as well, so our team of experts have created a Qlik Powertool, the Governed Metrics Service.

"The Governed Metrics Service (GMS) Powertool provides the ability to control and provision the use of governed Master Items. GMS loads externally defined metrics and applies them to one or more designated applications. GMS will quickly have you on the right track to governed self-service."

To learn more about GMS check it out here: Introduction - EA Powertools Governed Metrics Service

My journey with Qlik is no where near completed and I anticipated many more pleasant surprises. Next week I'll cover another pleasant Qlik surprise that helped me uncover things in my data I had not idea existed. Have a comment or question, a pleasant surprise you want to share? We want to hear from you. Use the comments section below to ask a question and join the discussion.


Michael Tarallo (@mtarallo) | Twitter

For starters, if you are a visual learner and new to Qlik, take a look at this brief video to get an idea of how to provision from multiple tables using Qlik Sense:


NOTE: To increase resolution or size of the video, select the YouTube logo at the bottom right of the player. You will be brought directly to YouTube where you can increase the resolution and size of the player window. Look for the 'settings' gears icon in the lower right of the player once at YouTube. (video and sample files)

For more videos that can help you get started with Qlik Sense:

My previous post versed about what I think it is a very interesting use case of Set analysis element function P() to create dynamic sets and how to operate with those sets to solve really complex analysis scenarios in an easy and elegant way.


In the comments section of that post, I got a couple of questions regarding one of the charts we used in our web app, the so-called Tornado Chart. This post goes to answer that question by showing how to create a Tornado/Butterfly Chart.


Step by step guide:


Note: For the following example I got a sample data containing Population by Age data from the US census. It has 3 columns, Age Range, Male population and Female population.


  1. Drag and drop a bar chart to your sheet.
  2. Add a dimension.  I’ll add Age Range to mine.
  3. Add two expressions. I need one expression to display female’s population and a second one for males.

    At this point, my chart looks like this:


  4. Next, we will adjust the bar chart sorting and appearance.

    Sort the chart according to your data. For this data set my best option is to sort Age Range using load order, to do so, move Age Range to the top and then uncheck all the sorting options to sort on load order.
    In the Appearance section of the chart property panel, switch Presentation to Horizontal and Stacked and set Value labels to Auto.

  5. Now we need to figure out how to “move the y axis to the center of the chart". To do so I’ll transform the data to make Female population negative by changing my expression to: Sum(FemalePopulation)*-1


  6. My chart looks almost right but there’s still a detail that doesn't fits well in the picture above. Note that the value labels for Female Population are displayed as negative numbers. While technically correct, it doesn't work for this chart, I need it to be displayed as positive vales as well.

As a general note remember we can set up the format for positive and negative values for any expression. Format argument in the Num function can take 2 parameters, first one indicates how to format the number if it is >0 and the second piece if number <0.

=num(sum(x), 'postivenumberFormat;negativenumberFormat')


As I want negative and positive number to look exactly the same I could use the following format arguments:







Note: Please be aware of some potential issues when exporting the chart as data since the resulting file could contain negative values.


Enjoy it.

Hey guys - thanks for joining me in this Tuesday's edition of the Qlik Design Blog. Today I have provided a video that walks you through the Qlik Sense Data Load Editor and at the same time highlights a simple use case example where Qlik Load Script can come in handy....loading data from an Excel file, while looping through its multiple sheets.


As you may know Qlik Sense has a powerful visual data preparation interface to help you profile and prepare data for analysis, but did you know that Qlik also provides advanced scripting capabilities to help you transform and augment data as well as perform many other tasks, including those you may found in popular programming languages?


Some common examples include:


  • Incremental loading
  • Adding row and field level security: Section Access
  • Creating .QVD files
  • ...and more


Watch this brief video to learn about the Data Load Editor and see it in action, read on to learn about what else Qlik Script can do.





NOTE: To increase resolution or size of the video, select the YouTube logo at the bottom right of the player. You will be brought directly to YouTube where you can increase the resolution and size of the player window. Look for the 'settings' gears icon in the lower right of the player once at YouTube.




You can learn more about what other great things Qlik Script can do in these awesome blogs by our Jennell McIntire jmc:



...and many more. Stay tuned to the Qlik Design Blog on Fridays, where Jennell and team blog about many interesting Qlik design topics.


Can't see the video? - You can download the .mp4 attached to this post.


Samples files used in the video also are available.


Visual Data Preparation References:





Michael Tarallo (@mtarallo) | Twitter


I've seen a few questions regarding integrating Qlik Sense visualizations into existing webapps lately, and figured I'd lay out a few tips here that may be of help.


There's really two ways of integrating Qlik Sense visualizations into your webapp, by either using the Capability APIs or iFrames. I'll discuss the pros and cons of both.


Capability APIs

The Capability APIs include the Root API, the App API, and the Visualization API, among a few others. The Root API is used to connect to an app, and either the App API or the Visualization API can be used to then embed Qlik Sense objects onto the sheet. There's quite a few resources regarding the details of actually doing this available already, so I'll skip that, but if there's any questions surrounding it, let me know. What I do want to talk about is the pros and cons of using the Capability APIs vs iFrames.


The pros of the Capability APIs are that all you have to do to use them is load the assets that are conveniently served from the Qlik server, supply a config, require the qlik.js file, and you're set. You can quickly get up and running, and you're able to not only embed existing visualizations, but you can create visualizations on the fly using the Visualization API and patch them as you go. So, it's easy to get going, and to embed, create, or even update visualizations on the page.


The downside is that the assets needed for the Capability APIs include Require.js and Angular 1.5.8, and they're both globals that can be quite intrusive, and force you to redesign your existing app to play nicely with their residency in the global scope.



And that's exactly the best thing about iFrames. Since an iFrame is totally encapsulated from its parent page, there's no issues with existing assets and assets needed to embed Qlik visualizations colliding. And for all the other features that the Capability APIs offer, you can simply use enigma.js, which can share the same session as the iFrame'd objects.


One of the things to watch out for when using iFrames is that Internet Explorer, by default, only allows a maximum of 6 concurrent connections. So that's a limitation if you need to support IE. Another thing that you won't be doing is creating any visualizations on the fly.



To help overcome the websocket number limit, or if you really need to create visualizations on the fly, but also want to use the iFrame approach, what you can do is instead of embedding visualizations using iFrames, you can create a mashup, and then embed that into your webapp in an iFrame. Using HTML5's window.postMessage API, you can enable communication between your app and the mashup in the iFrame, and you can also still use enigma.js in your webapp.

Hello Qlik Community! Qlik's Bruno Calver is back sharing his in-the-field experiences, building upon his User Experience white paper made available last year. This time he has authored a white paper on Data Literacy. Bruno has worked with many large global enterprises, helping them discover the value in their data and how to best represent it in order to drive results.  During this time he has come across many different ways of working with data. This article tries to consolidate the key take-aways within the context of data literacy. Be sure to download the attached PDF at the bottom of this post to learn more.



Literacy skills have always been top of the bill in the education system -- and for good reason. Equally, data literacy skills are climbing the agenda in today’s competitive business environment.


Organizations will soon rely less and less on pre-processed information and their gut instincts as a decision making paradigm. It is increasingly important for everyone to apply critical thinking skills to every problem and data set in order to achieve a competitive advantage and create truly innovative solutions.


However, for many of us it is not clear what data literacy means, let alone the skills and techniques that might help drive our own data literacy level. The attached article explores these concepts and provides 5 key areas to think about when analyzing your data - including practical examples:


  1. Trends & Context
  2. Internal & External Data
  3. Cohorts & Cell based analysis
  4. Averages, Aggregation & Distribution
  5. Bias & Non-Causal Correlations


Increasing data literacy skills can have a profound impact on organizations in the following ways:


  • Increasing user adoption and awareness of analytical tools and capabilities
  • Creating data driven cultures to enhance performance
  • Unlocking more value from your data investment


If this sounds interesting, then please read the article and see what new things you can discover about the language of data…!



Bruno is a Principal Solution Architect working in the UK with some of Qlik’s enterprise customers. His passion is working with business people to turn disparate and otherwise mundane data sets into insights and stories that can engage their audience, drive change and inspire new ways of thinking.

Jennell McIntire

FileSize Function

Posted by Jennell McIntire Sep 22, 2017

In the past, I have blogged about the FileName function and how I used it to generate data for my Qlik Sense app.  Today, I thought I would blog about another file function, the FileSize function.  The FileSize function is a script function that can be used to return the size of a file or table.  The FileSize function returns an integer for the size, in bytes, of the file specified or a table.  The file can be a QVD, a text file, an Excel file or a table.  The syntax is quite simple:





I have used the FileSize function to determine if a QVD exists before I load it.  In the example script below, I set the size of the CustomerMaster QVD to the vSize variable.  Then I check the variable to see if a size was returned.  If a size was returned meaning a QVD is there, I load the QVD.  If the QVD does not exist then the FileSize function will return null.


The FileSize function can also be used to return the table size of the table file being read.  To do this, the FileSize function is used in the Load statement as seen in the example script below.  When the filename parameter is excluded, then the FileSize function will return the size of the table currently being read.  The TableSize field will store the size of the CustomerMaster table after it has been loaded.


The FileSize function is another easy-to-use script file function that can be used in Qlik Sense or QlikView to provide the size of a file or a table.  Use the FileSize function as a checkpoint in your script to ensure the file is available before loading, as I did in the example above, or use it ensure size requirements for files being loaded are being met in your app.  Good luck scripting!




Hey guys, happy Tuesday! I'm pleased to be back in this edition of the Qlik Design Blog to introduce you to the September 2017 release of Qlik Sense....right off the heels of hurricane Irma I might add. Florida (my home state) and its surrounding neighbors have been hit hard by this storm and I would like to first express my deepest sympathy for those that were affected by Irma's wrath. We will recover, as we always have, and by working together and supporting one another, we will be back on our feet in no time...oh and hurricane Maria, you better watch yourself Missy!) Now on to the show!


As we have previously mentioned, Qlik will be releasing software 5 times a year. Which equates to a new release about every 10 weeks or so. (You can learn more about our continuous release cycle by checking out this blog here: Qlik Sense® will release 5 times a year!)


Rather than list the new feature highlights in this blog, I created a brief video to cover and demonstrate them. You can always check out the Qlik Sense release notes on the Qlik Help site as well as download the attach data sheet to learn more. You can also try these features right now by logging in to the Qlik Sense Cloud or by downloading a free version of Qlik Sense Desktop: Download Free Data Visualization Development Platform.




Now remember, each release will vary in capabilities and features, with some releases possibly having "more" in certain areas than others. It is important to note that the releases will not only cover Qlik Sense specifics, but other product areas such as Qlik NPrinting, Qlik GeoAnalytics, Qlik Sense Mobile, Qlik DataMarket, data connectors, API enhancements and new services and procedures. For example, with the September 2017 release we are also introducing a new Extension Certification Pilot program to allow extension authors to submit their extensions for review, to be certified and supported by the author for use within the Qlik platform. Stay tuned for more information on this pilot program to learn how you can submit your extension for certification.


NOTE - Qlik Sense Mobile: The app is available on the iOS VPP app store (Apple’s enterprise app store) this week.



This is a huge milestone for Qlik as it brings the power of our Associative Technology to the iPad, online AND offline. Customers and partners need to have signed up for Apple’s enterprise developer program to get access to the app. Once they are members of enterprise developer program, they can download the app from Most medium and large business have this relationship with Apple and for those who do not, we are bringing the app to the iOS public app store in the near future, so hold tight.





Mike Tarallo


Additional Resources:

* To learn more about extensions - check out these videos:



* Did you miss what's new in our Qlik Sense June 2017 release? - Check it out here: Qlik Sense 2017 Releases - What's New


* More Videos


NOTE: To increase resolution or size of the video, select the YouTube logo at the bottom right of the player. You will be brought directly to YouTube where you can increase the resolution and size of the player window. Look for the 'settings' gears icon in the lower right of the player once at YouTube.


Can't see the video?


Download the .mp4 and watch from your computer or mobile device

Today, the QIX engine has some bugs in the area of a search and a subsequent select. These affect both interactive searches and searches in Set Analysis expressions. We are working on fixing them. However, one of these coming bug fixes may cause some backward incompatibility. This post explains what the bug fix will mean, and what you can do to avoid future problems.

When you use Set analysis, you can choose to have a condition in the form of a list of values in the Set expression, or you can choose to have a rule-based definition - a search for field values.


Examples of hard coded lists:


Sum( {$<Year = {2013,2014,2015}>} Sales)

Sum( {$<Country = {'Australia','Canada','France'}>} Sales)


Examples of searches:


Sum( {$<Year = {">=2013"}>} Sales)

Sum( {$<Country = {"Austr*"}>} Sales)

Sum( {$<Customer = {"=Sum(Sales)>100000"}>} Sales)


All the above constructions work today, and they will work correctly also after the bug fix.


Note the double quotes in the search expressions. These define the search strings, and between them you can write any search string – the same way as you would in a list box search.


However, you should not use single quotes to define a search string.


Single quotes are reserved for literals, i.e. exact matches. Hence they should be used when you want to make a list of valid field values, like the above list of explicit countries. But they should not be used for searches. Single quotes imply a case sensitive match with a single field value.


This difference between single and double quotes has been correctly described in the reference manual that states that searches are “always defined by the use of double quotes”. Also, all examples with literal field values in the documentation use single quotes.


Now to the bug: QlikView and Qlik Sense currently do not respect the above difference between single and double quotes. Instead, strings enclosed in single quotes are interpreted as search strings. As a consequence, it is not possible to make case sensitive matches with field values, something which you sometimes want to do.


This bug will be fixed in the coming November releases of Qlik Sense and QlikView. Then, wildcards in strings enclosed by single quotes will no longer be considered as wildcards. Instead, the strings will be interpreted as literals, i.e. the engine will try to match the string with a field value containing the ‘*’ character. The same logic will apply also to relational operators and equals signs.


Unfortunately, this bug has been incorrectly utilized by some developers: I have seen Set Analysis expressions with correct search strings, but erroneously enclosed in single quotes; for example


Sum( {$<Country = {'Austr*'}>} Sales)


This search should instead have been written


Sum( {$<Country = {"Austr*"}>} Sales)


Hence, there are documents with expressions that will not work in the corrected algorithm. However, the bug fix will be implemented in such a way that old documents will use the old logic, and new documents will use the new logic. In addition, it will be possible to force the new logic for all documents by using a parameter in Settings.ini.


You can of course also change the single quotes in existing search strings to double quotes, and the expression will continue to do what it always has done.


This post is mainly to give you a heads-up on a coming change, and give you a chance to make a quality control of your own documents. We will publish more information as we get closer to the release.




Further information related to Set Analysis and Searches:

A Primer on Set Analysis

The Search String

Introduction to Set Analysis (video) - Part 1

Set Analysis - Part 2 - Cool Stuff You Can Do (video)

A few months ago we at the demo team accepted the challenge to create a prototype for the healthcare industry. The goal was to create a user-friendly way to analyze a huge dataset provided by one of our healthcare partners, DarkMatter2bd. They carefully explained to us some usage cases for their data and we agreed to create a mashup to analyze and visualize “comorbidity”.


So what does comorbidity means?


In medicine, comorbidity is the presence of one or more additional diseases or disorders co-occurring with (that is, concomitant or concurrent with) a primary disease or disorder; in the countable sense of the term, a comorbidity (plural comorbidities) is each additional disorder or disease.

Source: Wikipedia



If you are in the healthcare industry then I am sure you have heard someone asking something like: can you show me patients that have X and Y and Z? To answer that question and some more we came up with a new mash up called Pre-launch Targeting & Clinical Trial Recruitment. It contains non-real data for almost six hundred thousand patients located in the state of Pennsylvania.


When a user gets into the mashup we prompt them with a search box that performs a search across the entire range of diseases or disorders available in our data sample. Once the user has chosen a primary disease we take them to the Recruitment page where data can be freely explored and analyzed, and more importantly, where more disorders or diseases can be added to the query.


Real use case scenario.


An imaginary healthcare company is planning to launch a new drug for people suffering from diabetes and they need to find a group of patients that meet some requirements. They must have diabetes and must have hypertension but must not be allergic to penicillin.



After we search for diabetes we get to a count of 62,861 patients in our data. It represents approximately a 10% of our sample. Next  is time to search for hypertension. We will add a second condition to our query.




The inclusion of hypertension draws 42,491 patients that suffer from both diabetes & hypertension.


Our last search will be penicillin intolerance. Please notice that by default our mashup will add new search terms with AND condition to the query. The count of patients temporarily reflects 113 patients for the combination of diabetes AND hypertension AND penicillin allergy. Users can freely switch any condition to AND NOT by clicking into the tag. By doing so in the "Personal History of Allergy to Penicillin" tag we end up having a result set that matches our initial request, resulting in 42,378 patients with diabetes AND hypertension AND NOT penicillin allergy.




Set analysis element function P()


The secret sauce in our recipe is the Set analysis element function P(), it helps us to create subsets of data which we can operate with.


We basically want to count patients where disease = X and disease = Y. If we use Qlik notation for that condition would look like:


Count({<patient = P({<disease={'X'}>}patient) * P({<disease={'Y'}>}patient)>} distinct Patient)


The expression above will create two sets, P({<disease={'X'}>}patient) will contain all the possible patients that have disease = X, while the second piece P({<disease={'Y'}>}patient), will retrieve all the possible patients with disease = Y. Finally the " * " operator will calculate the intersection of both sets.

The webapp Pre-launch Targeting & Clinical Trial Recruitment dynamically creates as many P sets as needed and the right operator to compose the right expression.

If you want to learn more about Set Analysis please check this posts:

Why is it called Set Analysis?

A Primer on Set Analysis

Natural Sets


I hope you like Pre-launch Targeting & Clinical Trial Recruitment


Arturo (@arturoqv)

Some of you may remember that I recently posted about a similar topic here When do you post to Facebook?, where I talked about creating an app that allows users to authenticate with Facebook, grab their data with Facebook APIs, use halyard.js to generate a load script, and then create a session app. But when I did this just a few months ago, one of the things I really wished I could do was use the Visualization API so I could simply create charts on the fly using Qlik Sense, but it wasn't possible then because a session app could not be created from or associated with the Capability APIs.


However, new APIs were introduced with Qlik Sense June 2017 that makes it possible to create apps on the fly using the Capability APIs, so now it is possible to create an app, load data, and create visualizations, all on the fly! This is made possible by the addition of some new methods to the Capability APIs, including the qlik.sessionApp method, the qlik.sessionAppFromApp method, the setScript method, and the getScript method.

There's already some pretty decent documentation for doing this at Qlik Sense Help - Creating apps on the fly, and I recommend you check that out, but I want to make everyone is aware of this very cool new capability of Qlik Sense June 2017, and just briefly address some issues you may run into.

First thing first, which is something I ran into while trying to create an example for this blog post -- anonymous users cannot create session apps, and this does not seem to be able to be controlled by security rules. Unless I'm missing something, it's entirely impossible. So, no anonymous users.

Next, there's been a few questions about just how to go about loading data. The simple answer is you need to set a load script using the setScript method, and then use the doReload method to load the data. But where do you get the load script from in the first place? Well you can use the getScript method on an app that already exists, or you can just write a script, though, of course, you'll need to also create the data connections you'll need somehow too if they don't already exist. And for many instances that I can think of where I would want to create an app on the fly, I'd use halyard.js. You could also create a session app from an existing app, get the load script from that app, and do some kind of search and replace on the load script which would custom tailor the data for the current user. The point is, there's a lot of possibilities, and it's really up to you and your use case how you want to go about this.


With being able to create apps, load scripts, and visualizations all on the fly, there's really a ton of potential to do some awesome stuff here. It would cool to hear about how some of you are using these capabilities!

Qlik GeoAnalytics is known for its powerful mapping capabilities.  I had the opportunity to dig down into the layers of Qlik GeoAnalytics when working on a project about Indian Migration.  In this project, the team wanted to illustrate which states in India migrants moved to and left from.  The plan was to show this on a map.  Here were the requirements:


  • Use color to show the selected state (the state users move to or from)
  • Use color to show the number of migrants who moved
  • Use arrows to show the direction of the move
  • Place dots on each state that migrants move to or from


Here is a look at one of the resulting maps.  In order to build it, we used 3 GeoAnalytic layers: the Area layer, the Bubble layer and the Line layer.


In the screenshot above, the selected state is Andhra Pradesh and it is highlighted in orange.  All the states that migrants came from are colored in a shade of green using the ColorMix1 function.  Darker shades of green indicate a larger number of migrants than the lighter shades of green.


Before we can begin to add the layers, we first had to add the GeoAnalytics Map to the app.  Once this is done, the layers can be added.  The first step was to use the Area layer to show which states users left from.  The color expression (which you can see in the attached app) first checked for the selected state and colored it orange, then it checked for states where no one migrated from and colored them gray.  The last part was to use the ColorMix1 function to color the states in shades of green based on the number of people who migrated from that state.  The second step was to add dots or bubbles to the state.  To do this the Bubble layer was used.  The third step was to add the Line layer to illustrate the direction of the move.  In the screenshot above, the arrows are all leading to the selected state, Andhra Pradesh.  The width and size of the arrows are based on the number of migrants.  The final few steps included using the Draw Order Adjustment property to indicate the order that we wanted the layers drawn – first the Area layer, then the Bubble layer and last the Line layer.  We also made use of the Info Bubble so that we could provide informative data when users hover over an area, line or bubble.


Feel free to check out the attached app using Qlik Sense to see how all the pieces were put together.  If you do not have Qlik Sense, you can download and try Qlik Sense Desktop for free from here.  In this project, we only used 3 of the layers available with Qlik GeoAnalytics.  There are other layers available as well as advanced geospatial information and geographic relationships.  Learn more about Qlik GeoAnalytics and check out our Getting Started Videos.




Filter Blog

By date:
By tag: