In today’s data-driven economy, analytics platforms aren’t just about dashboards — they’re about enabling smarter, faster decisions that fuel real business growth with ROI. Choosing between Qlik Sense (on-premise) and Qlik Cloud (cloud-native) isn’t simply a technical debate — it’s about how your organization can maximize ROI from data.
At Arc Analytics, we help businesses navigate these decisions daily. This guide breaks down the strengths of both Qlik options, showcases where Qlik Cloud creates new opportunities, and explains how a hybrid approach might unlock the best of both worlds.
The Core Difference: On-Premise Control vs. Cloud Agility
Qlik Sense (On-Premise): Best suited for organizations with strict security, compliance, or legacy systems. You retain full control over infrastructure while enjoying Qlik’s powerful associative data engine.
Qlik Cloud (Cloud-Native): A flexible, continuously evolving platform that delivers scalability, accessibility, and advanced analytics. Updates roll out automatically, reducing IT overhead and giving teams instant access to new features.
This core choice — control vs agility — frames today’s analytics strategies.
Why Businesses are Moving to Qlik Cloud
Qlik Cloud isn’t just Qlik Sense in the cloud. It’s a next-generation platform designed to enhance ROI and reduce friction in just about every phase of analytics.
🚨 Proactive Insights with Qlik Alerting
Set real-time, data-driven alerts to act the moment thresholds are crossed or anomalies appear.
📊 Advanced Qlik Reporting Suite
Automated, polished, and customizable reports that ensure insights are delivered to the right people, exactly when they need them.
🔄 Drag-and-Drop Data Flows
Reduce IT bottlenecks with visual data preparation for analysts and business users — no heavy scripting required.
👥 Seamless Collaboration
Enable true real-time co-authoring and dashboard sharing across teams, locations, and devices.
📈 Elastic Scalability
Scale instantly to meet spikes in data volume or user demand. No more waiting on hardware expansions.
🔒 Enterprise-Grade Security
Far from being a risk, Qlik Cloud meets rigorous security standards, often exceeding what smaller enterprise IT setups can provide.
🤖 AI + Machine Learning Insights
Go beyond dashboards with AI-powered predictions and ML-driven insights.
🌍 Broad Data Connectivity
Unify cloud and on-premise sources into one analytics environment.
Unlocking ROI with Automation, Qlik Answers, and Qlik Predict
One of the most transformative ROI drivers in Qlik Cloud is the ability to automate and modernize how users interact with data:
Qlik Automation connects processes, apps, and triggers, removing manual tasks from your team’s workload.
Qlik Answers lets users ask questions in natural language and get instant, contextual insights — expanding analytics adoption to the entire workforce.
Qlik Predict leverages machine learning to forecast trends and give businesses predictive power, not just reactive dashboards.
These SaaS-native tools go far beyond cost savings — they unlock entirely new value streams, driving adoption, speeding decisions, and creating competitive differentiation.
Migrating from Qlik Sense to Qlik Cloud can be daunting without the right expertise. This is where Arc Analytics’ Qlik Migration Services give you a competitive edge.
We specialize in:
Ensuring zero downtime migration.
Rebuilding complex Qlik apps in the cloud for performance gains.
Training teams for success in Qlik Cloud environments.
Notably, Qlik itself recently launched the Qlik Sense to Qlik Cloud Migration Tool (May 2025), giving organizations an official, streamlined path to migrate apps, data connections, and user roles. We combine this tool with our strategic approach for the smoothest possible transition.
Hybrid Approaches: Best of Both Worlds
For many enterprises, the smartest path isn’t choosing one — it’s choosing both.
Keep sensitive workloads in Qlik Sense on-premise for compliance.
Use Qlik Cloud for innovation, new projects, or global accessibility.
Minimize costs with licensing options that allow a hybrid setup at only ~30% additional cost.
This approach unlocks incremental ROI without forcing a “rip-and-replace” investment.
High-Level Licensing & ROI Comparison
Feature/Model
Qlik Sense (On-Premise)
Qlik Cloud (SaaS)
Licensing Model
Core-based (per CPU/core)
Capacity-based (data volume & users)
Infrastructure Costs
Requires hardware, maintenance, IT resources
Included in subscription (no infrastructure overhead)
Scalability
Limited to available cores & hardware
Elastic, scales on-demand
Updates & Upgrades
Manual patching & downtime
Continuous updates built-in
Security & Compliance
Controlled on-prem, internal governance
Enterprise-grade, built-in compliance frameworks
Total Cost of Ownership
High upfront + ongoing infra costs
Predictable subscription, pay for usage
ROI Focus
Infrastructure investment heavy
Data-driven outcomes & business agility
Takeaway: With Qlik Sense, ROI is partly consumed by infrastructure cost and IT overhead. With Qlik Cloud, that same investment is redirected toward automation, innovation, and user adoption — where business ROI is truly measured.
The ROI Equation
Migrating to Qlik Cloud doesn’t replace your past Qlik investment — it amplifies it. By combining proactive alerts, advanced reporting, Qlik Automation workflows, Qlik Answers for natural language analysis, and Qlik Predict for machine learning insights, companies can:
Improve decision-making speed.
Reduce IT overhead and manual reporting.
Empower every department with data-driven culture.
Stay future-ready as Qlik continues innovating.
Ready to Maximize Your Qlik ROI?
Whether full migration or hybrid, Arc Analytics is your partner in unlocking more value from Qlik.
One of the toughest aspects of dealing with freeform data is that the input layer may not have proper data validation processes to ensure data cleanliness. This can result in very ugly records, including non-text fields that are riddled with incorrectly formatted values.
Take this example dataset:
[Test Data] table
RecordID
DurationField
1
00:24:00
2
00:22:56
3
00:54
4
0:30
5
01
6
4
7
2:44
8
5 MINUTES
9
6/19
Those values in the [DurationField] column are all different! How would we be able to consistently interpret this field as having a Interval data type?
One of the ways you might be inclined to handle something like this is to use If() statements. Let’s see an example of that now.
It’s a mess! Qlik has to evaluate each Interval#() function twice in order to, first, check to see if the value was properly interpreted as a duration (“interval”) value, and then, second, to actually return the interpreted duration value itself.
One of the nice alternative ways of handling this is to use a different conditional function, like Alt(). This function achieves the same thing as using the If() and IsNum() functions in conjunction. You can use:
The preceding load happening at the bottom of that script is there to do some basic standardization of the [DurationField] field so that it’s easier to pattern-match.
In the rest of the script, we’re using the Alt() function (Qlik Help page) to check whether its arguments are numeric type of not. Each of its arguments are Interval#() functions, which are trying to interpret the values of the [DurationField] field as the provided format, like 'hh:mm:ss' or 'm:s'.
So it’s basically saying:
If Interval#([DurationField], 'hh:mm:ss') returns a value interpreted as an Interval, then return that value (for example, 00:24:00). But if a value couldn’t be interpreted as an Interval (like 5 mins for example, where the Interval#() function would return a text type), we go to the next Interval#() function. If Interval#([DurationField], 'mm:ss') returns a value…
This should all result in a table that looks like this:
One of the most-utilized features of web browsers is the bookmark; everyone has their favorite sites saved for later, but that’s really their only function – to navigate you. What if you wanted to have a bookmark that, instead of simply taking you to another webpage, could dynamically make changes to the page you’re currently on? You may be thinking, “oh, you mean browser extensions?” Yes, those absolutely fall into that category of functionality and purpose, but here’s a special type of bookmark you may not have known about: the JavaScript bookmarklet.
A JavaScript bookmarklet is a browser bookmark that runs JavaScript code instead of just navigating you to a webpage. They start with the javascript: quasi-protocol rather than the usual http:// or https:// protocol that we’re used to seeing. These bookmarkets are created the same way you create regular bookmarks and also live in your bookmark bar or folders.
I’ve written a few bookmarklets to make a couple of repetitive or annoying Qlik tasks easier. Let’s look at one of my favorites.
Opening an app from the QMC
If you’re a Qlik Sense on Windows poweruser like me, then you live both in the QMC and the Hub. For tasks that involve me duplicating other developers’ apps, finding and opening generically-named apps, or opening apps where I have access to the app but not the stream, the usual way I’ve accessed those apps is to just copy/paste an already-opened app’s URL and then copy/paste in the new app’s AppID.
Enter this handy little bookmarklet: all you have to do is select a table row in the Apps section of the QMC and then click on the bookmark and it will automatically open the selected app in a new tab!
Below is the full, annotated code for this bookmark, as well as a compressed, shortened version:
How do I make this a bookmark in my browser?
Below are the steps for adding this as a bookmark in your browser — note that I am using the Brave browser, which has similar settings as Google Chrome and Microsoft Edge. If the instructions don’t match the browser that you’re using, do a quick web search on how to add a bookmark to your browser. You should be able to pick it up at step 3 below.
Select your browser’s main pane, find the Bookmarks option, and then select the Bookmark manager option.
Find the menu button and select the Add new bookmark option.
Name the bookmark Open app from QMC.
In the URL field, type in javascript:.
Go to the second code chunk from above (the one with only one line), select all of the text, copy it, and then paste it into the URL field next to where you typed javascript: in the bookmark page.
After you hit the Save button shown in the above GIF, your new bookmarket should be ready to use!
One of my biggest annoyances when it comes to cleaning data is needing to make a transformation that is seemingly super easy but turns out to be much more involved when it comes time to implement. I’ve found that while Qlik is not immune to these scenarios, you can very often script your way to a solution.
One of these common snafus is having to unpivot a table. Or…pivot it? Perhaps un-unpivot?
Let’s look at an example of how to pivot and then unpivot a table using Qlik script.
The Example
I first create a new app in Qlik Sense SaaS (though this all works exactly the same if using Qlik Sense on-prem). I am going to pull in the Raleigh Police Incidents (NIBRS) dataset, provided freely to the public via the city’s ArcGIS Open Data portal; here’s the link to the data:
Here’s our load script to bring in the table from a CSV file:
Notice the fields on lines 16-20 that begin with “reported” — these appear to be the same date field but with slightly different formats and granularity. Let’s check it out:
Just as we suspected. Now, what if we wanted to pivot (or “transpose”) those fields into just two fields: one for the field names and one for the field values? This can be done in either the Data Manager or the Data Load Editor. When scripting in the load editor, we use the Crosstable() function.
To do this, I’m going to choose to do this pivot with only the date fields and the unique ID field, which in this case is the [OBJECTID] field:
Our crosstable load looks like this:
This screenshot shows that, on lines 3-9, we are loading our key and date fields from the [Data] table we already loaded in. Then, on line 2, we use the Crosstable prefix and include 3 parameters:
[Date Field] is the field that will be created to hold the field names that appear on lines 4-9.
[Date Value] is the field that will be created to hold the field values from the fields on lines 4-9.
1 indicates that I only want to pivot the date fields around the first loaded field in this table, which is [OBJECTID] in this case. If this was 2, for example, then this operation would pivot the table around [OBJECTID] and [reported_date].
When we run this script, Qlik first loads the data from the CSV into the [Data] table, and then pivots (“crosstables”) the date fields around the key field, [OBJECTID], into a new table called [Dates].
We now see why we did this operation in a separate table and did not include all of the other fields – the pivot predictably increases the number of rows the app is now using:
Here’s what we now have:
Notice how the [Date Field] now holds all of those column names and the [Date Value] field now has those column values. We have successfully turned this:
…into this:
But what if our data had started out in a “pivoted” format? Or what if we want to simply unpivot that data?
The Solution
In order to unpivot the table, we’ll use a Generic Load and some clever scripting.
First, I’ll write the Generic Load:
This screenshot shows that I am using the [OBJECTID] field as my key, [Date Field] as the field names (“attributes”; these will be turned into separate columns), and [Date Value] as the field values (these will become the values for those separate columns).
Here’s the resulting schema:
We now have our data back in the column/value orientation we want, but we have an annoying issue: the resulting tables don’t auto-concatenate. We instead get a separate table for each unpivoted field.
Let’s write some script to always join these tables together without having to write a separate JOIN statement for each table:
Each line of this script is doing the following:
This line creates a new empty table called [Un-unpivoted] with only our key field, [OBJECTID].
*blank*
This line begins a For loop that starts with the number of loaded tables in our app up to this point (NoOfTables()-1) and then decrements (step -1) down to zero (to 0).
Here, inside the For loop, we set the variable vCurrentTable to the table name of the current loaded table index. This just means that every table loaded into the app at this point can be identified by the index at which they were loaded or joined. The first table loaded is 0, the next one is 1, etc. This order changes if that first table is joined with another table later on, though.
*blank*
Here, we check to see if the current table name begins with “Unpivoted.”, which is what our Generic Load tables are prepended with.
If the current table indeed begins with “Unpivoted.”, then we Resident the table with all of its fields and join it to the [Un-unpivoted] we created on line 1.
Now that we’ve joined our table into our master [Un-unpivoted] table, we can drop it from our data model.
This ends our IF statement.
This takes us to the next table index.
Here’s a table that shows the operations for each iteration:
Once we run this, we can see in the resulting table that we were successful!
If there’s one thing I’ve learned in my time using, learning, and teaching about Qlik Sense, it’s that there’s so much I’ve used but haven’t fully memorized. This is the case with Qlik script functions, section access formatting, QRS API, and plenty more. Since I’m always Googling and looking things up on the Qlik Help site, I decided to maximize my efficiency with some Google Chrome shortcuts.
Before, my searching workflow was to open a new Chrome tab, navigate to the Qlik Help search page, and then run my search from there. Not that arduous or time-consuming, but we can get faster!
Now, from the Chrome search bar (officially called the “Omnibox”), I can start my query with :q and then enter my search keywords. When I hit enter, I’m taken directly to the Qlik Help search results for those keywords!
Here’s how to do it:
Go to the browser settings and then go to the Search engine section.
Select the Manage search engines and site search option and then find the section called Site search.
Select the Add button and then fill in the boxes like this:
Search Engine: Qlik Help
Shortcut: :q
URL with %s in place of query: https://help.qlik.com/en-US/search/?q=%s
Note that if you get an error about the shortcut being invalid, you may have another search engine shortcut that’s already using the :q shortcut. Click the Cancel button and check the list of search engines above this section. If there’s a conflicting one, you can edit it or delete it:
Once you successfully add the Qlik Help shortcut, you can try it by opening a new tab, clicking into the browser search bar, typing “:q”, hitting the space bar, typing your search keywords, and then hitting the Enter key on your keyboard:
We’re getting pretty efficient over here! Let’s use another keyboard shortcut to really kick things into high gear: CTRL + L. Use that keyboard shortcut to focus your cursor to the browser search bar without having to click into it first:
Okay…but what if we were really in a hurry to get our Qlik Help fix? Let’s add a final keyboard shortcut to the mix here: ALT + ENTER. This shortcut will open the search results in a new tab for us so that we don’t have to navigate away from our current page:
Watch our fingers fly!!
About Arc
Arc Analytics is a full-service data analytics and integration consultancy based in Charlotte, NC, USA, specializing in the Qlik platform.