1 2 3 4 Previous Next

Qlik Design Blog

58 Posts authored by: Arturo Muñoz

The Picasso.js is an open-source initiative by Qlik. It's a charting library that is designed for building custom, interactive, component-based powerful visualizations.


Until recently, the power of Picasso.js was only reserved for developers. A few weeks ago, our colleague Steven Pressland introduced the beta version of the Picasso Designer Extension, a game changer that takes Picasso.js to the masses making it available for everyone in Qlik Sense.

Picasso Designer for Qlik Sense is an extension to aid building complex charts based on the Picasso.js library without having to write any code or understand the Picasso JSON structure. The extension also provides support for selections against the chart for the expected user experience in Qlik Sense.


Picasso Designer for Qlik Sense.png


For a regular Qlik Sense user, Picasso Designer might be just too much as it comes with an insane amount of options and details, but for those of us who need to customize the charts, the Picasso Designer extension is a great resource and a very interesting step forward.


Check the following video tutorial on what is and how to use Picasso Designer Extension for Qlik Sense:



Alternatively you can watch the video here: Introducing Picasso Designer for Qlik Sense - YouTube




Hope you like it,


If you follow this blog then you know that during the last weeks we’ve been working in our Choose your champion app for the FIFA World Cup tournament happening in Russia.


Our data provider, Gracenote, populates and periodically updates several tables in a SQL database with all the tournament data.


As an example, just assume the Players table looks like this:




Player A


Player B


Player C



The field Actions contain “compressed” information for 8 different actions during a game. The value 145 encapsulates all the information about Player A's performance during a certain game.


Combining multiple values into a single field


It is a frequent practice to combine multiple flag or binary columns into a single decimal column, instead of creating multiple columns to store these indicators.


One of the main advantages of this system versus the alternative of creating a column for each one of the actions is that if later we decide to record a new type of action we can just add it to the Actions column versus having to create a new column for each field.


But, how can I read what Actions column content actually means?


To do so we need more information. We need to know how that column is being created. For example, let’s assume we have this description of Actions column:


Actions Legend

game played = 1

goal scored = 2

penalty scored = 4

penalty missed = 8

1st yellow card = 16

2nd yellow card = 32

red card = 64

assists = 128


The above's data is the key to understand what’s stored in the Action column. To get a better view of it, let's convert the base 10 integer “Value”, to binary as in the expanded representation table below:



Player A (145)

Player B (17)

Player C (139)

Game played (1)




Goal scored (2)




Penalty scored (4)




Penalty missed (8)




1st yellow card (16)




2nd yellow card (32)




Red card (64)




Assist (128)





Binary flags representation:





Player A



Player B



Player C






Player A: played the game, got a yellow card and gave an assist to other player to score a goal.

Player B: played the game and got a yellow.

Player C: played the game, scored a goal, missed a penalty and assisted for a goal.


How to find what we are looking for?


To do so, it’s important to familiarize with the available bitwise or bit operators in Qlik:


Bitnot, bitand, bitor, bitxor , >>, <<


For more examples and further explanation you can check this page: https://en.wikipedia.org/wiki/Bitwise_operation


Continuing with the example, let’s try to find players that have scored a goal.


We need to check if the second bit is set, that means 00000010 (or integer 2 in base 10)




Value bitand 2

Player A



Player B



Player C




From PlayerTable where Value bitand 2 >0;


That statement is selecting from PlayerTable where Value bitand 2 > 0. But, let's go row by row to see what's happening under the hood:

A bitwise AND takes two equal-length binary representations and performs the logical AND operation on each pair of the corresponding bits, by multiplying them. Thus, if both bits in the compared position are 1, the bit in the resulting binary representation is 1 (1 × 1 = 1); otherwise, the result is 0 (1 × 0 = 0 and 0 × 0 = 0)


Player A

        10010001 (145 decimal)

bitand  00000010 (2 decimal)


returns 00000000 (0 decimal)


Player B

        00010001 (17 decimal)

bitand  00000010 (2 decimal)


returns 00000000 (0 decimal)


Player C

        10001011 (139 decimal)

bitand  00000010 (2 decimal)


returns 00000010 (2 decimal)



Find the players who received a “Yellow Card” and did not “Assist”

We need to check if the fifth bit is set,  00010000 (or integer 16 in base 10) and if the eight bit is not set (128 base 10)



Value bitand 16

Value bitand 128

Player A




Player B




Player C





From PlayerTable where Value bitand 16 > 0 and Value bitand 128 = 0;



Bit operators in expressions


Remember you can use the bit operators to create expressions too, so in a object we could do:


=count(distinct {<Value = {"=Value bitand 16 > 0"}>} Player)


This counts how many players have seen a yellow card so far, note how we are comparing the Value with the flag yellow card (16).


As you can see in the examples, the use of the bitand operator has allowed us to compare two different values at a binary level and returns whether the two numbers intersect allowing me to select and/or count the correct numbers.


Hope you find this interesting.

Arturo (@arturoqv)


PS: I'm attaching a QlikView and Qlik Sense app with the example data so you can test it out yourselves.

Football season is almost over, only the Champions League winner is undecided yet, but soon the fútbol - football, soccer -  aficionado’s eyes will turn to this summer's tournament. Honestly, I can’t wait, this is the competition we all have been patiently waiting for the last four years. A long wait, especially if your team had a very disappointing tournament last time. No, it wasn’t a good 2014 World Cup for Spain.


If you are anything like me, you’d probably have already memorized each group’s teams, imagined any possible what-if scenario, and visualized your team’s captain getting that gorgeous golden trophy by July the 15th. We want to help you to take your guesses to the next level, and have a little bit of fun and competition.


Choose your Champion app will let you predict how this summer’s competition will finish, and more.




How it works


Our bracket is bit more sophisticated that most, we have created a data-driven experience. Each one of the decision points in the app has been enhanced with data, so when you pick a team to end up in the first place of a group, you can corroborate if your gut feeling matches with our data predictions. If you are doubtful about a knockout game winner simply check the stats and make an informed decision.


The process is simple, select first and second place in the groups stage, the bars next to the team names will tell you who is more likely to move to the next stage. Then in knockout round, check the gauge and the extended stats and pick the winner of each match to complete the bracket. Finally decide your tournament winner, and share it with your friends.


But there’s more


This year, we also want you to be able to track your bracket and check how do you rank among other people.


We added a simple login system using Facebook - no, we are not getting any of your personal data, not even your Facebook name nor email - and now you will be able to submit and save your bracket safely.  After the tournament have started, we will provide each one of you with a score based on how many predictions you got right.


You can use the Choose Your Champion score to compete against your friends and coworkers privately and beat them all!




Enjoy and share it!


Arturo Muñoz

Introducing qdt-theme

Posted by Arturo Muñoz Apr 24, 2018

On the demo team we have been very busy lately working in some cool stuff for the community, qdt-components is a notable example of our commitment and contributions to the Qlik Community.


With the announcement of the new theme capabilities that were added to Qlik Sense in the February release we wanted to extend our involvement with you by sharing a custom theme we developed internally.


The qdt-theme is a curvy, bolder theme that significantly modifies the default look of Qlik Sense Desktop. Our goal was to create an appealing theme that you all can use right away, but more importantly we wanted it to be a theme for you to modify and extend as well.

In qdt-theme we changed font types, font sizes and a variety of styles including the current selection bar to make it fit in the new color scheme. Also, we incorporated lots of color palettes (borrowed from other themes, thank you) so you have a wild variety of schemes to choose from.



You can check out the qdt-theme library at our Demo Team's GitHub: https://github.com/qlik-demo-team/qdt-theme.


Hopefully you find it useful.

Enjoy it!

Sometimes the secret sauce of a successful data visualization project lies in the correct choice of the visual object(s) that represents the data. Factors like picking the right chart, placing it in the right spot, and user interaction are key to make a data piece memorable, insightful, and truthful. However, on other occasions, the key to success is to “simply” make data available, this is particularly true for data that was previously inaccessible to most of us.


An example of this is our latest project. We partnered with Canadian National Post to, for the first time, make available over 6 million donations made on a national scale during the last 25 years.




In the last decade, open data has been a hot topic for governments all over the world, but open or public data isn't necessarily easy to access. That’s especially true when it's data that can help citizens to understand and track how our politicians’ campaigns are funded.

There are no consistent rules — or penalties — for political financing across Canada. Spending limits, out-of-province and foreign gifts, money from unions and corporations, donations from numbered companies: in some places anything goes, in other regulations are rarely enforced.


For Qlik one of the project main challenges was the data cleaning and normalization process. The project contains more than 25 different data sources. We fixed some of the most obvious issues with data, please read the methodology page (http://special.nationalpost.com/follow-the-money/methodology), but we also wanted the data to show how it was originally recorded without any makeover. It’s common to find small variations in names across the app, for example chances are that the donor names ‘Justin Trudeau’ and ‘Justin P.J. Trudeau’ belong to the same person also known as Justin Pierre James Trudeau.


We ended up having a large app holding around 6.5 million rows of data (at the time of writing) and a clear goal, make the data searchable. Anyone should be able to find individual donations and get some information about the shape of the data.


We used enigma.js to interface our Qlik Engine API and React to build the user interface. We created a powerful piece that displays millions of rows of data in the blink of an eye. React.js is designed to work with simply reacting to changes in data, and its super-efficient diffing algorithm makes DOM updates super-fast resulting in a blasting fast experience.




The main table displays the more granular level of data including individual donations and all the relevant details. To show the complete 6.5 millions of rows we use virtual scrolling and paging. The table is getting new data from the server as users scrolls the table.


We also included two bar charts to ease the data profiling task, compressing down millions of rows to a few bars. Lastly we use two small tables to illustrate the top donors and donations so the readers who are interested only in the super donors have a quick way of finding the information in the table.






Check the online version here Follow the Money - Political Donations Database | National Post



Custom Themes is one of the new features shipped with February release so make sure you are updated before trying to come up with your own.


To create a new theme, first we need to understand what exactly is a theme and what it can do for us. A custom theme is a collection of files stored in a folder, it must contain a definition (QEXT) file, a main JSON file, and optionally any other assets you might need to support the custom theme such as CSS files, custom font files, images, etc.


Custom themes let users to quickly apply different levels of customization to their apps, some of you might be interested in having your custom color palletes, while someone else might just need bigger font size, both can be achieved with Custom Themes. Theme authors can target individual visualization objects via JSON and/or use a custom CSS to modify the sheet styles.


From Qlik Help


The custom styles can be defined in two ways:

  • In the JSON file you define the style for the individual visualization types, for example bar charts and line charts.
  • CSS styling is more general and flexible. You can, for example, style sheets, visualizations and extensions.


Creating a simple custom theme


I'll be using Qlik Sense Desktop for this example, please check the help page for instructions on how to install a Custom Theme in Qlik Sense Server.


  • Go to your extensions folder: C:\Users\[username]\Documents\Qlik\Sense\Extensions
  • Create a new folder, I'll call mine theme-helloworld
  • Create a new file and rename it to theme-helloworld.qext. The QEXT file is a definition file that contains a few lines, where only name and type are the only mandatory lines.


  "name": "Hello World theme",
  "description": "My first custom theme",
  "type": "theme",
  "version": "1.0.0",
  "author": "Arturo Muñoz"


  • Now, it's time for the JSON file. Create a new file, name it theme.json
  • Edit the theme.json file with your favorite text/code editor
  • My advice is to start your theme with the sample code you can find in Qlik Help so you can familiarize with JSON and it's properties:


  "_inherit": true,
  "_variables" : {
    "@greenColor" : "#61a729",
    "@text": "#4c4c4c"
  "color": "@text",
  "fontSize": "12px",
  "object" : {
    "title": {
      "main": {
      "fontSize" : "16px"
  "dataColors": {
    "primaryColor": "@greenColor"


  • The JSON file will change the primary color of your charts from Qlik dark blue to the custom green as defined in the variable at line 4 and will also modify the charts title to a font size of 16 pixels.

    This is a simple example but there are much more you can do with the JSON file, you could for example, define new color schemes for measures, change the axis', labels, legends font size and color and much more.

    Actually you could even load your custom CSS through the JSON file so you can target and hack any predefined style within your app, so you could modify object paddings, change font family, and so forth.


If you've followed the steps above you should have something like:


How to activate a Custom Theme?


Check how to apply a Custom Theme to your app in the animation below






Tips from the expert... and theme sharing!


I've asked my colleague Nabeel Asif for some tips since he created the Custom Theme based on Color Brewer that we are sharing  today (check the attachements). This is what he said:


All of our standard themes just give one sequential and one diverging gradient for measures, and two color schemes for dimensions. But you can actually define as many options as you like through the “scale” and “palettes” properties in the theme’s JSON.


For sequential and diverging gradients, Qlik uses seven colors to define a scheme. But you don’t actually need to specify all seven colors. Just define the two colors at the extremes, and Qlik does a nice job of calculating the rest. Of course, if you want very specific colors you can define them yourself.


Often apps will be designed with red representing something bad or dark colors representing higher values. To maintain this look as the user switches themes, you should follow these conventions in the JSON:

  • Diverging scales should be ordered from reddish hues to bluish hues.
  • Sequential scales should be ordered from dark to light. 


Please don't forget to always check Qlik Help for the most recent specifications.



Qlik String functions are an extremely handy set of functions to clean, manipulate, and ultimately normalize data before (or after) loading it into an app. String functions ‒ Qlik Sense


I was working with a new data set recently, among other fields the data set contains addresses, something like this:


Abbey Road, London


Since the data set doesn’t have a dedicated city field I decided to apply Subfield() to extract the City as a separate field. Easy task, right? I use the comma as a separator to split the string.


Subfield (address, ',', 2) as City,


Shortly after we decided to expand the data universe of the app to include other countries in our analysis, we ended up having multiple sources with slightly different address formats:


Abbey Road, London

Paseo del Prado, s/n , Madrid

91, Rue de Rivoli, 75001, Paris


Not great news, right? Due to the variable number of commas in the address field I can no longer use subfield to manipulate the string, or maybe I still can use it.


Searching from the end of the string


Subfield function not only takes positive values for the third parameter, it also accepts negatives values. A negative value searches from the end of the string. This will help us to extract the City while keeping my script highly readable. The new function will be something like:


Subfield (address, ',', -1)


The function above will return the first portion of the string separated by the delimiter comma (',') searching from the end of the string, right to left. The newly created "City" field contains:






Right to left search in String functions

The use of negative values, or right to left search (remember the read will still be performed from the start of the string) also apply to other string functions:

  • Subfield

    Subfield('Abbey Road, London', 'o',-2) 

    Returns 'nd' (the second occurrence of 'o' starting from the end)

  • Index

    Index('Abbey Road, London', 'o',-2) 

    Returns 14 (the second occurrence of 'o' starting from the end)

  • FindOneOf

    FindOneOf('Abbey Road, London', 'oes',-3) 

    Returns ‘8’ because the search is for any of the characters: o, e or s, and "o" is the third occurrence starting from the right, and is in position 8 starting from the left.


I hope you find it as useful as I do.

AMZ @arturoqv

It's time for the end-of-the-year in review post, it's time for the cream of the crop.


During 2017 six main authors and a respectable number of guest bloggers posted a total number of 85 articles (plus this one).


We wrote 39,822 words (7,819 distinct words), that’s 15% more than the number of words we wrote previous year. We wrote the word “Qlik” 566 times, an absolute record. You contributed 695 times to the success of this blog in the comments section, we truly appreciate your feedback and comments!




Most popular posts in 2017


Most read/visited posts

Don't be the last one to read it!


  1. Qlik Sense September 2017 - What's New
  2. Quotes in Set Analysis
  3. Push the Boundaries of Analytics - Qlik Sense Bot (video)
  4. Take a look at Qlik Sense June 2017
  5. Introducing DAR mashup template


Most commented posts of the year

Everyone is buzzing


  1. Quotes in Set Analysis
  2. Introducing Qlik Sense 3.2
  3. Take a look at Qlik Sense June 2017
  4. Qlik Sense September 2017 - What's New
  5. Push the Boundaries of Analytics - Qlik Sense Bot (video)


The underdogs 2017

They worth a second read.


  • Qlik Sense WordPress Plugin
    The world most popular CMS and the most powerful Analytics platform combined? it seems like a perfect match. This blog post is capturing a lot of comments, check it out and join the conversation.
  • Rank Function
    Some of the old Qlik functions still have secrets, check this post to learn what you are missing from the Rank function.
  • Intro to Qlik Open Source Software
    It feels great to contribute to the Open Software community, read what Qlik has to offer!
  • Salesforce and CIO dashboard mashups available to the public
    You can use these examples as templates or just dissect them into pieces to learn more about Qlik APIs and how to build impacting data sites.



I wish you an enjoyable New Year countdown!

Arturo (@arturoqv)

Since the introduction of Data Manager (the Data manager is where you visually add and manage data from your own data sources, or from Qlik DataMarket, so that you can use it in your app) Qlik has been constantly improving the set of features that makes the task of loading data an enjoyable part of the analysis process.


One of the most recent (and genius) additions to Data Manager is the “Summary card





So what is the Summary card?


Summary data profiling card is a visual representation of your data. It contains a set of elements, values and charts, that let you better understand each field in your data set.


Summary card has been designed to help you anticipate and prevent data quality issues before loading data into Qlik Sense. The Summary card content adapts to the field selected, so depending on the column data type, measure, dimension, or time it will present you with different insights.


For measures the following information is provided

  • Field name
  • Field type
  • Distinct Values
  • Total Values
  • Preview of the distinct value distribution in a bar chart showing the 20 highest count elements.
  • Value Range. It is a very interesting chart itself, for a measure field it will show a distribution chart showing the Min, Median, Average, and Max values for the field.
    If a temporal field is selected the Value Range will display the first and last date in the range.
  • Null Values and Mixed values charts only appears based on the field data.




How to access the Summary card


To see and use the Summary card by yourself you have to get to Data manager, In Data manager, select a table and click the pencil icon, then select a table field and the Summary card appears. Or just check the animation below:




Enjoy it!

Arturo (@arturoqv)

One of our new additions to the charts library is the Waterfall chart. It’s useful to visualize how an initial value evolves (increment or decrements) over time or in distinct stages. It’s widely used across companies and finance analysis seems to be a good fit for the waterfall chart. We commonly see this type of chart for Income or Cash flow statements.





How it works?


Qlik Sense waterfall chart is a simple non-dimensional chart, it’s composed by expressions only. Each measure can be configured to “Add”, “Subtract”, or “Subtotal”. Meaning we have total control over the graphical representation of the values, we could tell a positive number to subtract its value from previous column and viceversa.

The Income Statement example


The CFO of the company Fitness Equipment Limited (from Wikipedia) wants to visualize and analyze its company income statement by year.





After getting the data into Qlik Sense (one table with three columns, Concept, Year, and Amount) it's time to represent the Income Statements table above with a Waterfall chart. Remember, the goal is to show the profit (or loss) for the year amount, but more importantly how was the flow to get to that amount.


Creating the chart


  • In edit mode, drag and drop the new Waterfall chart into the Qlik Sense app
  • Add the first measure, it will typically be the starting amount or opening value. Revenue will make it in our example.
  • Add as many measures as you need to complete the individual contributing amounts. In our example:
    • Cost of Sales
    • SGA expenses
    • Gains from disposal of FA
    • Interest expense
    • Income tax expense



For those balance measures and those amounts that denote subtotals such as Gross Profit or Operating profit we don't need to create an expression, we just need to check the subtotal checkbox in the preceding measure.

For example, to calculate Gross Profit (Revenue - Cost of Sales) check "Subtotals" check box in Cost of Sales measure and set the "Subtotal label" to Gross Profit. Perform the same operation for all of the balance points in the chart.


Spicing it up


Waterfall chart comes with the usual customization panels as seen in any other Qlik Sense chart, but this time we have a dedicated Color section that includes a color picker for each one of the bar types that inhabit your chart.


The final waterfall chart looks like the picture below. It includes a year list box so now the CFO and any user will be able to quickly  visualize different years of Income Statements to analyze how each piece contributes to the total profit.




This is just an example of what a Waterfall chart can do for your business but I'm sure there are many more use cases for it, please share your experience with Waterfall chart in the comment section below.


Enjoy it!



PS: Find attached the Qlik Sense with the examples shown in the blog post

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.

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)

Continuing with the description of the new charts available in the Qlik Sense June 2017 release, today is the Box plot’s turn.


The American mathematician John W. Tukey introduced the box-and-whisker plot (called simply a box plot) in his 1977 book, "Exploratory Data Analysis".


Like the Distribution plot, the Box plot is a histogram-like method of displaying data and is appropriate to represent the degree of dispersion, skewness, and whether there are potential unusual observations in the data set. It’s particularly useful for comparing distributions between several sets of data, short of having several histograms close to each other so you can compare across them. The data center, spread and overall range are immediately apparent for each data set.

In my previous post about the distribution plot, I used an example data set containing data for 3 salespersons recording their monthly sales data. I'll reuse that data to illustrate how the box plot works.


A Box plot will typically help us to visualize 5 numbers, the statistical median represented as a horizontal line inside the box, the box ends show the first and third quartiles values. The whiskers indicate the range of the data and they are represented as horizontal lines ending in a small vertical line. Whiskers extend to the farthest points that are not outliers. Depending on the box plot configuration you choose, a provision is made for the representation of extreme values, typically upper/bottom quartile range +/- 1 x interquartile range or IQR. Additionally, outliers or extreme values are represented with dots.


Some general observations about our salespersons’ box plots:

  • The box plot is comparatively short – see Sheri. This suggests that overall monthly sales have a high level of similarity with each other.
  • The box plot is comparatively tall – see Dani. This indicates Dani’s monthly sales are quite different across the year.
  • The box plot is skewed – see Dani. There are more data points on the left/bottom (toward lower values), most of Dani's sales are small amount of sales.

To get the chart working in your Qlik Sense app it only requires one dimension (add a second dimension to compare across it) and one expression. Qlik Sense's new Box plot offers three standard presets, standard (Tukey), percentile-based, and standard deviation. For those of you with special needs or for those interested in learning more about fine tuning your chart, there’s a manual mode that give us full control over each one of the chart elements.


Enjoy it.

Arturo (@arturoqv)

The Qlik Sense June 2017 release came with a bunch of new visualizations, distribution plot is one of the new objects available to drag and drop into Qlik Sense. Let’s use an example to check what a distribution chart can tell us that was previously hidden from our eyes.


I’m going to use a very simple example of sales data, it contains 3 sales rep and monthly sales that extends over a year. We want to see how our reps are preforming over the year by observing some execution indicators such as total sales and average sales.




In our not-so-random example data, sales are even for the sales team. As you can see in the picture below, their aggregated numbers are almost identical.




Average is just not enough to see how sales rep are performing, we need more granularity if we really want to understand how the sales process works. To do so we could try to include months and maybe use a different visualization object like a line chart.




Line chart will help us to see sales with a temporal component, I see how both Jerry and Sheri have a very regular sales process over the months while Dani's go all over the board with excellent months and not so great ones.


Distribution plot can help me to get a better picture of our sales by giving us a glance of data dispersion.




I see that despite having the same yearly sales amount and sales average the actual distribution over time is quite different from each other.


Jerry has tight sales performance month to month with all the points(months) falling in a compact cluster. Sheri meanwhile has a very tight bucket of dots a little over $150 but also a couple of months that could be considered as outliers. That is valuable information that wasn’t obvious only attending to the line chart.


Dani's sales don’t follow the pattern described by the other two individuals. For Dani, monthly sales range from $0 to $600 is either an excellent or a terrible month. Any company will be happier with a more consistent sales performance and our imaginary company is no exception to that. By learning how each one of the sales team performs we can take the necessary actions to help Dani to be more reliable.


As we have seen similar yearly sales and identical sales average could hide some valuable information, there’s a story in your data that needs to be discovered.


Enjoy it,

Arturo (@arturoqv)

Guided apps are probably the more common data viz pieces nowadays. Are strongly influenced by the traditional journalistic approach to a story and related with storytelling. The goal of guided apps is to walk the reader from point A to point Z.


A well-constructed guided visualization is incredible powerful at proving a point, examples can be found almost daily at mass media websites. As a data professional, I love data stories but maybe because I’m such a data geek I usually never get completely satisfied by the visualizations used to emphasize the story. I almost always hungry for ways to explore the data or I simply miss one angle from the story to feel fulfilled.


On the other hand, the so-called Discovery apps are intended to let the user to manage the ride and rely on reader capacity to be able to interact and to understand the data they are looking at. Scenarios with simple and familiar data are generally more appropriate for discovery apps.


We recently got one of those great data sets for discovery, simple data and containing thousands of potential stories in it. Barcelona Marathon organization contacted us to create a piece to let runners (data users) to explore every corner of their data. They have been collecting runners’ data during the last decade, our part was just to put a nice wrap around it. We like to see it as a nice hybrid (more on the discovery side) of guided and discovery app.





We divided the mashup into three sections trying to help first time users to better get familiarized with the data. It’s just a visual separation of the data, each section belongs to the same data model, filters are global and every selection affect all the charts. For the clarity of it we reduced the use of set analysis as much as possible.


The app starts with race overview data, about participation and finishing times. The second section serves as demographic info, with three main characteristics to consider, age, sex and nationality. Finally, we reserved a little bit of complexity for the very last section, we called it Performance. As you can see in the picture below taken from the chart “Avg time by age” the sweet spot age for someone to run this marathon is 35 years old, in average people in that age get the best results.


avg time by age.png


You can check the mashup live at Barcelona Marathon page here or as a stand-alone version at Marató Barcelona.



Arturo Munoz (@arturoqv)

Filter Blog

By date:
By tag: