60 second trick saves hours debugging Qlik Sense apps

During the past weeks I have developed what has turned into a fairly complex Qlik Sense solution, where reloading the main application takes on the order of 10 minutes.

I know – Qlik apps should be kept small, with intermediate data sets stored as QVDs. But sometimes that’s just not practical.

Qlik apps works the same as most apps – if you made a typo somewhere the reload (or compilation for regular computer applications) will fail. Sometimes after a few seconds, more often right towards the end, just before those 10 minutes have passed… Fix the typo and start another 10-minute reload. Sigh.


The other day I realised that I had been using an old trick without even thinking about it, to cut down the reload times from 10 minutes to a few seconds. Talking to some colleagues, it turned out they didn’t use this trick – so here it is: The best time saver ever for Qlik developers.

The idea is very simple: You want to run the entire load script to make sure it works, but without processing 100s of megabytes of data or more.

In Qlik scripting, this is achieved by using the First prefix, added before a Load statement. Two things needed:

  1. Add a variable at the beginning of the script, and make it easy to change it to a few different values (for loading 1000 rows of source datasets, or something larger).
  2. Add the variable before all load statements where large datasets are loaded into the app.

It can look something like this:

Sense’s load script editor does not quite like using variables in this way, and complains about the syntax being incorrect. Don’t worry about that, the script loads fine.

To do a quick load (to ensure the script is solid from a syntax perspective), just enable one of the commented out lines at the top. This will limit the numer of lines loaded in the following load(s). The load time will be nice and short.

Once the script works, comment out that first variable again, setting it to an empty string. All data will be loaded from sources.

Easy trick – I know. But it has literally saved me days during past months!

Hack the Crisis hackathon



Wow, that was a busy weekend.

Hack the Crisis was a government sponsored hackathon with 5000+ people taking part – pretty impressive.

Friday night our hackathon team kicked off our project. The goal was to develop the core concepts of a service that makes it easier to help those who need help in these challenging times.

The verdict is still to come regarding official hackathon results, but the general feeling is pretty good. There is a distinct need out there, we demoed the core concepts of a solution, and there are clear paths onward from here.

And yes – a 48 hour online hackathon is a pretty effective way of achieving social distancing from your family living in the same house…

Take care and stay safe out there.

Animated GIF horror for Qlik Sense

Parrot, anyone?

Qlik Sense is very much my go-to tool for many data related questions.
It’s very powerful to be able to throw together a proof of concept or test a hypothesis in half an hour.
Seeing is however believing, so those prototypes does need some polishing before they can be seen as production grade.

I have always pushed my peers in the Qlikosphere to become better at using icons for their Qlik Sense apps in general, and also for the sheets within those apps.
Having an icon for a sheet within an app makes it way easier for the user to find a particular sheet – humans are visual by nature.

Continue reading “Animated GIF horror for Qlik Sense”

Butler SOS 5.0 is out – new features, new doc site

Butler SOS has matured quite a bit during past couple of years, with latest additions being fine-grained monitoring of what users are connected to what servers.
Opens up for various interesting use cases, including notification to users before server restarts etc.

A brand new doc site (butler-sos.ptarmiganlabs.com) also goes live today (built with Hugo and Docsy, vastly better than the previous one-pager at GitHub.

Starting today that site is the goto-place for everything Butler SOS related.
The site contains both installation and configuration instructions, as well as a (hopefully growing) set of examples on how Butler SOS can be used in various way.

Make sure to check out the blog section of that site too!

If you don’t measure it, you can’t improve it: DevOps concepts meets Qlik Sense

Real-time monitoring of user sessions using Butler SOS

Butler SOS 4.0 is out, adding features that make it easier than ever to monitor large Qlik Sense environments. We’ll return to this topic of course, but let’s first take a few steps back.

There are many variants of that quote: “If you can’t measure it, you can’t improve it”, “Measure what matters”, “Measure what is measurable, and make measurable what is not so.” and others. The last one supposedly originates with Galileo Galilei. Smart guy.

The development of Butler SOS continues in that spirit. Qlik Sense provides an awesome platform on top of which all kinds of data analysis, visualisation and presentation solutions can be built. A key word there is platform. Sense does not offer solutions to all software development challenges, nor should it. Instead, use the tools and best practices that millions of developers around the world have refined over the years.

Qlik Sense does on the other hand offer a very comprehensive set of APIs that give developers access to its internals – and this is part of why it’s such a powerful platform. Butler SOS taps into some of these APIs, exposing their data in the form of real-time dashboards, charts and alerts. Suddenly sysadmins know can get both an overview of how all servers are doing, as well as look at detailed server metrics when so needed.
All made possible using the Sense APIs, but in general powered by various open source tools.

We’re basically back to Galileo – let’s make sure the important parts of Qlik Sense are measurable. It is then possible to improve the parts that don’t work well.

Continue reading “If you don’t measure it, you can’t improve it: DevOps concepts meets Qlik Sense”

One click creation of Qlik Sense apps: Butler App Duplicator 3.0 is out

Photo by Brent Olson on Unsplash .

Heading for the mountains here, but a quick update first.

Everyone’s favourite app wizard for Qlik Sense (ok… my favourite wiz at least..) has had a major face lift – yay!

The basics are the same, i.e. one-click creation of Qlik Sense apps, using regular Sense apps as templates. Several new features however take the tool to a new level, making it easier to set up, manage and more enterprise grade. Good news thus!

Continue reading “One click creation of Qlik Sense apps: Butler App Duplicator 3.0 is out”

Butler Spyglass: Data lineage and metadata tool for Qlik Sense

Latest member of the Butler family

For years I have thought about ways to get data lineage info for all apps in a Qlik Sense Enterprise environment.

It would be super useful to know exactly what apps use a particular data source, as well as vice versa (what data sources are used by a specific app). I know there are commercial tools doing this and much more, but I wanted something easy to use, yet still effective and free.

Same thing for app load scripts: Extracting and storing them to disk in human readable format has more than once save days of work, when something has gone badly wrong in an app.
Dumping load scripts to disk was possible in my original Butler tool, but then only one app at a time. So not quite what was needed in an enterprise context.

Enter Butler Spyglass

Continue reading “Butler Spyglass: Data lineage and metadata tool for Qlik Sense”

Monitoring for Qlik Sense: Butler SOS v3 is out

The latest version fo Butler SOS is out, taking the version number to 3.0.
A lot of the code has been fine tuned to better meet the needs of enterprise grade Qlik Sense deployments.

Docker (or some compatible container platform) is now the preferred and recommended way of running Butler SOS. Butler SOS has been developed and tested on Linux and Mac OS, but should in theory run also other Docker enabled platforms.

New features

Version 3 adds a few – but useful – features:

  • Per-server config option “serverGroup”. Use this to group or categorize servers, for example as being part of a production vs development Qlik Sense cluster. This enables the creation of Grafana dashboards that use Grafana variables to automatically show metrics for all PRODUCTION servers. This greatly simplifies using Butler SOS in large Qlik Sense environments, where servers are frequently added/removed. No need to manually update the Grafana dashboards any more.
  • Config option “queryPeriod” for controlling how far back querying for Sense log entries should be done. Used together with the logdb.pollingInterval setting, it is now possible to fine tune how often the Qlik Sense log database is queried for errors and warnings.
Continue reading “Monitoring for Qlik Sense: Butler SOS v3 is out”

The beauty of Docker – how to run all Butler tools with a single command

Docker is great.

Docker is one of those tools that have the potential to fundamentally transform how you develop and run software – once you have tried Docker it is hard to imagine going back to something else.

In previous posts we have seen how Butler, Butler SOS and Butler CW can be run as Docker containers.
But we can do even better – why not control all the Butler tools from a single docker-compose file? Maybe even specifying the dependencies on influxdb and mqtt in there too?

Setting this up is incredibly easy – a single docker-compose file tells Docker what containers to use, and some config files tells the Butler tools where to find things.

Let’s get started!

Continue reading “The beauty of Docker – how to run all Butler tools with a single command”

Docker everywhere – Qlik Sense operations monitor using Butler SOS

Following up on previous posts (here and here) about the Butler family of tools being Dockerized, here is another one on the same topic:

Butler SOS can now be run in a Docker container. 

This is good news as it makes it a lot easier to set up real-time monitoring of a Qlik Sense enterprise environment, compared to the previous (still working, btw) method of installing Node.js and then running Butler SOS on top of Node.

The Github repository has all the details – head over there to get the latest release of the code as well as instructions how to run Butler SOS using Docker.

The Docker image is available on Docker Hub, if you want to get started right away.