big-data5 min read

QlikView Tutorial: Learn BI Tool from Scratch (2026)

QlikView Tutorial: Learn BI Tool from Scratch (2026)

Published:  |  Category: Big Data  |  Reading time: ~15 min
QlikView Tutorial: Learn BI Tool from Scratch (2026)

QlikView pioneered the associative data model that sets it apart from traditional BI tools. Unlike query-based tools that require pre-defined joins, QlikView loads data into memory and creates associations between all tables automatically. Every selection instantly highlights associated and excluded values across the entire data model, enabling free-form exploration that SQL queries cannot match.

This tutorial covers the essential QlikView skills: the associative model, script language for data loading, set analysis for multi-state comparisons, and building apps with charts and list boxes.

The Associative Data Model

QlikView loads all data into memory in a compressed columnar format. Tables are linked by common field names automatically — no explicit joins required. If two tables share a field name, QlikView creates a synthetic key and links them. Every selection highlights three colors: green (selected), white (associated), and gray (excluded).

This associative logic is QlikView's superpower. Selecting a customer instantly shows which products they bought, which regions they are in, and which periods they were active — no join definitions needed. Circular references require careful handling with link tables.

// QlikView script linking tables by CustomerID:
Sales:
LOAD OrderID, CustomerID, Amount, Date
FROM sales.qvd (qvd);

Customers:
LOAD CustomerID, Name, Region, Segment
FROM customers.qvd (qvd);

// Both tables automatically associate on CustomerID

Script Language and Data Loading

QlikView script loads data from databases, QVD files, Excel, and web sources. The script runs before any analysis begins, transforming and loading data into the associative model. Resident loads read from already-loaded tables within the script. QVD (QlikView Data) files store compressed snapshots for incremental loading.

I use QVD files as a staging layer: extract from source to QVD, transform via resident loads, then load into the app. This reduces source database load and enables incremental reloads. The script debugger shows step-by-step execution for troubleshooting complex transformations.

// Incremental load using QVD:
if len(dir$('data/sales.qvd')) > 0 then
  STORE Sales INTO data/sales_prev.qvd;
  Sales: LOAD * FROM data/sales.qvd (qvd)
    WHERE Date >= today() - 30;
else
  Sales: LOAD * FROM source://sales;
end if
STORE Sales INTO data/sales.qvd (qvd);

Set Analysis: Multi-State Comparisons

Set analysis lets you define independent selection states within a single expression. The syntax {1} ignores all selections (total set). {} selects a specific set. {$} respects current selections. Set analysis is essential for KPI calculations like market share (current selection vs total) and period-over-period comparisons.

I use set analysis for every comparative KPI: sales growth = Sum({$} Amount) / Sum({1} Amount) - 1 for market share. Advanced sets combine dollar expansions and set modifiers for dynamic time ranges.

// Set analysis examples:
// Total sales ignoring all selections:
=Sum({1} Amount)

// Sales for 2024 regardless of user selection:
=Sum({} Amount)

// Current vs previous year sales:
=Sum({$} Amount) / Sum({} Amount) - 1

// Sales for selected customers only:
=Sum({} Amount)

Charts, List Boxes, and Sheet Design

QlikView sheets contain charts, list boxes, text objects, and buttons. List boxes display field values with selection capabilities. Charts include bar, line, pie, scatter, and pivot table. Each chart can have one or more dimensions and expressions. The state indicator shows selections and possible values.

I design sheets with a filter area on the left (list boxes for key dimensions), main visualization in the center, and KPIs at the top. Container objects group related documents. Cycle groups let users change chart type interactively.

// Chart expression examples:
// Simple sum:
Sum(Amount)

// Running total over time:
Rangesum(Above(Sum(Amount), 0, RowNo()))

// Ranked top 10:
If(Rank(Sum(Amount)) <= 10, Sum(Amount))

// Conditional color:
If(Sum(Amount) > 1000000, RGB(0,255,0), RGB(255,0,0))

Extensions and Custom Objects

QlikView extensions extend functionality with custom visualization objects built in HTML, CSS, and JavaScript. The Extension Object Wizard generates boilerplate code. Extensions can include D3.js charts, Google Maps, and custom data grids.

I have built extensions for Gantt charts, network graphs, and custom KPI tiles. The extension API provides access to QlikView layout and data objects. Performance varies — complex D3 visualizations can lag with large datasets. Use the QlikView Extension Compatibility Checker for version matching.

// Extension structure:
// extension_name.zip:
//   extension_name.xml - definition
//   extension_name.js  - logic
//   extension_name.css - styling

// Extension XML stub:

  KpiTile
  1.0
  
    
  

Performance Optimization and QVD Management

QlikView stores all data in RAM, so memory management is critical. Optimize by: reducing field cardinality (replace unique IDs with codes), using numeric fields instead of text, and removing unused fields. QVD files are compressed columnar snapshots optimized for load speed.

I maintain a QVD layer with incremental updates: daily QVDs for current data, weekly QVDs for historical, and monthly archives. Star schema modeling reduces memory footprint compared to normalized schemas. The Document Analyzer identifies large tables and high-cardinality fields for optimization.

// QVD optimization in script:
// Optimize memory by dropping unused fields:
Sales_opt:
LOAD
  OrderID,
  Date(Filedate) as OrderDate,  // convert to date number
  Floor(Amount * 100) / 100 as Amount,  // reduce precision
  If(IsNum(CustomerID), Num(CustomerID), Text(CustomerID)) as CustomerID
RESIDENT Sales_raw;

DROP TABLE Sales_raw;
STORE Sales_opt INTO data/sales.qvd (qvd);

Frequently Asked Questions

What is the difference between QlikView and Qlik Sense?

QlikView is the legacy product focused on developer-built associative apps. Qlik Sense is the modern platform with self-service analytics, responsive design, and governance features. New projects should use Sense.

How does the associative model differ from traditional BI?

Traditional BI requires pre-defined query paths and joins. QlikView associates all data automatically by common field names, enabling free-form discovery. Every selection shows associated and excluded values globally.

What is a QVD file used for?

QVD (QlikView Data) files are compressed columnar snapshots of tables. They speed up reloads by storing pre-processed data incrementally. I use QVDs as an intermediary layer between source systems and the app.

How do I handle circular references in the data model?

Use a link table: create a table of common key values that bridges the circular tables, then remove the direct field links between the original tables.

Originally published on Ayodhyyya. Last updated June 1, 2026.