Qlik Sense • Qlik Cloud • NPrinting

End-to-End Qlik Migration:
QlikView → Qlik Sense → Qlik Cloud + NPrinting

Three migration paths. Real technical traps. The guide the market never published: scripts, syntax differences, and exactly what breaks at each stage.

Migration is not clicking "Publish." It is re-engineering.
0migration paths
0critical traps
0% from real projects
Scroll down
Why This Is More Complex Than It Looks

The Reality of Qlik Migrations

Qlik announced end of support for QlikView in 2025. NPrinting has no meaningful roadmap evolution. And Qlik Sense on-premises is in maintenance mode while Qlik Cloud receives all new capabilities.

The result: companies that built their BI on QlikView over the last 15 years are facing a three-stage migration - and each stage has its own set of technical traps.

"The biggest trap in Qlik migrations is not technical. It is the assumption that the load script will behave the same way. It will not. And NPrinting even less so."

The Three Paths

1
QlikView → Qlik Sense .qvw to .qvf - new object model, new extensibility paradigm, Section Access rewritten, expressions with different behavior in edge cases.
2
Qlik Sense On-Prem → Qlik Cloud Spaces, OAuth 2.0, Managed Spaces, Data Spaces - completely different tenant architecture. Extensions require re-certification. QVDs migrate to cloud storage.
3
NPrinting → Qlik Cloud Reporting Service Office templates do not migrate automatically. Scheduled distribution via Automation. Attribute-based bursting works differently. Pixel-perfect requires a new approach.
1
QlikView → Qlik Sense
Format, scripting, objects and security

What Changes in the Load Script

Qlik Sense load script syntax is largely compatible with QlikView - but there are critical differences that fail silently.

NullAsValue and SET NULLINTERPRET

QlikView (default behavior)
// QlikView handles NULL more
// permissively in associations.
// NULL fields participate in joins
// without explicit configuration.

LOAD * FROM sales.qvd (qvd);
Qlik Sense (explicit and correct)
// Declare NULL behavior explicitly
SET NullInterpret = '';
SET NullDisplay = '-';

NullAsValue Field1, Field2;

LOAD * FROM sales.qvd (qvd);

Section Access - Mandatory Rewrite

In QlikView, Section Access uses NTNAME, OMIT and ACCESS fields configured via QMC. In Qlik Sense the model is different: USER.EMAIL or USER.USERID replace NTNAME, and the OMIT field has been discontinued.

Section Access - QlikView
Section Access;
LOAD * INLINE [
  ACCESS, NTNAME,       REGION, OMIT
  ADMIN,  DOMAIN\admin, *,
  USER,   DOMAIN\anna,  West,   COST
  USER,   DOMAIN\john,  East,   COST
];
Section Application;
Section Access - Qlik Sense
Section Access;
LOAD * INLINE [
  ACCESS, USERID,           REGION
  ADMIN,  anna@company.com, *
  USER,   john@company.com, East
  USER,   pedro@company.com,West
];
// OMIT discontinued:
// use Row-Level Security via
// filter field in the data model
Section Application;

Objects: What Migrates and What Does Not

TOTAL Qualifier - Identical Behavior on Both Platforms

The TOTAL qualifier without a field specification ignores all chart dimensions on both platforms. QlikView and Qlik Sense behave identically here - basic TOTAL syntax migrates without change.

QlikView and Qlik Sense - identical
// TOTAL without field: ignores
// all chart dimensions
// (same behavior on both platforms)
Sum(Sales) / Sum(TOTAL Sales)

// With field: restricts which
// dimensions TOTAL ignores
// (syntax available on both)
Sum(Sales) /
Sum(TOTAL <Region> Sales)
Where real differences exist
// Genuine migration edge cases:
// 1. Set Analysis nested with TOTAL
//    - evaluation order can differ

Sum({<Year={2024}>} TOTAL Sales)

// 2. Master Visualizations in Qlik Cloud
//    - selection context may interact
//    differently with the TOTAL
//    qualifier in certain scenarios
2
Qlik Sense On-Prem → Qlik Cloud
Spaces, OAuth, Extensions and QVDs

The New Spaces Model

Qlik Cloud replaces the Streams model with Spaces - and understanding the difference between them is the first step toward a rework-free migration.

Pers.
Personal SpaceOne per user. Development and testing. Content not directly shareable. Equivalent to the "Work" stream in Sense.
Shar.
Shared SpaceCollaborative content between users. Apps, datasets and automations. Equivalent to Streams with edit access.
Man.
Managed SpacePublished content for consumption. Separate roles for developer and consumer. Production governance.
Data
Data SpaceExclusively for data: QVDs, connections, datasets. Separation between data layer and analytics layer.

Authentication: API Keys → OAuth 2.0

In Sense on-prem, integrations use Virtual Proxies with certificates or JWT. In the Cloud, the standard is OAuth 2.0 with declared scopes.

Authentication via OAuth 2.0 - Qlik Cloud API
# Get access token (Client Credentials)
curl -X POST https://YOUR_TENANT.us.qlikcloud.com/oauth/token \
  -H "Content-Type: application/json" \
  -d '{
    "grant_type": "client_credentials",
    "client_id": "YOUR_CLIENT_ID",
    "client_secret": "YOUR_CLIENT_SECRET"
  }'

# Use the token to reload an app
curl -X POST \
  https://YOUR_TENANT.us.qlikcloud.com/api/v1/apps/APP_ID/reloads \
  -H "Authorization: Bearer ACCESS_TOKEN" \
  -H "Content-Type: application/json"

QVDs: Migration to Cloud Storage

On-premises QVDs live in file shares or local directories. In the Cloud, they require a Data Connection pointing to S3, ADLS Gen2, GCS, or Qlik Data Gateway for on-premises sources.

On-Prem - local path
LOAD * FROM
[lib://QVD_Store/sales_$(vYear).qvd]
(qvd);
Cloud - declared connection
// Data Connection: "S3_DataLake"
// configured in the Data Space

LOAD * FROM
[lib://S3_DataLake:sales/$(vYear).qvd]
(qvd);

// Or via Qlik Data Gateway
// for QVDs on corporate network

Extensions: Re-certification Required

3
NPrinting → Qlik Cloud Reporting
Templates, distribution and attribute-based bursting

This is the most underestimated path. Many teams assume "NPrinting will keep working" after moving apps to the Cloud. It will not - NPrinting only connects to Qlik Sense on-premises.

NPrinting has no support for Qlik Cloud. If your apps migrate to the Cloud, your report distribution must migrate too.

NPrinting vs Qlik Cloud Reporting - Side by Side

NPrinting
Templates: Excel, Word,
  PowerPoint, HTML, PDF

Distribution: Email, Folder,
  NewsStand

Bursting: by user field
  in connection (user filter)

Scheduling: cron-like via
  NPrinting Scheduler

Pixel-perfect: yes, via
  detailed Office template
Qlik Cloud Reporting
Templates: Qlik Sense app
  (Office templates do not import)

Distribution: Email via
  Qlik Application Automation

Bursting: loop in Automation
  + dynamic Section Access

Scheduling: Automation
  (time or event-based triggers)

Pixel-perfect: via PDF export
  configured in the app

Bursting via Qlik Application Automation

In NPrinting, bursting was declarative: point to a field and it generated one PDF per value. In the Cloud, bursting is imperative via Automation:

Bursting logic - Qlik Application Automation (pseudocode)
// Block: Start (Trigger: Schedule - daily at 6am)

// 1. Fetch list of regions via REST API
GET /api/v1/apps/{appId}/data
  → returns list of values for field "Region"

// 2. Loop through each region
FOR EACH region IN region_list:

  // 3. Apply selection via Engine API
  POST /api/v1/apps/{appId}/reloads
  body: { selections: [{ field: "Region", values: [region] }] }

  // 4. Export PDF from configured sheet
  POST /api/v1/apps/{appId}/sheets/{sheetId}/export
  body: { outputFormat: "pdf" }
  → returns URL of generated PDF

  // 5. Send by email
  Email: to      = lookup_email(region)
         subject = "Report - " + region
         attach  = PDF_URL

What Does Not Exist (Yet) in Qlik Cloud Reporting

For critical pixel-perfect reports (regulatory, financial), evaluate a hybrid on-prem Sense approach or a complementary reporting solution while Cloud Reporting matures.

Migration Plan

Assessment Before You Migrate

Every migration starts with an honest inventory. Run this before opening any project ticket:

Recommended Migration Order

1
Data layer firstMigrate QVDs to cloud storage before migrating apps. Without data in the Cloud, no app works. Configure Data Connections and validate QVD integrity.
2
Lower-criticality appsStart with apps that have fewer users and no Section Access. Validate expression behavior, performance and data model integrity before moving critical apps.
3
Section Access and securityMigrate security in an isolated environment before exposing to production. Validate Row-Level Security with test users representing each access profile.
4
NPrinting in parallelRun NPrinting on-prem in parallel with Cloud Reporting for at least one full close cycle. Compare outputs before decommissioning NPrinting.

Which migration path is your pain right now?

QlikView sitting idle for years waiting to migrate? NPrinting nobody knows how to replace? Sense on-prem with an end-of-support date approaching?

Tell me in the comments where you are on this journey. I have been through all three paths in production.

Connect with Rafael

#Qlik #QlikSense #QlikCloud #QlikView #NPrinting #DataGovernance #BusinessIntelligence #BI #DataEngineering #CloudMigration