1 2 3 Previous Next

Qlik Design Blog

513 posts

Recently my colleague Lee Matthews made me aware of a comprehensive set of videos he created based off of a free, 3 hour workshop he and his team hold on a regular basis in the ANZ region. (Australia / New Zealand). 3 hours may not seem like a long time, however it is enough time to build a rather sophisticated Qlik Sense app from start to finish. They utilize Qlik Sense Cloud as a basis for the workshop; providing a turnkey approach that requires no setup and fast delivery. Qlik Sense Cloud provides a great introduction to Qlik Sense and while it does not have all the features of the Qlik Sense Enterprise platform, the process involved in building a Qlik Sense App is the same. To further our goal of delivering analytics and insights to everyone Lee has condensed the workshop into (5) 8-15 min videos; totaling about 50 min viewing time. Watch these videos at your own leisure and even download the workshop material (attached to this document) to follow along. I hope you find these videos helpful! Thanks for this valuable contribution Lee!


Workshop Playlist


This is just another fine example of contagious enthusiasm demonstrated by our Qlik team members whom are dedicated to our customer's success.




About Lee Matthews: Lee is a Principal Solution Architect and team lead 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.




Have a comment or question? Want to suggest a post? Let us know in the comments below?

If I ask you what the alpha value means in hypothesis testing, I’d bet most of you would be able to give a correct answer right away, am I right? But you are a minority, most people in the world wouldn’t have a clue – only about 1 in 5 people today are data literate.

Data literacy is the ability to read, work with, analyze, and argue with data


Some of you might argue that 4 in 5 people doesn’t really need to know what alpha value is, and surely, not everybody needs to be a data master, however being able to speak data, would help everyone, everywhere. It might give you and edge now but surely it will be vital in the future.


But, let’s focus in the Enterprise, what if we turn our heads to the people making business decisions? Should they be data literate?


A new research shows only 24% of business decision makers, from junior managers to the C-suite, feel fully confident in their ability to read, work with, analyze and argue with that data.


We have a problem


If only 24% of business decision makers can speak data, then it means we have a problem. But don’t worry, we have a plan. Qlik is on a mission to solve this important skills gap, by empowering everyone with the ability to properly use data.




We can help to fix it, and it’s free!


Qlik is offering free courses that everyone can benefit from – regardless of their role, skill level, or even the BI tools they use – designed to help people and organizations understand, analyze and use data with confidence.


Qlik’s learning program, is a product agnostic training package, designed to help anyone to read, work, analyze and argue with data.





Get started now by taking the FREE Data Literacy Skills Assessment it's a fun 15-minute questionnaire that will tell you where you are in data literacy and what next steps you should take. Then progress to the self-paced learning modules and finally complete the program by taking the free certification exam.


Some reading about the topic: https://blog.qlik.com/posts/topics/data-literacy-topic/

Data Literacy Program | Qlik

Qlik | Data Literacy Campaign



I hope you find it interesting,


Arturo (@arturoqv)

     Hey guys - thanks for taking some time to learn more about Qlik GeoAnalytics. Continuing my series that will make you more familiar with Qlik GeoAnalytics, I'm excited to show you how to use the Binning operation, available within the Qlik GeoAnalytics connector. Think of the Binning operation as a way to cluster or consolidate multiple location points into a defined boundary. When colored by a particular measure, such as count of the number of locations in that particular defined boundary, you can easily see where areas of concern or progress are; allowing you to immediately focus your attention on those areas.


What's Next?


     In the next part of this series, we will expand on this example and zoom into the boundary to see the underlying data points. Let me know what you think and please post your comments. If you have specific questions please post them here Qlik GeoAnalytics - our dedicated section in the forums. Myself and others will be available to further assist you.


Qlik GeoAnalytics - The Binning Operation



Michael Tarallo (@mtarallo) | Twitter



Previous Qlik GeoAnalytics blog posts and videos in this series.


Qlik Geocoding - Street Addresses and Qlik GeoAnalytics

Get Familiar with Qlik GeoAnalytics - Custom Info Bubble

Get Familiar with Qlik GeoAnalytics - The "Closest" Operator





NOTE: Can't see the video? YouTube blocked by your organization or region? No problem, just download the attached .mp4 file to watch on your computer or mobile device.


Sample .qvf file attached.

Inspecting Qlik Sense websocket communication is useful for a variety of reasons. Let’s see how to inspect websocket traffic, and then what to look for when it comes to websocket traffic from the Qlik Sense Engine.



Before you get started checking out websocket traffic from Qlik Sense, you must know how to use browser dev tools to inspect websocket traffic. Open a tab in Chrome and open the dev tools for that tab, then navigate to a Qlik Sense app or mashup. Now in dev tools, go to the network tab, and filter for WS. You should see the websocket listed, select it. Now notice the tabs for headers, frames, cookies, and timing. You can inspect request and response headers in the headers tab, see cookies sent with the request in the cookies tab, and check out the load time in the timing tab. But the frames tab is where the action is. Click on that and you can see all of the messages sent and received over the websocket.





All the communication with the Qlik Sense engine happens over the websocket. You can see the messages for authenticating and connecting, opening a doc, creating and fetching objects, getting layouts, and more. You’ll want to match messages sent, which are highlighted in green, with its response message. Both will have the same id.


Here’s an incomplete list of good uses for checking out the websocket communication:



The first two frames should always be the responses for authentication and connection. In the authentication response, you can see the user id and directory, the logout uri, and whether authentication is required or not. In the connection response, you can see that the connection was successful and whether a new session was created, or a session was attached to an existing session. If the session was attached, that means its sharing the session with another existing session. This is what you would want to check if you were opening up two or more websocket connections to the same app and wanted to make sure the connections were going to share the same session. You can also see the messages sent and received when opening a doc, which can sometimes be useful debugging any issues.



This one’s kind of obvious but should be mentioned. Here’s an example. If you’re trying to embed objects and they’re not showing up on the page, you should inspect the websocket communication. You can check to make sure that a connection is made, the doc has been opened successfully, and the getObject message has been sent. Then you can check the response message to see if it tells you anything about your issue. If you try to get an object but have the wrong id, for instance, you’ll see that you don’t get an error for anything, but the response just doesn’t contain an object, which is a good indication that you just requested an object that doesn’t exist.



I like to check out the websocket communication for native Qlik Sense objects. This let’s me see how native objects do things like paginate the data on scroll, or use the beginSelections and endSelections methods, so I can get ideas for replicating similar functionality in my own custom visualizations.

Jennell McIntire

Table Functions

Posted by Jennell McIntire Sep 7, 2018

Today, I am going to blog about Table functions.  I came across these functions when I was exploring the various ways I can determine if a table exists in the data model.  The table functions I will review today include:


  • FieldName
  • FieldNumber
  • NoOfFields
  • NoOfRows
  • NoOfTables
  • TableName
  • TableNumber


These functions provide information about the current table being loaded or specified in the function.  All of these functions should be used in the script but the NoOfRows function can also be used in a chart expression.  Let’s take a closer look at these functions but first let’s load a table that we can work with.

Table script.png

Now load the script to illustrate the functions:

Function script.png

Here are the results of the Temp table loaded above:


While the function names give you a good idea on what they are used for, let’s take a more detailed look at each one of them.



The FieldName function takes two parameters, field number and table name, and returns the name of the respective field.  Based on the script above, the FieldName function will return Name since it is field 1 in the Table1 table.  Note, field numbers start with 1, not 0.



The FieldNumber function takes two parameters, field name and table name, and returns the number of the specified field in the table.  In this case, Gender has a field number of 2 in Table1 so 2 is returned by the FieldNumber function.



The NoOfFields function takes one parameter, table name, and returns the number of fields in the table that was specified.  The table name parameter must be for a table that is already loaded in the data model.  It cannot be for the table that is currently being loaded.  For example, in the script above, the table Temp could not be used in the NoOfFields function since that is the table being loaded.



The NoOfRows function also takes one parameter, table name, and returns the number of rows in the specified table.  Like the NoOfFields function, this function must be used for a table that was previously loaded.



The NoOfTables function does not take any parameters and returns the number of tables that have previously been loaded in the data model.  Based on the script above, the NoOfTables function will return 1 for the Table1 table.  Note that it does not include the Temp table that is being loaded when this function executes.



The TableName function takes one parameter, table number, and returns the name of the table with the respective table number.



The TableNumber function takes one parameter, table name, and returns the number of the table with the respective table name.  Note that the table number starts with 0 and not 1 so TableNumber(Table1) will return 0 since Table1 was the first table loaded.


Hopefully, you have learned something new and found this useful.  Table functions provide information about the tables and fields that have been loaded in the data model.  If you would like more information, check out the Qlik Help site.




Qdt-components is a library that we've created to support the Demo Team's work.


In the past I talked about how we can use it with various frameworks, qdt-components - A Components Library that can be used in simple Html, Angular 5 and React and as a Wordpress plugin, qdt-components - A Wordpress plugin.


I have also shared with you, some of the components with examples on how to use them

qdt-components - Horizontal Barchart by Picasso.js & Selection Toolbar and, Qdt-components & Picasso.js - More Charts! (Custom Selection Toolbar, Picasso Horizontal/Vertical Barchart, Pie Chart, Scotterplot, Line Chart and Combo Chart)

Since then, we have added some more components. Below are the latest additions with their examples on how to use them in your websites. Here are the latest additions with v1.3.5




    My friend and colleague bps (Patric Nordstron), Sr. Product Manage for Qlik GeoAnalytics, recently made me aware of some pretty cool tips and tricks he developed that allow you to customize your info bubbles when using Qlik GeoAnalytics map objects. It is written in a post here: Adding a Sense chart into a Qlik GeoAnalytics map info bubble. I though this was a really clever way of not only providing additional information on top of your Qlik GeoAnalytics maps, but also a great way to showcase the power of our Qlik Sense APIs. I decide to create a quick video on the topic as part of my series on making you more familiar with Qlik GeoAnalytics. Let us know what you think! Enjoy.


Qlik GeoAnalytics - Custom Info Bubble


Mike Tarallo - Twitter



Can't see the video? YouTube blocked by your region or organization? Download the .mp4 video to watch on your computer or mobile device.




Part 1: Qlik Geocoding - Street Addresses and Qlik GeoAnalytics

Part 2: Get Familiar with Qlik GeoAnalytics - The "Closest" Operator

Arturo Muñoz

Qlik Sense URL "hacks"

Posted by Arturo Muñoz Aug 24, 2018

A few weeks ago, Francis wrote a piece here about the (formerly) secret developer menu accessible via URL, Developer menu is a great finding but is not the only one URL hack available. These are some of the URL “hacks” I use:




More info here: Developer menu in Qlik Sense client




Adding /language/key will change the client language for that tab session. Remember you can always check the available client languages by checking Dev Hub






/theme/theme name


Likewise, you could change the theme of an app by specifying the theme name in the URL.  Also remember you can check the available themes in Dev Hub.


https://localhost:4848/app/app_id/sheet/sheet_id/state/analysis/theme/qdt theme




By specifying an identity id you can create selection realms. For example, you could have 2 different tabs open in the same browser as:





Selections performed under “identity 1” won’t impact on the tab session “identity 2”, alternatively you could share selections in different browsers by using the same identity in each one of them.




Adding /ttl/ and a number representing seconds will override the settings of session-expiry time in the server, setting it up to the number specified in seconds. For example, adding 1800 will set the expiration time for the session to 30 minutes.




As a general disclaimer, please note that anything that isn't documented or officially supported is subject to change in the future. Handle it with care.


Arturo (@arturoqv)

     Hi guys - continuing my series on making your more familiar with Qlik GeoAnalytics, I build on my previous example where we used the Qlik Geocoding service to grab and plot coordinate points for our video game store street addresses. In this example we will use the "Closest" operator, available from the Qlik GeoAnalyics Connector, to see which stores are the closest to my "home" within in a 30 mile radius. We will even take this to the next level and use a Line Layer to visual depict that distance as well. Watch or download the video and samples to learn more!


8-21-2018 3-12-02 PM.png


Qlik GeoAnalytics - The Closest Operator


Part 3: Get Familiar with Qlik GeoAnalytics - Custom Info Bubble



Mike Tarallo - Twitter



Can't see the video? YouTube blocked by your region or organization? Download the .mp4 video to watch on your computer or mobile device.

There are 5 methods on the doc class to help you search in various ways. They are the SearchAssociations, SearchObjects, SearchResults, SearchSuggest, and SelectAssociations methods. I’ll touch on all of them in more detail except the SearchObjects method, which is a bit out of scope for this post. Just know that you can search through the objects in a Qlik Sense app with this method.

Each of the rest of the methods all take a qOptions parameter, which is a SearchCombinationOptions object. This object has a qSearchFields property which is an array of fields to search. It defaults to all fields. This object also has a qContext property, which takes one of three possible values including “Cleared”, “LockedFieldsOnly”, and “CurrentSelections”. “Cleared” clears all selections in the app before searching, “LockedFieldsOnly” respects selections in locked fields, and “CurrentSelections” respects all selections. One other property worth mentioning on the SearchCombinationOptions object is the qAttributes property. This can be used with the SearchResults method to request more details about the results. Check out the documentation for further details.




This method is deprecated, use SearchResults instead.




The SearchResults method is useful for display search results similar to how they are displayed in the Qlik Sense client. It takes 3 parameters, an options object, an array of search terms, and the page of results you want to retrieve. The results are returned as an array of objects with information on the search term matched, the field name, the items in the field that were matched, and the ranges in the items of the match. All of this information is useful when displaying search results to the user. If you want to allow the user to select results, you can request the results to contain qElemNumbers by correctly setting the qAttributes property of the qOptions object, but the easiest thing to do is to use the SelectAssociations method.




The SearchSugest method is useful for displaying search suggestions to the user as they search. You can see this kind of functionality in action in the Qlik Sense client or on the Qlik Sense Branch site when you use the search feature and see suggestions pop up as grayed text in the search bar, as well as below the search bar in the dark colored suggestion bar. This method takes 2 parameters, an options object, and an array of search terms. It’s common to use this in conjunction with SearchResults and SelectAssociations to display suggestions.




The SelectAssociations method is used for selecting search results. It takes 3 parameters, an options object, an array of search terms, and the index of the search result to select. The most obvious use case for this method is to use it to select results from the SearchResults method. You can display the results of the SearchResults method, and then allow the user to select a result, and call the SelectAssociations method with the same options object and array of search terms as the original SearchResults method call, passing the index of the search result the user clicked. This will select all values in that field that match the search.

Another less obvious use of SelectAssociations is to use it as a “live search,” making selections as the user searches, like the Qlik Sense Branch page. The trick is, you only want to have to search and select in one field, otherwise you would have to loop through results and make selections that could potentially exclude each other. So first you’d have to create a field which contained the values of all the fields you wanted to include in the search, with a key to associate the rows of this field back to the rows of the originating fields. Then you could use the SelectAssociations to search just that field and select the first index of results as the user types in a search bar.




Unlike the other methods I’ve discussed so far, the SearchListObjectFor method is a method on the GenericObject class, and applies to list objects only. This method takes 2 parameters, a qPath parameter which is the path to the list object, and a qMatch parameter which is the search string. This method provides functionality similar to what you see in filter objects in the Qlik Sense client. The way it works is when you call the SearchListObjectFor method on a list object, it reduces the data in that list object, without affecting the rest of the app. If you want to accept the search and select the values in the list object, you use another function, the AcceptListObjectSearch method.

Using SearchListObjectFor on a list object as opposed to using the search methods on the doc class is useful for creating typeaheads, where all possible search results are displayed when the use clicks the search bar, and are reduced as the user searches, or in custom filter objects.


If you guys have any questions about these methods, or using search with Qlik Sense, let me know. Also, checkout this great library on Qlik Branch for searching. http://branch.qlik.com/#!/project/56af9cc5126a633074bea476

Jennell McIntire

Error Variables

Posted by Jennell McIntire Aug 10, 2018

Today I am going to blog about Error Variables and how they can be used in an app.  Error variables are available in Qlik Sense and QlikView to:


  1. Determine what actions should be taken if an error occurs during script execution
  2. Provide information about error(s) that occur during script execution


The four error variables I will review in this blog are:


  1. ErrorMode
  2. ScriptError
  3. ScriptErrorCount
  4. ScriptErrorList


Of the 4 error variables, ErrorMode is the only variable that is set by the user.  This variable determines what should happen if an error occurs during script execution.  This variable is set in the script like this:


ErrorMode can take one of three values: 0, 1 or 2.  By default, ErrorMode is set to 1.  This means that if there is an error during script execution, the script will stop and prompt the user for an action.  When ErrorMode is set to 0, the error will be ignored and the script execution will continue.  When ErrorMode is set to 2, the script will fail and stop.  The ErrorMode variable should be set at the beginning of the script or before a section of the script where you know there may be errors that you would like to handle.  Once the ErrorMode is set, it will remain the same unless the ErrorMode variable is reset/changed later in the script.  For instance, you may opt to set the ErrorMode variable to 0 if there is an area in your script that may throw errors that you would like to ignore (not stop script execution).  In this case, you may need to set ErrorMode back to 1 if you want to be notified of other errors later in the script.


Let’s see how the error messages are presented if I run the simple script below to load a group of Excel files that start with “Book.”  Note, that all the files loaded do not include the “Monthly Sales” field.

Load script.png

If I precede this script with Set ErrorMode = 0, this is what I see when the script is complete.


Notice that the script finished executing even though there was an error.  Now let’s see what happens if we keep the default (ErrorMode = 1) or set ErrorMode = 2.


Here the script execution stopped at the error and did not complete providing the option to Close, correct the script and reload again.


Unlike the ErrorMode variable, the ScriptError, ScriptErrorCount and ScriptErrorList variables are output from Qlik Sense or QlikView that provide information about the error that was encountered when the script was executing.  The ScriptError variable will return an error code.  A list of the error codes and their descriptions can be found here in Qlik Sense Help.  ScriptErrorCount returns the number of statements that caused an error during script execution.  Lastly, the ScriptErrorList variable returns a list of the errors encountered during script execution.  If there is more than one error, they are separated by a line feed.  These error variables can be accessed in the script or via the UI.  In the script, you can simply refer to the ScriptError variable to find its’ value.  For example, in the script below, I can check for the error code 8 (“File not found”) to determine if the file being loaded was missing.


Error variables can also be access in the UI via the Text & image object.  In the Text & image object measure, simply enter an equal sign and the name of the variable like this:


To return something like this:


Error variables are useful and easy to use.  I find ErrorMode = 0 the one I use the most when I know there is a chance that the script may throw an error that is ok to ignore.  It is also useful if you need to control the path of the script’s execution based on an error.  You can learn more about error variables in Qlik Sense Help.




Hey Guys,


Watch this video to learn what's happening at Qlik.


In the video I cover:




Qlik Community Update


Can't see the video? YouTube blocked by your region or organization? Download the attached .mp4 to watch on your computer or mobile device.



Michael Tarallo (@mtarallo)


Recently, Julie Whipple blogged about Qlik’s partnership with Team Rubicon. She talked described how we helped Team Rubicon by creating an amazing mashup which gives the world a view of the awesome job Team Rubicon, it's partners, and countless volunteers are doing around the world. You can find Julie’s blog here: The Value of Data – Team Rubicon and Qlik | Qlik Blog

Even though the data is complex, using Qlik Sense to bring it all together in one view was like a walk in the park, too easy!

Once the data was uploaded into a Qlik Sense app, we setup the entire mashup using the qdt-react-template. We set up the pages and the routes and then used qdt-components to connect to the server and get the KPIs, Charts and Maps. In order to that, all we needed is the config to server https://github.com/qlik-demo-team/qdt-react-template/blob/master/src/components/QdtComponent.jsx and we were ready to go!

We are so thrilled to use our awesome products to make a difference. In general, developing is fun, really fun. When you add in the fact that what we develop is having a positive impact on the world, it makes us proud to be part of such a great company.  

Check out the  Team Rubicon – Open Initiative project: https://teamrubiconusa.org/open/

Here are some helpful links referenced above:

qdt-react-template: https://github.com/qlik-demo-team/qdt-react-template

Examples:  https://webapps.qlik.com/qdt-components/react/index.html#/

qdt-components: https://github.com/qlik-demo-team/qdt-components




2018-08-03 12_53_43-Open Initiative _ Team Rubicon.png

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,


Did you know there's a secret developer menu in Qlik Sense? I'm going to let you in on the secret and show you how to access it and what it contains. Just remember, this isn't documented or officially supported, and is subject to change in the future.


To access the developer menu, follow the steps below:


  1. Open a sheet in a Qlik Sense app in your browser
  2. Add /options/developer to the url
  3. Right click on an object and choose "Developer"



You can get the object id, properties, and layout of any object this way. There's also a link to open the object in single configurator, and test exporting. The object id's are useful for embedding visualizations. The properties are useful if you are creating your own objects and want to check the properties of an object in a Qlik Sense app for reference. In my opinion this is the most useful feature of the developer menu. Sometimes if I don't know the correct properties to set to achieve what I want I'll create a similar object in the Qlik Sense client just to check the properties. The layout shows what is returned by the engine for the layout of the object, and can be useful to see what the layout will look like before you actually create an object yourself. And the single configurator link is a handy way to get to the single configurator of an object directly from a sheet.




And now you know about the secret developer menu.

Filter Blog

By date:
By tag: