Late last week I was working with a Qlik Sense client who wanted to classify a certain range of numeric data. Basically they described it as putting certain values into their own respective "buckets" defined by high and low values. Now when I hear "range of data" along with "classify" and "buckets" or even "grouping of data" I think of a histogram.


For the most part we know that a histogram is really nothing more than a bar chart that shows the distribution of numeric data. For example, say you want to know who your strongest customers are and you want to see how many and which customer orders have sales that fall in between a certain monetary range. We can make a bar chart act like a histogram by simply defining the bar chart’s dimension using the Class() function. Simply stated, Class() can be used to classify or group, a measure into bins defined with upper and lower limits.


The Class() function takes in a few arguments. The first argument is the actual "measure field name" you would like to count and the second argument is the interval you would like to bin by.  For example, let’s see how many customers have sales that fall within 0 and $1000. In my bar chart I define my dimension as class(Sales,1000), and for my measure I count the number of sales transaction using Count(Sales). In the final result you can see most of my sales consist of transactions that fell between 0 and $1000.


To see this in action watch this 60 second video on the topic.



Dimension - class(Sales,1000)


Measure - count(Sales)


Final Result


For more chart functions like Class() be sure to visit our online help.


See the Qlik Sense sample provided in this post.


If using Qlik Sense Desktop please copy .qvf file to your C:\Users\<user profile>\Documents\Qlik\Sense\Apps and refresh Qlik Sense Desktop with F5. If using Qlik Sense Enterprise Server please import .qvf into your apps using the QMC - Qlik Management Console.




Michael Tarallo (@mtarallo) | Twitter

Senior Product Marketing Manager

Recently I've been working on building a mashup template that will work in the dev-hub that will have a few more advanced features than many of the available dev-hub templates. One of these features that I thought was important was a card container for Qlik Sense objects that has fullscreen capability built in. I'd like to share that with you today.


Here's an example of a really simple mashup with just the selection toolbar, and 2 Qlik Sense objects that use the qliksense-card web component I've built - Qlik Sense Mashup.


To use the qliksense-card web component yourself, you have a couple of options. You can either install the dev-hub template and create a new mashup from the dev-hub using the template, or you can just grab the necessary files and load them into your project.


Installing dev-hub template

You can download the dev-hub template here - GitHub - qliksense-card-template. After downloading, install the template as you would install any extension in Qlik Sense. After the template is installed, you can go to the dev-hub, create a new mashup, and select "Card template" from the dropdown list of templates.


The template is really kind of bare. There's not much going on besides the qliksense-card web component and a bit of bootstrap, but it's a good way to check out how the qliksense-card web component works.


Including the files in your own project

You don't have to use the dev-hub template to make use of the qliksense-card web component. What you will need is the qliksense-card.html file and the webcomponents-lite.min.js file. The easiest way to include them is to use the RawGit CDN, example below.

<script src="https://cdn.rawgit.com/download/polymer-cdn/"></script>
<link rel="import" href="https://cdn.rawgit.com/fkabinoff/qliksense-card-template/master/qliksense-card.html">


Using the qliksense-card component

After you're all setup, whether you've generated a new project using the dev-hub template, or included the necessary files in your own project, using the qliksense-card web component is easy. All you want to do is wrap your Qlik Sense object container with the qliksense-card tag, and set the height of the Qlik Sense object with the content-height attribute of the qliksense-card tag. You'll also want to set the width and height of your Qlik Sense object container to 100%. If you've generated a project using the template, this stuff has already been done, and you can check it out and just reuse as you'd like. If you've just included the necessary files in your own project, you can still check out the template files to see how it's done. Generally, it'll look something like below

<qliksense-card content-height="300px">
     <div class="qvobject" id="QV01"></div>

Jennell McIntire


Posted by Jennell McIntire Nov 18, 2016

Have you ever loaded two or more tables in your script to find that when the script was complete your data model had only one table?  I ran into this issue when I first starting scripting and I think this is probably a common scenario of new Qlik Sense and QlikView developers.  Qlik Sense and QlikView will automatically concatenate two tables if they have the same field names.  By using the NoConcatenate prefix, you can prevent this from happening.  Let’s look at an example.  When I reload the script below, I end up with one table named Table1 with records from both data sources – Sheet1 and Sheet2.


First Table1 is loaded.  When Table2 is loaded with the same fields, Qlik Sense automatically concatenated the data from Sheet2 to Table1.  If I had used the NoConcatenate prefix as seen below, I would end up with 3 tables in my data model: Table1, Table2 and $Syn 1 Table (a synthetic table).


Data Model Viewer after script above reloads:


The synthetic table was created because my data model had two tables with the same field names so Qlik Sense created a synthetic key to handle this.  You can read more about synthetic keys here.  You should avoid synthetic tables when you can.  There are various ways you can create two tables without creating a synthetic table.  One is to use the Qualify statement – this will add the table name as a prefix to the field name.  Another way, which is more popular, is to rename the fields in the second table when you load them.  These two options will produce separate tables and no synthetic tables.


Now you may be wondering why you need to use NoConcatenate at all.  I often use it when I want to perform some additional manipulation to the data in an existing table.  For example, in the script snippet below, I am loading life expectancy data for various countries, genders and years.  Since I am using the CrossTable statement in the first Load statement, I cannot add a where clause to load only the 2014 data.  So, in the second Load statement, I perform a NoConcatenate Load to load all the data from DataTemp2 where year is 2014.  Then I delete DataTemp2 since I have the data I need in the DataTemp table.  The most important part of this script is the Drop Table at the end.  This deletes the first table I loaded (DataTemp2), preventing a synthetic table from being loaded.


This is often the way I use NoConcatenate - to create a new table from an existing table with some modifications and then I drop the original table.  NoConcatenate is useful and once you get the hang of it, you will find that NoConcatenate is a helpful prefix you will use often in your script.





Happy Tuesday Qlik Community!! This week on the Design Blog I have the pleasure of introducing our newest guest blogger, Lee Matthews. Lee comes to us from the opposite side of the world, well at least from where I am anyway. I mean really, as I get ready for winter he is getting ready for summer.  Lee is a Principal Solution Architect with Qlik and is based in Melbourne, Australia. He joined Qlik in 2011 but has been working in the Business Intelligence field with various ERP and CRM vendors for over 20 years. Prior to that he was a management accountant. He therefore has a long history of working with data and reporting systems for organizations. When not tinkering with Qlik applications for clients, he enjoys tinkering with robots, making things out of wood and teaching these skills to his two boys. We are excited to have your contribution on the Design Blog Lee!


Effectively managing your projects with Qlik Sense


As a Solution Architect with Qlik I get the opportunity to work with many different organizations and to show them how Qlik can solve their problems and add value to their business. One common problem I see across larger enterprises is the need to effectively manage projects and to monitor resourcing for those projects. Often the reporting capability of project management systems is limited, or reporting across the entire portfolio of projects is something they are not designed to do.


This is where Qlik can add great value, in answering questions such as:


  • Which resources are over or under utilized?
  • Are there any project managers or locations that seem to be struggling to deliver successful projects?
  • Are there any projects that should be cancelled, as they are not delivering value?

Below is a video I created that demonstrates a Project Portfolio Management application while covering many of the unique and powerful capabilities available in Qlik Sense. This application was developed as an example of how you might use Qlik Sense to analyze your entire project portfolio. It takes some concepts and approaches that different clients use in their businesses. Also worth highlighting is that this app uses a custom KPI object developed using the Widgets functionality built into Qlik Sense. Widgets allow you to develop your own visualizations with just a bit of HTML and CSS. You can learn more about Widgets in this quick video primer created by Mike Tarallo here: Qlik Sense 3.0 - Widget


(I attached this widget for you to play with. If using Qlik Sense Desktop 3.X, just extract the .zip file to your C:\Users\<user_id>\Documents\Qlik\Sense\Extensions directory. Qlik Sense Enterprise Server users will want to use the QMC to import the widget using the Extensions import utility.)



Lee Matthews



Using Qlik Sense for Project Portfolio Management


NOTE: To increase resolution or size of the video, select the YouTube logo in 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. If you cannot see the video, you can download the .mp4 file attached to this post.

While I was working on one of my projects that has lots of kpis and charts, I thought what if, at least for the page change, I add a simple transition. While this can accomplished easily with Angularjs, I went a little bit further and I added transitions on all of the page objects. The best part of this, is not that its only interesting but also very very easy to put together. It's all CSS3 based, so no Javascript will be needed anywhere.


I used the css library Animate.css. First, let's start by adding it into our html page

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/3.5.2/animate.min.css">


Then comes the very hard part . Add the css class "animated" and the type of animation that you want in your object's div container. In this project I used zoom in from the right for each of the page objects:

<div class="col-md-2 no-margin-padding-right animated zoomInRight ms500">


To make it more interesting, since I have a side navigation for all my Qlik Sense filters, I decided to add a little drop/bounce effect.


Now, here comes the important stuff. Since there are a lot of animations, it is not good to get our audience confused or tired from all of the things that are happening. There has to be a sequence of things. Since most of the people are reading from left to right, it makes sense to give to the user the same experience, with animations happening one after the other, from left to right so the eye can follow them. Not too slow so its not boring and not too fast so its not confusing. You can achieve that by delaying each object few milliseconds with the "animation-delay" property (CSS3 animation-delay Property).


I found out that 250ms between each animation, was very close to what I wanted to achieve. So, I created a lot of css classes with each being 250 milliseconds apart, like "ms250", "ms500" etc. and I added them into each of my objects.


This is not perfect since there is a difference from loading stating text and giving it a few milliseconds delay, from Qlik Sense objects that need some time to get pulled and drawn from our websocket connection.

Here is the work in progress. The filters bounce only once when the entire app/mashup loads since they are the same on every page, but the objects inside the actual page are hidden and then zooming in on every page transition.

CIO Dashboard




narrat_logo.pngNarrative Science, creators of Quill a natural language generation (NLG) platform, reached out to me recently and asked if I could create a short video introducing its extension for Qlik Sense, Narratives for Qlik. Always willing to play with a "shiny new toy" and willingness to please our valued partners, of course I agreed. I have heard about this extension a few months back, but never got a chance to actually work with it until now. Since it is created as a Qlik Sense extension, it integrates very easily into Qlik Sense. I just had to unzip the file to Extensions directory under my Qlik Sense Desktop installation: C:\Users\<user account>\Documents\Qlik\Sense\Extensions and refresh. (Qlik Sense Enterprise users will want to use the Qlik Management Console and the Extensions import utility.)

The free extension is available as a "hosted" version. I assume the NLG algorithm is processed over the network on one of their servers and then results are sent back to the client object. However, I just found out they have an on-premise version as well where you can use their NLG platform locally in your environment. Regardless of where the operations run from, I have one thing to say - this stuff is Qool.

So is a picture worth a 1000 words? Yes sir, especially if those words are automatically generated, contain valuable insights and reduce any misconception or interpretation that is usually performed when analyzing visualizations. Narratives for Qlik is the perfect compliment to the Qlik data visualization platform. You may ask, "In a world where we try to use visuals to reduce the amount of text one has to read, why in the world would we want to revert our visualizations back to text?" I think this below example will answer that question. Look at the below example using a Treemap (right) and the complimentary, bullet-ed narrative (left) - automatically created by Narrative Science - which one provides the most accurate insights without interpretation?


11-7-2016 3-46-38 PM.png(click to enlarge)


The automatic narrative is just the beginning. There are also settings to control text formatting, how much or how little information is displayed, and analytical options that leverage predictive and statistical capabilities.

If you would like to see this in action check out the below video that briefly introduces Narratives for Qlik. Be sure to download the extension and visit their website to learn more.


Narratives for Qlik is an extension created by Narrative Science. It integrates seamlessly into Qlik Sense and leverages advanced natural language generation, a subset of artificial intelligence that translates structured data to text, which automatically transforms your visualizations into powerful narratives that explain the most interesting and important facts.





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? - You can download the attached copy to play on your machine.



Michael Tarallo (@mtarallo) | Twitter

Senior Product Marketing Manager

Stacked bar charts are perfect to represent the contribution of particular elements to the total, the classic example is Sales by Year and by Quarter.




Just by observing the chart a few seconds we can conclude that Actual Amount was higher in 2007 than 2006, and it seems clear that Q2 rise in 2007 contributed significantly to the 2007 total increase in Actual Amount.


To create a simple stacked bar chart like the one in our example we've needed 2 dimensions (Year and Quarter) and one measure. Alternatively, we could recreate the chart using one single dimension "Year" and 4 expressions one per each one of the quarters. The procedure to customize the colors will depend of what type of chart you have, bi-dimensional chart or multi-expression chart, let’s start with bi-dimensional chart coloring.


Bi-dimensional stacked bar chart


This is the simplest case, you just need to target each one of the segments (Quarters in our example) by name, you could just use an if statement to target them, something like:


if(Quarter='Q1',red(),if(Quarter='Q2',blue(), if(Quarter='Q3', green(), yellow())))


Alternatively, you could use conditional functions for a more elegant approach:








Multi-expression stacked bar chart


In this scenario our data table contains one column per quarter as in the image below but we still want to represent them in one stacked chart using custom colors.




We could get a stacked bar chart using one single dimension "Year", and 4 expressions Q1,Q2, Q3 and Q4. The problem comes when trying to color the segments, at this point we can’t target specific segments anymore because each one of our segments is made of an expression.


To solve this situation, we need to work-around our chart to make it again bi-dimensional. In order to do that we’ll add a new table to our data model. Our table will contain the name of the segments for our chart, I called it [segment names] in my example.




Once the data has been loaded then it’s time to create our chart. The dimensions will be “Year” and the recently created “measure”. To complete our chart, we’ll need to add a simple if statement (or the more elegant pick&match combo) in our measure expression, similar to this one:


if(measure='Q1', sum(Q1),
if(measure='Q2', sum(Q2),
if(measure='Q3', sum(Q3),
if(measure='Q4', sum(Q4)))))


Now that our chart is standard bi-dimensional bar chart, all we need to do is to apply custom colors as described earlier in this post. So again we could use the good old if statement or pick&match to end up having customized segment colors in our stacked bar chart.




I'm attaching an example app so you can check how it's done.


I want to give credits to all the contributors to How to use custom colours in a stacked bar chart, please check that community thread if you have questions or just to learn more about custom colors in stacked bar charts.



3 minute read



♫ Ding Dong! ♪ It’s here! I tore open the Amazon package to reveal my new Nest Cam. It was so shiny. I could not wait to set it up. One of the most innovative features it provided was state-of-the-art surveillance software and video history running from within a hosted cloud solution. It basically was plug and play. While I was setting up my camera this past weekend it made me appreciate how far cloud technology has come and sparked some initial thoughts on our own cloud-based solutions. I wanted to share some of these with you and give you a glimpse into Qlik’s cloud-based future.

A Brief History of Cloud Computing


Cloud computing has grown in popularity over the years however, a steady increase has only been seen within the last 6 years or so. The arrival of Salesforce.com in the late 90s paved the way for software companies to deliver their software over the internet, by collecting data in the cloud and therefore Salesforce created the space for cloud CRM and ERP.  In the early 2000s we saw Amazon Web Services (AWS) and (Elastic Cloud Computing) EC2 offer cloud-based services for computation, storage and virtualization. This helped many organizations reduce costs and allowed IT departments to focus more of their attention on pressing business matters. With the increase in bandwidth and a maturing internet web specification, logically, browser-based applications soon followed. (Anyone remember how cool it was to first use Google Docs??)

So why am I telling you all this?

Because…."As cloud computing extends its reach beyond a handful of early-adopter Google Docs users, we can only begin to imagine its scope and reach. Pretty much anything can be delivered from the cloud." - Cloud computing pioneer Jamie Turner.

That’s right, anything can be delivered from the cloud, and Qlik is building cloud solutions that will support the future. We are seeing a shift in data gravity to the cloud so now cloud analytics makes much more sense, pun intended. Sure there were some early movers who just took on-premise software and packaged it in cloud-style – but they were not engineered to be cloud first and some still aren’t. That being said - Qlik Sense is truly a cloud analytics product that was built to work within virtualized and global environments.

Qlik Sense Cloud

That brings me to Qlik Sense Cloud. A global, fully operational cloud analytics solution that you don’t have to setup or maintain. Quickly approaching 100,000 users from over 170 countries, this is definitely no passing fad and it will only get better. If you look at the evolution of Qlik Sense Cloud from its early release in 2015 to now – you have seen a tremendous transformation in a very short period of time. In little over a year Qlik Sense Cloud has evolved from a simple read-only app sharing platform to a 100% online analytics and collaborative solution. In January 2016 we introduced Qlik Sense Cloud Plus, offering more storage, larger apps sizes, unlimited shares and access to our Data As a Service offering, Qlik DataMarket (providing easy access, cloud-based, syndicated external data, directly into your analysis).

Continuing down this path of innovation, later this year we will have Qlik Sense Cloud Business, enabling groups and teams to create, manage, and collaborate with visual analytics in the simplicity of the cloud.  That’s right, workgroups. You will be able to privately manage your own data and applications, schedule data refreshes and collaboratively develop with your invited peers, from either inside or outside your organization.  You can check out the Qlik Sense Cloud Business product preview available in the Qlik Community (requires community login).

AND - It just keeps getting better… with the acquisition of Industrial Codebox (makers of the popular QVSource data connectors for Qlik) – we plan to integrate a number of cloud-based data source connectors such as Salesforce, REST, Google, Facebook, Twitter and many more. Further out on our roadmap, we plan to integrate Qlik Market to enable 1-Click Application solutions provided by Qlik Partners, similar to what you see on many web hosting platforms that offer 1-Click installation for blogs, databases, shopping carts and portals.

The future is bright my friends, and the old idiom “Get your head out of the clouds” does not apply here. If the best and brightest minds stopped dreaming, they might've never dreamt what is possible today with cloud computing, and you and I should thank them for that. I implore you, keep your head in the clouds and see what the future has to offer.

Happy Qlikking,

Michael Tarallo (@mtarallo) | Twitter

Senior Product Marketing Manager

Filter Blog

By date:
By tag: