The estate
700 Qlik jobs, Sense and QlikView, had stopped being a BI layer. The load scripts and the QVD files they wrote were the pipeline. Dashboards read whatever those scripts had last stored. Moving the dashboards and leaving the scripts would have kept the same pipeline under a new name.
The target was Snowflake, with the load logic as dbt models the data team could review in Git. One SQL model per Qlik table, laid out as staging, intermediate, and marts, plus one script that runs them in the order the Qlik loads already had.
What was converted
The parser reads the load script. It does not need a running Qlik engine. Sense apps (.qvf), script files (.qvs and text exports), and the QVD-builder workbook go in. QlikView .qvw files are read where the script can be extracted. When a binary file will not open, the script is exported as text and that export is what gets converted.
- LOAD and SELECT, including joins and concatenates
- Mapping loads and ApplyMap, which become joins
- QVD sources and STORE, which become table reads and table writes, so the QVD layer is replaced
- Variables, includes, and subroutines
- Qlik functions, rewritten as the warehouse’s own SQL
From a Sense app the parser also pulls the script apart by tab and lists the variables, master dimensions, measures, and sheets. Those app objects are extracted so the team can see what the app owned. The load script is what becomes SQL.
The 90%, and the list beside it
On these 700 jobs the SLA puts 630 in the automated set. An engineer does not rewrite them, and an AI model is not asked to. The other 70 are named up front.
Assessment is a read-only scan. It comes back with a complexity band, an effort estimate, a conversion confidence, and the statement types that will need a person. Each script then gets a parse report: warnings, includes that could not be resolved, statements that were skipped, and the field list to check against Qlik.
- A statement the converter skips is reported with a warning. It is not dropped quietly.
- IF and FOR are converted as written. Branches that depend on a value only known at runtime stay on the review list.
- Nothing is called converted until the Snowflake result has been checked against the Qlik output.
How a job moved
Qlik load scripts → MigryX parser → dbt models on Snowflake
The QVD file is not a warehouse stage. Each STORE becomes a table write, and each Qlik table becomes one dbt model. Dashboards then read governed Snowflake tables.
Result
630 jobs landed as dbt SQL. The 70 that did not are the ones the assessment named, each with the statement that blocked it. Cutover waited on a row check against the Qlik result.
See it on a Qlik script you already run.
Thirty minutes. We assess a sample, show what converts, and show the review list. All we need is an email.
Book a Qlik to dbt demo