# Blogs

View our Technical Blogs for updates and information.

This forum was created for professors and students using Qlik within academia.

Updates for Qlik Community offerings, announcements and changes.

All about product and Qlik solutions: scripting, data modeling, visual design, extensions, best practices, etc.

On this forum you can access and follow the latest updates of our courses and programs with the Qlik Education team.

Learn about what's new across all of the products in our growing Qlik product portfolio.

Important and useful support information about end-of-product support, new service releases, and general support topics.

Information on all new product releases, connectors, beta programs, and technical product information.

# Recent Blog Posts

#### Recipe for a Pareto Analysis – Revisited

This type of question is common in all types of business intelligence. I say “type of question” since it appears in many different forms: Sometimes it concerns products, but it can just as well concern any dimension, e.g. customer, supplier, sales person, etc. Further, here the question was about turnover, but it can just as well be e.g. number of support cases, or number of defect deliveries, etc.     It is called Pareto analysis or A... Show More

This type of question is common in all types of business intelligence. I say “type of question” since it appears in many different forms: Sometimes it concerns products, but it can just as well concern any dimension, e.g. customer, supplier, sales person, etc. Further, here the question was about turnover, but it can just as well be e.g. number of support cases, or number of defect deliveries, etc.

It is called Pareto analysis or ABC analysis and I have already written a blog post on this topic. However, in the previous post I only explained how to create a measure which showed the Pareto class. I never showed how to create a dimension based on a Pareto classification – simply because it wasn’t possible.

But now it is.

But first things first. The logic for a Pareto analysis is that you first sort the products according to their sales numbers, then accumulate the numbers, and finally calculate the accumulated measure as a percentage of the total. The products contributing to the first 80% are your best, your “A” products. The next 10% are your “B” products, and the last 10% are your “C” products. In the above graph, these classes are shown as colors on the bars.

The previous post shows how this can be done in a chart measure using the Above() function. However, if you use the same logic, but instead inside a sorted Aggr() function, you can achieve the same thing without relying on the chart sort order. The sorted Aggr() function is a fairly recent innovation, and you can read more about it here.

The sorting is needed to calculate the proper accumulated percentages, which will give you the Pareto classes. So if you want to classify your products, the new expression to use is

=Aggr(
If(Rangesum(Above(Sum({1} Sales)/Sum({1} total Sales),1,RowNo()))<0.8, 'A',
If(Rangesum(Above(Sum({1} Sales)/Sum({1} total Sales),1,RowNo()))<0.9, 'B',
'C')),
(Product,(=Sum({1} Sales),Desc))
)

The first parameter of the Aggr() – the nested If()-functions – is in principle the same as the measure in the previous post. Look there for an explanation.

The second parameter of the Aggr(), the inner dimension, contains the magic of the sorted Aggr():

(Product,(=Sum({1} Sales),Desc))

This structured parameter specifies that the field Product should be used as dimension, and its values should be sorted descending according to Sum({1} Sales). Note the equals sign. This is necessary if you want to sort by expression.

So the Products inside the Aggr() will be sorted descending, and for each Product the accumulated relative sales in percent will be calculated, which in turn is used to determine the Pareto classes.

The set analysis {1} is necessary if you want the classification to be independent of the made selection. Without it, the classification will change every time the selection changes. A perhaps better alternative is to use {\$<Product=>}. Then a selection in Product (or in the Pareto class itself) will not affect the classification, but all other selections will.

This expression can be used either as dimension in a chart, or in a list box. Below I have used the Pareto class as first dimension in a pivot table.

If you use this expression in a list box, you can directly select the Pareto class you want to look at.

The other measures in the pivot table are the exclusive and inclusive accumulated relative sales, respectively. I.e. the lower and upper bounds of the product sales share:

Exclusive accumulated relative sales (lower bound):

=Min(Aggr(

Rangesum(Above(Sum({1} Sales)/Sum({1} total Sales),1,RowNo())),
(Product,(=Sum({1} Sales),Desc))

))

Inclusive accumulated relative sales (upper bound):

=Max(Aggr(

Rangesum(Above(Sum({1} Sales)/Sum({1} total Sales),0,RowNo())),
(Product,(=Sum({1} Sales),Desc))

))

Good luck in creating your Pareto dimension!

HIC

Further reading related to this topic:

The sortable Aggr function is finally here!

Recipe for a Pareto Analysis

Recipe for an ABC Analysis

Show Less

#### Qlik Empowers Clinical Staff with Analytics

Qlik works with a broad range of organizations from manufacturers to retailers to the public sector, to help organizations harness the collective human intelligence of their staff, and to drive positive change. This means that whatever career direction you are considering, it's important to develop your analytical skills and to become familiar with widely used tools like Qlik.  Today we're going to look at the role that Qlik has plays in hea... Show More

Qlik works with a broad range of organizations from manufacturers to retailers to the public sector, to help organizations harness the collective human intelligence of their staff, and to drive positive change. This means that whatever career direction you are considering, it's important to develop your analytical skills and to become familiar with widely used tools like Qlik.

Today we're going to look at the role that Qlik has plays in health services to drive positive outcomes for both the patients and the healthcare organisations. Qlik works with various NHS trusts across the UK along with non-profit organisations in the U.S. like Touchstone Health Services. Productivity is a key area where analytics can provide insights and assist with improving performance. This has the benefit of reducing waiting times for patients, increasing the number of patients seen by clinicians, and increasing morale among staff who feel more empowered by the data available to them. You can read the full story on Touchstone Health Services and Qlik here:

https://upshotstories.com/stories/data-and-clinical-outcomes-how-qlik-is-empowering-clinical-staff-with-data

To prepare yourself for analytics in the world of work, whatever your chosen industry might be, visit qlik.com/academicprogram. Here you can sign up for the free Qlik Academic Program with access to our software, training resources, and even a qualification!

Show Less

#### qdt-components - React template

On the demo team we end up working with both the Viz API to create and embed native Qlik Sense charts in apps, as well as creating custom components powered by the Qlik Engine using enigma.js, and we do this in Angular, React, and plain html, as we try to demo all of the ways that Qlik can be used. So after my last blog post (Starter project for developing QAP-powered apps with React and enigma.js) we had an idea on the demo team: let's try to un... Show More

On the demo team we end up working with both the Viz API to create and embed native Qlik Sense charts in apps, as well as creating custom components powered by the Qlik Engine using enigma.js, and we do this in Angular, React, and plain html, as we try to demo all of the ways that Qlik can be used. So after my last blog post (Starter project for developing QAP-powered apps with React and enigma.js) we had an idea on the demo team: let's try to unify all of our different custom components and templates. So we've been hard at work accomplishing that.

You may have seen Yianni‌'s last blog post, qdt-components - A Components Library that can be used in simple Html, Angular 5 and React, introducing this effort. The goal is to have the qdt-components library include custom components powered by Qlik Engine, as well as a way to create and embed native Qlik Sense charts. Right now, the qdt-components library contains a few components, but we're not totally ready to start talking about all of them yet, so we're just sticking to the component that allows you to create and embed native Qlik Sense charts by interfacing with the Viz API.

The big addition since Yianni's post is that we've added a React template, so now we have an Angular 5 template, a plain html template, and a React template, all which load the qdt-components, which is pretty cool. This means that the components only need to be built once, but can be used in a project with almost any frontend stack. I say "almost" because in order to use the component that interfaces with the Viz API there's no getting around loading Angular 1.5 and RequireJS into the global namespace, which means they still have the chance to create conflicts. But you can choose not to use the component that interfaces with the Viz API if you don't have a need for native Qlik charts, and it will avoid loading all of the Capability API stuff, but if you choose to use it, you don't have to worry about writing any of the boilerplate you usually do when connecting to the Capability API.

Documentation, examples, and custom components are coming (and oh yea, we plan on using https://picassojs.com/), but that's the update for now. You can check out the qdt-components library and the templates here - Qlik Demo Team · GitHub‌. And demos of each of the 3 templates below

Simple html with qdt-components

Show Less

#### Windows Security Update - KB4056892 - Updated

Please note a new version of the post was created on 13 April 2018.Update January 25th 2018Introduction:Meltdown and Spectre are the names of two serious security flaws that has been found within computer processors. They could potentially allow hackers to steal sensitive data without users knowing.The fixes needed to protect against Meltdown and Spectre might have the unfortunate side effect of having significant performance impact on Windows an... Show More

Please note a new version of the post was created on 13 April 2018.

Update January 25th 2018

Introduction:

Meltdown and Spectre are the names of two serious security flaws that has been found within computer processors. They could potentially allow hackers to steal sensitive data without users knowing.

The fixes needed to protect against Meltdown and Spectre might have the unfortunate side effect of having significant performance impact on Windows and Linux operating systems.

What is Meltdown?

Meltdown is a security flaw that could allow malicious software to illegally access memory that belongs to the kernel, or another software process. It works by circumventing the memory barriers between applications run in user space and kernel space by an attack involving speculative execution. A branch misprediction is provoked in one of several ways, causing the CPU to speculatively execute an illegal code sequence. This is caught by the CPU after the branch is executed, and subsequently rolled back. However, its effect on the hardware cache is not rolled back, and measuring the response time of various accesses to the cache can pinpoint what data was stored in the memory of the victim process through the address space of the adversary.

The software fix involves separating the memory page tables of the user space and kernel space, which inevitably leads to a negative performance impact on communication between user level applications and the kernel.

What is Spectre?

Spectre is a security flaw that affects modern microprocessors that perform branch prediction. It can be used to trick otherwise error-free applications into giving up secret information by taking advantage of a delay in the time it may take the CPU to check the validity of a memory access call.

# Mitigation

The following table describes what needs to be done in Microsoft Windows environments to mitigate the Meltdown and Spectre security flaws.

 Security flaw Common Vulnerabilities and Exposures (CVE) ID Exploit name Public CVE name Windows changes needed Windows patches needed? BIOS patches needed? Spectre CVE-2017-5753 Variant 1 Bounds Check Bypass Recompile with a new compilerHardened browser to prevent exploit from JavaScript No No Spectre CVE-2017-5715 Variant 2 Branch Target Injection New CPU instructions that eliminate branch speculation No YesSEE NOTE (2) Meltdown CVE-2017-5754 Variant 3 Rogue Data Cache Load Isolate kernel and user mode page tables Yes, see (1) below.Patches: No

(1) The operating system patches have to be enabled in the Windows registry or they will not have any effect. See "Enabling protections on the server" here: https://support.microsoft.com/en-za/help/4072698/windows-server-guidance-to-protect-against-the-speculative-execution

How is Qlik software impacted?

Qlik products are built on top of underlying components such as Operating Systems (OS) and chipsets, therefore Qlik products will rely on the OS fixes for both Spectre and Meltdown to mitigate the security risks.

The Qlik Performance and Stability centre are in progress of testing both QlikView and Qlik Sense with operating systems and system BIOS patches that address the Meltdown & Spectre security flaws. Tests include measuring the load of concurrent users ranging from low to high scenarios. High load in this case is a continuously growing number of concurrent users (up to 300) triggering light calculations with minimum think time between the clicks. The users avoided selecting cached values. The complete bandwidth of the system was tested since the processor needed to calculate every result, which meant that a queue of clicks to serve was built up.

The following conclusions are based on the results of the ongoing tests with currently available patches. We are sharing our conclusions here in the spirt of openness and transparency and they may change as more results are gathered.

 Configuration Conclusion Qlik Sense on Windows A degrade of 4-20% in the response time and reload duration during typical conditions. The low and medium load scenarios are least affected.The high load scenarios, especially on four-socket machines, are impacted most with the Spectre patch. SEE NOTE (2) QlikView Server Results are similar to those for Qlik Sense. NPrinting No degrade for Qlik Sense.A degrade of around 10% for QlikView Server.

(2) NOTE Important note regarding the Spectre patch: (update 2018-01-22)

Intel has communicated new guidance regarding 'reboot issues and unpredictable system behavior' with the microcode included in the BIOS updates released to address Spectre (Variant 2), CVE-2017-5715.

https://newsroom.intel.com/news/root-cause-of-reboot-issue-identified-updated-guidance-for-customers-and-partners/

In response Dell is advising that all customers should not deploy the BIOS update for the Spectre (Variant 2) vulnerability at this time and have removed the impacted BIOS updates from their support pages.

“If you have already deployed the BIOS update, in order to avoid unpredictable system behavior, you can revert back to a previous BIOS version.

As a reminder, the Operating System patches are not impacted and still provide mitigation to Spectre (Variant 1) and Meltdown (Variant 3). The microcode update is only required for Spectre (Variant 2), CVE-2017-5715."

Qlik will be retesting when new patches are available and will update this support blog in due course

Product Versions tested:

• Qlik Sense November 2017
• QlikView 12.10 SR8
• Qlik NPrinting February 2018 Release Candidate

Relevant research papers for deep diving:

Information on vendor fixes:

Thank you for choosing Qlik!

Kind regards

Global Support Team

Show Less

#### Fiscal Year

A common situation in Business Intelligence is that an organization uses a financial year (fiscal year) different from the calendar year. Which fiscal year to use, varies between businesses and countries. [Wikipedia]A fiscal year other than the calendar year implies a number of additional requirements in the QlikView app: The most obvious is that the year used in all charts and reports must correspond to the fiscal year which runs over a differen... Show More

A common situation in Business Intelligence is that an organization uses a financial year (fiscal year) different from the calendar year. Which fiscal year to use, varies between businesses and countries. [Wikipedia]

A fiscal year other than the calendar year implies a number of additional requirements in the QlikView app: The most obvious is that the year used in all charts and reports must correspond to the fiscal year which runs over a different set of dates than the calendar year.

Further, the notation sometimes changes: You probably want to display years as ‘2012/2013’ instead of just the year number.

Also, other fields, e.g. Month and Week must be assigned to the fiscal year as well as the calendar year.

Finally, the sort order of field values changes in some cases. E.g. you want to sort the months using the first financial month as the first month: [Apr..Mar] instead of [Jan..Dec]. (Compare with the month order in the graph and the list box.)

There is a very simple way to achieve this in QlikView:  Just add the necessary fields in the master calendar and use these in all situations where you need a calendar field. There are many ways that this can be done, but my suggested solution is the following:

1. Create a variable that contains the month number of the first month of the fiscal year. Assuming that April is the first month of your fiscal year, this variable should get the value ‘4’.
2. Create numeric values of the necessary fields. Usually the number of the fiscal year is defined by its end, so (again using April as the first month) April 2013 belongs to the fiscal year ‘2014’.
3. Create dual values of the necessary fields.

The script for creating fiscal year and fiscal month then becomes:

Set vFM = 4 ;                                                          // First month of fiscal year

Calendar:
Load Dual(fYear-1 &'/'& fYear, fYear) as FYear,          // Dual fiscal year
Dual(Month, fMonth)                as FMonth,           // Dual fiscal month
*;
Load Year + If(Month>=\$(vFM), 1, 0) as fYear,           // Numeric fiscal year
Mod(Month-\$(vFM), 12)+1        as fMonth,          // Numeric fiscal month
*;
Month(Date)                            as Month,
…

Other fields, like week, day, etc. can also be created in a similar way.

A comment on the field naming: In this script I use lowercase ‘f’ as prefix for the numeric values and uppercase ‘F’ for the dual values. In real life you may want to just have the dual fields (no numeric duplicates) and name these differently, e.g. just ‘Year’ and ‘Month’. If you do, you must also rename the original calendar year and calendar month accordingly.

The bottom line is anyway that you can solve this problem just by adding a couple of lines in you master calendar. No set analysis is needed. And no complex chart expressions are needed.

Simplicity.

HIC

Show Less
• ##### Qlik Support Updates Blog

Qlik Sense may end up experiencing issues during an installation or an upgrade, even if you’ve already tested the same process in a different environment. Those problems can be time consuming and frustrating to resolve, so I am going to give you some tips on how to accomplish a successful install/upgrade from scratch, and how to troubleshoot an issue, should something go wrong. Here is what we will talk about Preparation and Best Practices Insta... Show More

Qlik Sense may end up experiencing issues during an installation or an upgrade, even if you’ve already tested the same process in a different environment. Those problems can be time consuming and frustrating to resolve, so I am going to give you some tips on how to accomplish a successful install/upgrade from scratch, and how to troubleshoot an issue, should something go wrong.

Here is what we will talk about

1. Preparation and Best Practices
2. Install or Upgrade – How to do it?
3. Troubleshooting

Preparation and Best Practices

To prevent any unpleasant surprises, an installation or an upgrade requires a bit of preparation.

This will ensure that the installer completes on its first try and that you can access the platform afterwards. It also allows for a better understanding and control of your system.

Below are a few key points to check before installing or upgrading Qlik Sense:

• Make sure your environment follows at least the minimum requirements for the version of Qlik Sense you wish to install or upgrade to. This includes Operating System version, hardware requirements, disk space, type of storage, ports, etc. This information is available on qlik.com. (make sure you select the right version top left of the screen)
• If you are running an Antivirus or any software scanning your machine, be sure to follow our best practice
• If possible, try to get a dedicated machine to ensure no other software will fight for ports, resources, files…
• If using a virtual machine, be sure to follow our best practices.
• If using a physical server, be sure to have a look at our Server hardware whitelist.
• It’s important for you to know the service account credential going to run the Qlik Sense Services. This should be done by an administrator. If it is not, see the instructions for how to carry out an installation without administrative permissions.

• If you are using other Qlik Products like Qlik NPrinting, Qlik GeoAnalytics, Qlik WebConnector, etc. it’s crucial to verify the Qlik Sense version you are upgrading to is compatible with these products.
• Test your upgrade in a test environment first. This will help you to understand the process. Then let have a user test the functional part of your platform (apps, feature, etc) in the new version.

In addition, I can only encourage you to take a server backup or a virtual machine snapshot.

• You need to know the Superuser password of your Qlik Sense Repository Database (user is postgres). This should be the same password used during the database backup. If needed, it is possible to reset the PostgreSQL password.

Install or Upgrade – How do to it?

Once you have gathered all information and prepared your installation/upgrade, it’s time to proceed.

I‘m not able to give you better explanation than the steps provided on help.qlik.com, so I will attach the links below.

But, be sure to select the correct version top left of the window:

For a new installation

Troubleshooting

Now the most interesting part: What to do if your installation/upgrade fails?

Well, first we need to find out the root cause and there is no better place for that than the logs.

Luckily, the installation and upgrade logs are stored in the same place which is the user temporary folder running the Qlik Sense installer. (By default: C:\Users\<Username>\AppData\Local\Temp)

Below is an example of a failed upgrade. Let’s try to understand what the files are for.

We can clearly see by sorting the files by Date modified that the installer failed on the service dispatcher and then started to rollback all the services that went through previously.

So, the log is helping us to find the root cause. In this case, it is the Qlik Sense Dispatcher.

Now that we know which logs we should look at, I will tell you what you should search for because these files can become very large.

Basically, if you search for “Return value 3” or “error code 1603” you will find the cause of the failed installation/upgrade.

Back to our example, here is what you will see:

In this case, the error is pretty explicit. Basically, it looks like an Antivirus blocked one of the PowerShell script to execute properly.

But all the above is provided as a guideline to find out the root cause. There will probably be error messages in those logs that are less explicit and in this case,  I would highly recommend you to search this exact error message in our knowledge base. #QlikSupport  is documenting every error messages identified during case’s investigation, so you will likely find it there.

Help Us Improve

Finally, I want to highlight that just before launching your installation/upgrade, I recommend ticking the box Help Us Improve. This will help us to potentially identify patterns in failure and improve our installer by making it more robust.

Thank you for reading my blog post and I really hope it helps you prepare for your next installation.

I’ll be watching for your questions, feedback or suggestions so please comment!

Show Less

#### Introducing the Qlik Insight Bot™ - Product Tour (video)

Hey guys thanks for taking the time to watch these videos on our new Qlik Insight Bot™. Since we just announced the general availability of the Qlik Insight Bot - I am happy to share this quick product tour that will walk you through a brief introduction on some of the various operations and capabilities available.      In summary, the Qlik Insight Bot™ offers AI-powered conversational analytics fo... Show More

Hey guys thanks for taking the time to watch these videos on our new Qlik Insight Bot™. Since we just announced the general availability of the Qlik Insight Bot - I am happy to share this quick product tour that will walk you through a brief introduction on some of the various operations and capabilities available.

In summary, the Qlik Insight Bot™ offers AI-powered conversational analytics for your Qlik Sense environment.  We have always been taught that working with analytics means interacting visually with dashboards and charts or data visualizations. - But, what if you could just talk to your analytics directly and get the answers you need, instantly? That's where the Qlik Insight Bot™ comes in; integrating with Qlik Sense® and through popular messaging and collaboration tools that you work with everyday. (Skype, Slack, Microsoft Teams).  The Qlik Insight Bot™ provides access to more people so they can make data-driven decisions, simply by ... well, having a conversation.  The Qlik Insight Bot™ engages users in meaningful dialog, inviting casual users not just to ask questions, but to discover and explore a depth of insight behind answers.

Watch this brief promo to quickly see it in action and learn more:

Watch the Product Tour to get some deeper knowledge on how it works:

Regards,
Qlik

Show Less

#### Behind the scenes with bracketchallenge.qlik.com and Qlik Core

Introduction Most of you are probably aware and have already participated in the \$100K competition, that Qlik has created for the College basketball tournament.  My colleague Arturo has a nice introduction on what the app is and how to get involved @ https://community.qlik.com/t5/Qlik-Design-Blog/Win-100K-The-Bracket-madness-has-started/ba-p/1558557 What very few are aware of, is how we designed the entire solution and why we picked eac... Show More

Introduction

Most of you are probably aware and have already participated in the \$100K competition, that Qlik has created for the College basketball tournament.

My colleague Arturo has a nice introduction on what the app is and how to get involved @ https://community.qlik.com/t5/Qlik-Design-Blog/Win-100K-The-Bracket-madness-has-started/ba-p/1558557

What very few are aware of, is how we designed the entire solution and why we picked each component.

The first and most important decision was about which Qlik product to use. We've decided on using Qlik Core, the Native cloud analytics development platform, because we needed to successfully handle thousands of concurrent users as fast as possible, in an independent cloud solution. The beauty of Qlik Core is that we take advantage of just the Qlik Associative Engine and we decide on the front end how to handle the data that comes from it. This makes the app ultra-fast since it is opening one WebSocket connection per user session and the data transferred are just simple json objects!

The second part we were worried about, was concurrency which leads to scalability. We needed to be able to handle thousands of concurrent users and if the server was reaching a certain percentage of Ram and Cpu, spin another one and route the new requests to the new server. That is where Qlik's awesome core-scaling repository came to be our key and the center of our solution.

The Core-scaling Solution

This Github repository was the beginning and the foundation of the entire solution. I used Kubernetes as our container orchestrator and started with the main containers that Qlikhas included in the public repo, Grafana, Prometheus, Custom Metrics Api, Nginx, Qix Session, Mira, License Service and the Qlik Engine. This repository is based on Google cloud, but I have made it work on Azure and AWS without any issues.

Now, each of these play a crucial role into the cluster and they are all needed.

Custom Metrics Api is an Api service that is used to send metrics from various Kubernetes services to Prometheus. It is mostly required on the scaling part of the engines which is based on the average sessions.

Prometheus is a service monitoring system that collects metrics from configured targets at given intervals. In our solution, we collect metrics from all of the servers so we can monitor performance and alert any issues, infrastructure or software related.

Grafana is a dashboard for visual representations of the metrics that we are collecting. In the repo you will find a custom json dashboard for the engines. You can view the resources utilized, total current sessions vs sessions per engine etc. I have included one more dashboard to monitor the health of the entire cluster, like the total Ram and Cpu used of all the services and totals for each one.

Nginx Ingress controller is a reverse proxy that handles all the security and traffic flow to the cluster. I will explain later a common user flow to the cluster.

Qix Session handles the placement based on custom metrics and set up of a session.

Mira is a Qlik Associative Engine discovery service for containerized environments. Mira finds the available Qlik Associative Engine instances and the properties of each instance.

Qlik Associative Engine is the central service in the Qlik Core stack. It is designed specifically for interactive, free-form exploration and analysis. It fully combines large numbers of data sources and indexes them to find the possible associations, without leaving any data behind.

Once I had the initial repo, I created a cluster in Azure and I started deploying. You can do the same by following this guide to create the cluster https://community.qlik.com/t5/Qlik-Design-Blog/Azure-Kubernetes-Services-and-Qlik-Core/ba-p/1515128.

There are 2 ways of deploying to any kubernetes cluster, Microsoft, Amazon or Google. Either by following the instruction in core-scaling repository https://github.com/qlik-oss/core-scaling and using kubectl commands to deploy the yaml files, or by using helm charts which I have created in https://github.com/yianni-ververis/core-scaling-helm repository.

Customizing the Solution

OK, we have Qlik Core and the Grafana dashboard where we can view the user sessions and they are all deployed in the Kubernetes cluster but what about the rest of the application? We need to host the mashups, get statistical data for each basketball game, handle user authentications and store users, their profiles and their brackets.

The first part with the websites was the easiest one. We’ve just created one docker image for bracketchallenge and one for bracketguru. We bound the DNSs to the cluster and let Nginx Ingress controller route the traffic based on the domain. So, if you typed in the URL bracketchallenge.qlik.com you will be redirected internally to the qdt-bracketchallenge server and if you typed bracketguru.qlik.com, you will be redirected to the qdt-bracketguru server.

Now that we got the websites’ physical location out of the way, the next question is how are going to handle authentication, with focus on security and data integrity. We created a Nodejs API server that handles the user authentication, creates sessions, checks and writes into the database the user data like profile and the desired bracket. It is also used to handle the authentication for stats.com and feed the desired stats to Qlik Sense. Then, created another docker image and pulled it in our Kubernetes cluster.

Each server is sending data to the Custom Metrics Api server which then are stored in Prometheus. Then we use Grafana to view all the stats on the Qlik Associative Engine like how many current sessions we have open, what is the distribution on the running Associative Engines, how much memory and Cpu is consumed on each one etc. These sessions are critical on determining how many Associative Engines to run. Kubernetes has a controller called HPA (Horizontal Pod Autoscaler). This, based on some metrics, in our case the Sessions, decides when to spin another pod / engine. We set the Qlik Associative Engines not to accept more than 3000 sessions and when we are averaging 1750 sessions per engine, then we need the HPA to start another engine and start sending new sessions there. You need to fine tune those settings to match your qvfs and what works better with the Ram usage. You can max the HPA to how ever many pods your cluster can take. If you combine this with a Kubernetes Cluster Autoscaler, you can have infinite amount of sessions! The only limit would be of course your budget.

Having all of the puzzle pieces together, let’s see what a user flow will be like. First you will type the url to bracketchallenge.qlik.com. Nginx will route your request to the bracketchallenge server where it will send you back the authentication page. From there, login or create a user, the mashup will send, in both scenarios, your request to the Api Server, which will validate you against the database and issue a session token. Once the React webpage gets your session and validates it for its integrity, you are guided to the bracket page. There, a new request is sent to the cluster and more specifically to the Nginx Ingress controller where it will redirect it to the Qix Session server and initiate a Websocket connection with a new session. Once we have established a session, we go to Mira to see our available Associative Engines and place our connection to the most appropriate one. I need to make a side note here, that Mira sees and utilizes the availability of the Qlik Associative Engines, only ifs they have been cleared by the License Service and that the license provided in the cluster, has not expired or the number of tokens have not been completely consumed. Once the Websocket connection has established, enigma.js opens the app and gets a hypercube with the available teams.

Conclusion

Qlik as a leader in the BI world, has many products that are here to transform your business. Bracketchallenge.qlik.com is one example that utilizes the latest platform, Qlik Core. Qlik Core is taking the Qlik Associative Engine into your cloud and making it part of your business infrastructure. Even though this solution is on AWS, you can still use it on Microsoft Azure or Google Cloud. It does not have to be on Kubernetes either. Qlik OSS has examples for Docker swarm and Nomad https://core.qlik.com/tutorials/orchestration/.

This journey was a tremendous experience for me as a developer and I gained a lot. I hope you enjoyed this article as much as I did and if you have any questions, feel free to drop me a note. If you have not done so, please join our community of developers in qlik-branch.slack.com and subscribe to the #qlik-core channel.

Yianni

Show Less

#### Use the Klout Connector? Read This

Hi Qlik Web Connector users,If you are a Klout user you should be aware that this platform is being shut down as of today, 25th of May 2018 - see Klout Shuts Down.   Therefore our Klout Web Connector will no longer work and it will be removed from our connector bundle from June onwards.  If you continue to try to use the Klout Connector you will get an error - this is not a Qlik issue and you can prevent the problem by removing Klo... Show More

Hi Qlik Web Connector users,

If you are a Klout user you should be aware that this platform is being shut down as of today, 25th of May 2018 - see Klout Shuts Down.   Therefore our Klout Web Connector will no longer work and it will be removed from our connector bundle from June onwards.  If you continue to try to use the Klout Connector you will get an error - this is not a Qlik issue and you can prevent the problem by removing Klout data loads and connections.   If you don't use the Klout Connector you will be unaffected.

Thank you for choosing Qlik software, if you have any questions please don't hesitate to contact Support.

Kind regards

Global Support Team

Show Less

#### Technical Preview: Qlik Sense April 2019 & Qlik NPrinting April 2019

Qlik is pleased to invite Customers and Partners to participate in the Technical Preview program for the April 2019 release of Qlik Sense and Qlik NPrinting.  Please go to the respective board for preview details.  Qlik Sense - Server, Desktop, Mobile Qlik NPrinting

#### Top Ten Community Enhancements of March 2019

Hello Community Members! The Qlik Community team has been hard at work making a number of enhancements to the community's user interface this month to improve our members' user experience. Here are our top ten enhancements of the last month.   1. Home Page Filters The Recent Discussions feed on the Qlik Community Home Page now has a boards filter so that you can choose which boards you would like to see posts from, all in one place. To use ... Show More

Hello Community Members!

The Qlik Community team has been hard at work making a number of enhancements to the community's user interface this month to improve our members' user experience. Here are our top ten enhancements of the last month.

The Recent Discussions feed on the Qlik Community Home Page now has a boards filter so that you can choose which boards you would like to see posts from, all in one place.

To use it, click on Select Board(s) to open a drop-down menu of community discussion boards. Check the box next to the ones you want to see posts from, and then click the Go button. The Recent Discussions feed will update, and the Recent, Unanswered, Unsolved, and Solved tabs will update to show posts of those types from the selected boards.

To reset the selected boards back to all, reopen the drop-down menu and click the Clear button.

2. Profile Hovercard

You can now hover of a member's username to see a nifty hovercard with info about that user, including the number of Posts, Likes, Solutions provided, and more.

We've added a callout for the Subscribe button to let members know you can subscribe to forums or boards that you'd like to get updates on.

Once subscribed, the callout disappears, and the Subscribe button turns into an Unsubscribe button which you can use to remove the subscription.

4. Label Subscriptions

On forum pages, you can click on a Label listed in the Top Labels component to display a list of posts in that forum that have that label. You can subscribe to that particular label by clicking Subscribe in the green banner on that page.

5. Qlik Events

Qlik Events is now on the top level of the navigation menu, and contains separate pages for Events & Webinars and Meetups

Tip: You can now subscribe to the Qlik Events page to get notifications when new Events & Webinars are added, and many webinars are available On Demand after the live events have taken place.

6. Nested Replies Indented on Discussion Threads

On discussion threads, replies to replies now indent successively. A new reply to the original post will be less indented than a reply to a reply.

7. Document Filters

Document boards now have a Most Liked tab to sort documents by the number of Likes, and we've added the Select Filters drop-down for Most Popular and Most Viewed sorting like you've seen on discussion boards.

We've fixed a bug that was causing document comments to appear misaligned. They now appear aligned as expected.

9. Save Blog as Draft

For members who are blog authors, there is now a button to save a blog post as a draft to be retrieved later.Tip: To access your drafts (regardless of content type), go to My Profile and scroll down to the Drafts section. There you can open your draft to continue editing and publish, or you can discard the draft from here.

10. MVP & Luminary Combined Rank Icon

For those members who are Qlik Community MVPs as well as Qlik Luminaries, we've added a new rank icon to specially recognize their membership in both groups. Congratulations to our MVPs & Luminaries!

There you have it! Let us know which of these updates you like the most by commenting below.

Best regards,

Jeremy and the Qlik Community team

Show Less

#### Use Aggregation Functions!

On the discussion forum, I often see people posting questions around expressions that don’t work. When looking at the descriptions, I usually find that the reason is that the expressions lack aggregation functions. So, here is a suggestion... Always use an aggregation function in your expression. The reason is that a field reference in an expression always means an array of values. Which in turn means that you must enclose it in an aggregation fu... Show More

On the discussion forum, I often see people posting questions around expressions that don’t work. When looking at the descriptions, I usually find that the reason is that the expressions lack aggregation functions. So, here is a suggestion...

Always use an aggregation function in your expression.

The reason is that a field reference in an expression always means an array of values. Which in turn means that you must enclose it in an aggregation function to make it collapse into one value:

OrderDate             An array of values

Max(OrderDate)     A single value

If you don't use an aggregation function, QlikView will use the Only() function. Hence, if the field reference returns several values, QlikView will interpret it as NULL, and the expression will not be evaluated the way you want it to.

Example 1: Use of the If() function:

If() functions are often used for conditional aggregations:

If( OrderDate >= vReferenceDate, Sum(Amount) )

At first glance, this expression may look correct: For dates after a reference date, the field Amount should be summed. Right?

Wrong.

OrderDate is a naked field reference: It does not have an aggregation function. Hence, it is an array, possibly with several values, and if so, evaluates to NULL. If you are lucky, there is only one date per dimensional value in your chart, and the expression will calculate fine. However, QlikView will probably not be able to calculate the expression for the subtotals in the chart, since there for those exists several dates.

A correct expression that always works should use a Min() or some other aggregation function in the first parameter of the If() function:

If( Min(OrderDate) >= vReferenceDate, Sum(Amount) )

Or, alternatively, the If() function should be put inside the Sum() function:

Sum( If(OrderDate >= vReferenceDate, Amount) )

In the first of the two expressions, the If() function will be evaluated once per dimensional value; in the second once per row in the raw data. The results are slightly different, but both return an answer, as opposed to the original expression. The picture below shows the difference between the expressions, using 2013-02-01 as reference date.

Example 2: Sort by expression:

The expression used to sort the dimensional values in a chart is also an aggregation. Often you don’t think about this since you choose an expression that returns just one value per dimensional value, and then a naked field reference works fine.

But sometimes this still doesn't work…

For example, say that you want to show support cases in a CRM system. You create a chart with the support case as dimension and some measure as expression. Of course you want to sort the support cases chronologically, so you use "Sort by Expression" and as expression you choose

[Opening Date]

This will work in most cases. However, some CRM systems allow you to re-open a support case, hence assigning two opening dates to one single support case.  For these cases, the above expression will not work.

Instead, you should always ask yourself which function to use, should there be two values. The answer is usually Sum(), Avg(), Min() or Max(). In the above case, you should use

Min([Opening Date]) , or

Max([Opening Date])

depending on whether you want to use the first or last date.

Bottom line: Use aggregation functions, not just in your chart measures, but also in sort expressions, labels, show conditions, calculation conditions, text boxes, sheet names and searches.

HIC

Further reading related to this topic:

It’s all Aggregations

Aggregations and Function Classes

Show Less

#### "Stealing" the Visualization Bundle to be used on an older release

Hey guys - a few valued Qlik Community members and contributors  ( @millerhm  @juraj_misina  ) brought to my attention an interesting topic after we released the February 2019 release of Qlik Sense. What if I want those exciting, sexy, awesome, new visualizations I just saw....BUT I am not ready to upgrade to February 2019?  Since we don't offer the Visualization Bundle as a separate installation package, ... Show More

Hey guys - a few valued Qlik Community members and contributors  ( @millerhm  @juraj_misina  ) brought to my attention an interesting topic after we released the February 2019 release of Qlik Sense.

What if I want those exciting, sexy, awesome, new visualizations I just saw....BUT I am not ready to upgrade to February 2019?

Since we don't offer the Visualization Bundle as a separate installation package,  I guess you could find them individually in the Qlik Branch Garden - as I originally suggested, but @millerhm pointed out that they wanted the "certified extensions" that were part of the February 2019 release. That's when @juraj_misina made mention of a simple work-around involving "stealing them"  from the February 2019 release of Qlik Sense Desktop. I thought this was a great topic to produce a quick video on to show others whom might not be familiar with how that process might look.

Watch this quick video to see how I "stole" the visualization bundle from the February 2019 release and added it to my Qlik Sense Enterprise November 2018 release.

Thanks @millerhm and @juraj_misina for your contribution!

Note: I cannot attach the .zip file here at this time. It is possible if you have any issues with these extensions while being used with an older release, our support team may ask you to reproduce the issue within the February 2019 release, so please be aware.

Thanks,

Mike Tarallo

Qlik

Show Less

#### Earn a Qlik Sense Qualification - New Version Now Available!

The Qlik Academic Program is excited to announce that we have launched a NEW VERSION of the Qlik Sense Qualification Exam which covers the February 2019 Qlik Sense release! Since the launch of our first Qualification Exam, many of our professors and students have successfully earned Qualification badges, have you? What is the Qlik Sense Qualification Exam?  After learning skills in the Qlik Continuous Classroom (QCC), and applying ... Show More

The Qlik Academic Program is excited to announce that we have launched a NEW VERSION of the Qlik Sense Qualification Exam which covers the February 2019 Qlik Sense release! Since the launch of our first Qualification Exam, many of our professors and students have successfully earned Qualification badges, have you?

What is the Qlik Sense Qualification Exam?

After learning skills in the Qlik Continuous Classroom (QCC), and applying your skills using Qlik products, you can test your knowledge to earn a Qlik Sense Qualification!  Two qualifications are currently available: Business Analyst Qualification and Data Architect Qualification.  After passing a two-part exam, you will receive a printable certificate and a digital badge to share on your resume, LinkedIn, and other social sites!

Where do I take the exam?

The exam and all of our resources are available in the QCC! Simply log into the QCC using your Qlik Account username and select “Academic Program” on the menu at the top of the QCC homepage.

If you are currently an active member of the Academic Program, you automatically have access to the new qualification exam.  If you are not a member of the program and you are a professor or student we recommend you apply today by visiting http://www.qlik.com/us/company/academic-program.

Show Less

#### The new Dashboard bundle

The Dashboard bundle contains six of the most popular extensions available in Qlik Branch (Garden). Button for navigation: it’s a very handy piece that let users to add buttons that trigger selection actions and/or navigation actions. Users can use it for simple navigation shortcuts, like navigating to next page or they could use it for more advanced actions, such as selection actions. A user could use one or multiple actions on c... Show More

The Dashboard bundle contains six of the most popular extensions available in Qlik Branch (Garden).

Button for navigation: it’s a very handy piece that let users to add buttons that trigger selection actions and/or navigation actions. Users can use it for simple navigation shortcuts, like navigating to next page or they could use it for more advanced actions, such as selection actions.

A user could use one or multiple actions on click making the button a very attractive tool to create complex workflows within an app. This extension is commonly used to set variables values.

Date range picker: this nicely finished date picker allows users to quickly and easily select dates and ranges. It’s very simple to configure, a user need to specify what data field the Data range picker will be displaying and single date or interval. The extension let users to define advanced options such as min, max, and/or start date.

On-Demand reporting: generation of Qlik NPrinting reports is now possible from inside apps. This extension will display a button that will launch the execution of a Qlik NPrinting report. Simply add a NPrinting server path, pick an app, the report and the preferred export format.

Show/hide container: it’s a placeholder for master items. This extension let users to decide when to show or hide each one of the elements that are contained in the object. To get the show/hide conditions to work users typically need an action on a second object.

For example, it’s very common to use this extension in conjunction with the “Button for navigation” extension that comes in the bundle. The Button extension triggers an action that will make a chart show and other to hide.

Another use example could be based on selection actions. Let’s say we have two fields, product categories (5) and product (200) and we are analyzing sales numbers, we want to display sales date by category as a bar chart and when a single category is selected we want the chart to display the products sales as a tree map. We could create both charts add them to the master library and then define the show/hide conditions when including  the charts in the extension.

Tabbed container: like the Show/hide container, the Tabbed container can hold multiple master items. This time to navigate from on item to another there’s a pre-built tab system, so there’s no need for a second element. Users could create multiple views of the same data, different objects, or as in the screenshot below to add a long description that helps users’ comprehension of the displayed chart.

https://help.qlik.com/en-US/sense/November2018/Subsystems/Hub/Content/Sense_Hub/Visualizations/DashboardBundle/dashboard-bundle.htm

Hope you like it. AMZ

Show Less

#### The As-Of Table

Last week I wrote about how the Above() function can be used for calculating rolling averages and other accumulations. There is however also an alternative method for doing the same thing:   The As-Of table.   When you use the Above() function, you fetch a number from other rows in a chart or Aggr() table. The As-Of table is slightly different in this respect: It is not a transient table created by an object or an expression – instead i... Show More

Last week I wrote about how the Above() function can be used for calculating rolling averages and other accumulations. There is however also an alternative method for doing the same thing:

The As-Of table.

When you use the Above() function, you fetch a number from other rows in a chart or Aggr() table. The As-Of table is slightly different in this respect: It is not a transient table created by an object or an expression – instead it is a real table in the data model.

The idea is to create a secondary month field – the AsOfMonth - that links to multiple real months.

In the example above, you can see that ‘2015 Oct’ links to several preceding months, and each Month in turn links to several rows in a fact table. This means that a specific transaction will be linked to several AsOfMonths.

In the data model, the As-Of table should appear as a separate calendar table that links to the existing primary calendar table:

One way to create this table is the following:

First, make sure that you in your master calendar have a field “Month” that is defined as the first date of the month, e.g.

Date(MonthStart(Date),'YYYY MMM') as Month,

Then add the following lines at the end of the script:

// ======== Create a list of distinct Months ========
tmpAsOfCalendar:
Resident [Master Calendar] ;

// ======== Cartesian product with itself ========
Join (tmpAsOfCalendar)
Resident tmpAsOfCalendar ;

[As-Of Calendar]:
AsOfMonth,
Round((AsOfMonth-Month)*12/365.2425) as MonthDiff,
Year(AsOfMonth)-Year(Month) as YearDiff
Resident tmpAsOfCalendar
Where AsOfMonth >= Month;

Drop Table tmpAsOfCalendar;

Once this table has been created, you can use the AsOfMonth as dimension in charts where you want rolling averages and accumulations.

If you as measure use

Sum({\$<YearDiff={0}>} Sales)

you will get a yearly accumulation – year-to-date up until the day of the script run.

Sum({\$<MonthDiff={"<6"}>} Sales) / Count(distinct {\$<MonthDiff={"<6"}>} Month)

you will get a 6-month rolling average:

And finally, if you use

Sum({\$<MonthDiff={0}>} Sales)

You will get the real, non-accumulated numbers.

I have made the Set Analysis expressions based on two fields: YearDiff and MonthDiff. However, for clarity it could be a good idea to add flags in the As-Of table, so that the Set Analysis expressions become even simpler, e.g.

If(MonthDiff=0,1,0) as IsSameMonth,
If(YearDiff=0,1,0) as IsSameYear,
If(MonthDiff<6,1,0) as IsRolling6,

Summary: The As-Of table is a good way to calculate rolling averages and accumulations.

HIC

Further reading related to this topic:

The Above Function

Accumulations

Calculating rolling n-period totals, averages or other aggregations

Show Less

#### Qlik Sense Accessibility

Hey Guys - this particular post may not be relevant to everyone, yet it is an integral part of making sure that a software's capabilities can be used by those who have impairments. With the release of Qlik Sense June 2018, we have added some new accessibility conformance features that comply with WCAG 2.0 standards.  To learn how we are making Qlik Sense more accessible to everyone, please check out this brief video below. Please let us know... Show More

Hey Guys - this particular post may not be relevant to everyone, yet it is an integral part of making sure that a software's capabilities can be used by those who have impairments. With the release of Qlik Sense June 2018, we have added some new accessibility conformance features that comply with WCAG 2.0 standards.  To learn how we are making Qlik Sense more accessible to everyone, please check out this brief video below. Please let us know what you think and post any question, I'll be happy to address them.

Qlik Sense Accessibility

Resources:

Regards,

Qlik

Show Less

#### The need for data literacy in the mainstream curriculum

As the volume of data available to us as individuals and businesses continues to explode, there is a growing demand for data literacy skills- the ability to read, work with, analyse and argue with data. Currently this demand is not being met and we are in a state of illiteracy. Just one-fifth of 16-24 year olds feel confident in reading and using data, and they are not alone. Only one in four business decision makers deem themselves to be data li... Show More

As the volume of data available to us as individuals and businesses continues to explode, there is a growing demand for data literacy skills- the ability to read, work with, analyse and argue with data. Currently this demand is not being met and we are in a state of illiteracy. Just one-fifth of 16-24 year olds feel confident in reading and using data, and they are not alone. Only one in four business decision makers deem themselves to be data literate, and under one-third of C-level executives. IDC forecasts a ten-fold increase in worldwide data by 2025, so the need for these skills will continue to grow.

So what can we do to bridge this skills gap? As we enter the Fourth Industrial Revolution, businesses will need to harness the power of their data to meet their full potential. So schools and universities have a major part to play in empowering their students to succeed in this new era. Curriculums must align to the new skills requirements, so that students are fully prepared for the expectations they will face in the modern day workplace.

At Qlik we are firm believers in the need for data literacy, which is why we launched the Data Literacy Project and the Qlik Academic Program. The Academic Program is open to students and academics at any accredited University globally. The aim of the program is to improve student data literacy and employability by providing free Qlik software and training resources. If you are a University student or academic interested in joining this free program, you can sign up here: https://www.qlik.com/academicprogram

Show Less

#### Finding, Installing, and Using Qlik Sense Visualization Extensions

Visualization extensions allow you to easily create charts in Qlik Sense other than those included out of the box. The Qlik developer community shares the visualization extensions they have created on Qlik Branch (along with some other really neat stuff!). Let’s step through installing and using the Qlik Sense visualization extension that allowed me to easily create the chart pictured here. Step 1 – Download Extension from Qlik BranchI will be in... Show More

Visualization extensions allow you to easily create charts in Qlik Sense other than those included out of the box. The Qlik developer community shares the visualization extensions they have created on Qlik Branch (along with some other really neat stuff!).

Let’s step through installing and using the Qlik Sense visualization extension that allowed me to easily create the chart pictured here.

I will be installing the “deltaViz self service dashboard,” located at http://branch.qlik.com/projects/showthread.php?331-deltaViz-self-service-dashboard.

Step 2a – Installing Extension into Qlik Sense Server

Now that the extension has been downloaded, it needs to be installed into Qlik Sense.  Go to your QMC and, in the navigation menu on the left, under “Manage Resources,” click “Extensions.” Then, in the action bar at the bottom of the screen, click “Import.” Click “Choose File” in the popup and navigate to the folder that was downloaded in step 1, select it, then click “Import.”

Step 2b – Installing Extension into Qlik Sense Desktop

Find the .zip file that was downloaded, and unzip it. Open the unzipped folder to find another folder inside. Copy that folder and navigate to documents/qlik/sense/extensions and paste the folder there.

Step 3 – Using the Extension

Open Qlik Sense Desktop, and open the “Executive Dashboard” demo app that comes preinstalled with all Qlik Sense Desktop installations. Create a new sheet, open it, and click edit. A new chart titled “deltaViz” should now be in the list of charts on the left. Drag the “deltaViz” chart onto the sheet. Add the dimension “Account”, add the measure “CY Sales” as the first measure, and add the measure “LY Sales” as the last measure. You should now see the extension visualization!

If you’re seeing something similar to this, then it’s working! Check out Qlik Branch for more cool visualization extensions!

To find the Qlik Sense visualization extensions available on Qlik Branch, navigate to http://branch.qlik.com/, click on “Browse Projects,” and then in the side navigation click “Visualization Extensions” under “Qlik Sense Projects,” or you can navigate directly to  http://branch.qlik.com/projects/forumdisplay.php?22-Visualization-Extensions.

Show Less