Object conversion details
QV2QS handles a range of QlikView-specific features during conversion.
Expressions
QV2QS passes QlikView expressions through to Qlik Sense with minimal transformation. The expression language is largely shared between QlikView and Qlik Sense, so most expressions work without modification.
QV2QS applies the following transformations:
- Equals prefix — Qlik Sense requires a leading
=on measure expressions and certain property expressions. QV2QS adds the prefix where required if the original QlikView expression does not include one. - Comment stripping — Whole-line comments starting with
//,#, orREMare removed from inline expressions. Qlik Sense property expressions do not consistently support comment syntax, so stripping prevents evaluation errors. Block comments (/* */) are not stripped. Inline//comments within a code line are also not stripped.
The following expression features are passed through verbatim and work in Qlik Sense without modification:
- Set analysis expressions (for example,
{<Year={2024}>}) - Dollar-sign expansion and variable references (for example,
$(vMyVar)) - Nested
Aggr()expressions If()expressions, including conditional formatting expressionsPick(),Match(), andDual()patterns- Calculated dimensions
Set analysis quoting
QlikView (before November 2017) treated single-quoted values in set modifiers as case-insensitive searches, identical to double-quoted values. Qlik Sense treats single-quoted values as case-sensitive literals. This difference can break expressions that rely on wildcards, comparison operators, or numeric matching inside single quotes.
QV2QS scans all object expressions and variable definitions for set analysis quoting patterns that behave differently in Qlik Sense. Detected patterns include single-quoted wildcards ('*US*'), single-quoted comparison operators ('>=5'), single-quoted values on numeric fields, and unquoted bare string values. The results appear in the Expression_Findings worksheet of the Excel report.
QV2QS automatically fixes single-quoted search values during conversion. An experimental fix for unquoted bare string values is also available but disabled by default.
- Single-quoted search values (enabled by default) are converted to double quotes:
{<Country={'*US*'}>}becomes{<Country={"*US*"}>}. Detected search patterns include wildcards (*,?,^), comparison operators, fuzzy search (~), expression search (=), search modifiers (+,-), and compound search. Single-quoted values on numeric fields that do not contain search syntax are flagged for manual review but not auto-fixed. - Unquoted bare string values (experimental, disabled by default) are wrapped in single quotes:
{<Country={USA}>}becomes{<Country={'USA'}>}. Pass--fixUnquotedSetValuesto enable.
Fixes are applied using positional replacement within set modifier value lists only. Field names, function names, and other expression text are never modified. The two fixes are controlled independently. Pass --noFixSingleQuotedSearch to disable the single-quoted fix. Unsupported function findings are not modified.
The Expression_Findings worksheet and the executive summary dashboard include a Source column that indicates whether each finding originates from a variable definition or a chart object expression. A Status column shows whether the finding was auto-fixed, needs manual review, or has no automatic fix available.
For the full list of detected patterns, see Analysis. For set analysis syntax reference, see Set analysis in Qlik Cloud help.
QV2QS scans all expression fields (dimensions, measures, show conditions, color expressions, titles, calc conditions, and others) as well as variable definitions and the load script for unsupported functions. Detected instances are listed in the analysis report.
The following QlikView-specific functions are not available in Qlik Sense:
GetCurrentField,GetExtendedPropertyInput,InputSum,InputAvgMsgBoxImage_SizeNoOfReports,ReportComment,ReportId,ReportName,ReportNumber
For the list of detected load script patterns, see Analysis.
Number formatting
QV2QS converts QlikView number format definitions to Qlik Sense number format types. The format type is mapped to the Qlik Sense equivalent, and the custom format string (Fmt), decimal separator, thousand separator, and decimal precision are all preserved verbatim. Custom format strings such as #,##0.00;(#,##0.00) or '$'#,##0 are passed through as-is in the qFmt field.
The following QlikView format types are mapped:
| QlikView type | Qlik Sense type |
|---|---|
| FIX, REAL, INTEGER | Fixed (F) |
| MONEY | Money (M) |
| DATE | Date (D) |
| TIME | Time (T) |
| TIMESTAMP | Timestamp (TS) |
| INTERVAL | Interval (IV) |
Sorting
QV2QS converts all QlikView sort criteria to Qlik Sense equivalents. The following sort settings are mapped one-to-one: sort by state, sort by frequency, sort by numeric value, sort by alphabetical order, sort by load order, sort by expression (including the expression text), and sort by greyness.
For listbox fields, QV2QS applies an additional heuristic to suppress state-based sorting on date-like fields. For details, see Argument reference.
Visual cues and conditional coloring
QlikView visual cues (threshold-based conditional colors on measures) are converted to Qlik Sense color expressions for table and pivot table visualizations. QV2QS generates nested If() expressions with RGB() or ARGB() color functions that replicate the original low/normal/high threshold behavior. Both text color and background color cues are converted. Visual cues on chart visualizations (bar chart, line chart, combo chart, and others) are not converted.
Expression-based coloring
QV2QS converts per-dimension and per-measure color expressions (background color and text color) to Qlik Sense attribute expressions. For table and pivot table visualizations, both background and text color expressions are preserved (cellBackgroundColor and cellForegroundColor). For chart visualizations, measure background color expressions are converted to colorByExpression mode. Dimension color expressions and measure text color expressions are not converted for chart types because Qlik Sense charts do not support per-dimension color attribute expressions or per-measure text color attributes.
For table and pivot table visualizations, if no explicit color expression exists on a measure but visual cues are defined, QV2QS auto-generates a color expression from the visual cue thresholds.
Trendlines
QlikView trendlines on chart measures are converted to Qlik Sense trendlines. The following trendline types are supported:
- Average, Linear, Exponential, Logarithmic, Power
- Polynomial (degree 2, 3, and 4)
Reference lines
QlikView reference lines on chart axes are converted to Qlik Sense reference lines. The label, value expression, color, line style, and show condition (conditional visibility expression) are preserved. If a reference line has no show condition, the default visibility is always shown. Combo charts support reference lines on both the primary and secondary axes.
Combo chart axis assignment
QV2QS preserves QlikView combo chart axis assignments. Each measure retains the primary or secondary axis binding from the original QlikView chart. Measure series types (bar, line, marker) are also preserved.
Dimension groups
QV2QS converts QlikView cyclic groups and drill-down groups to Qlik Sense master dimensions. Cyclic groups become cyclic master dimensions. Drill-down groups become drill-down master dimensions. Charts that reference a group dimension are wired to the corresponding master dimension in the converted app.
Font handling
Qlik Sense supports a fixed set of web-safe fonts. QV2QS maps QlikView fonts to the closest available Qlik Sense font. Fonts that cannot be mapped use the fallback font (Source Sans Pro).
The following QlikView fonts have explicit mappings:
| QlikView font | Qlik Sense font |
|---|---|
| Arial, Helvetica, Tahoma, Calibri | Source Sans Pro |
| Segoe UI | Inter |
| Verdana | Open Sans |
| Times New Roman, Times, Georgia | PT Serif |
| Courier New, Consolas | Source Sans Pro |
Custom fonts not in the Qlik Sense font library are mapped to Source Sans Pro.
Monospace fonts (Courier New, Consolas) are mapped to the proportional font Source Sans Pro. Monospace character alignment is not preserved.
System variables
QV2QS excludes system variables from the converted variable list. These variables are managed by the Qlik engine and do not need to be included in variables.json. Examples include DateFormat, ThousandSep, DecimalSep, TimestampFormat, ErrorMode, and NullDisplay.
System variables that have been explicitly set in the load script (for example, SET DateFormat='YYYY-MM-DD';) are preserved in the load script and take effect during reload. The exclusion applies only to the variable definitions in the converted app, not to SET or LET statements in the load script.
User-defined variables are converted.
Trellis mode
QlikView charts with trellis mode enabled (EnablePrimaryDimension) use the first dimension as a faceting field to display a grid of mini-charts. Qlik Sense does not have a native trellis mode on standard charts. QV2QS converts trellis charts automatically using the Qlik Sense trellis container extension (qlik-trellis-container) from the Visualization Bundle.
During conversion, QV2QS performs the following steps:
- Creates a master visualization — The original chart is converted without the trellis dimensions. For primary-only trellis, dimension 0 is removed. When secondary trellis is also enabled, dimensions 0 and 1 are both removed. The remaining chart is saved as a master visualization in the app.
- Creates a trellis container — A
qlik-trellis-containerobject is placed on the sheet at the original chart position. The container references the master visualization and uses the removed dimensions as faceting fields in its data definition. When both primary and secondary trellis are enabled, the container data definition contains two faceting dimensions. - Configures the grid — The QlikView column and row settings map to the trellis container column count and maximum chart count. The maximum number of charts is calculated as columns multiplied by rows. When the cardinality of the faceting dimensions exceeds the grid size, QV2QS increases the maximum chart count to accommodate all dimension values. For secondary trellis, the total cardinality is the product of the primary and secondary dimension cardinalities. The value is rounded up to the nearest multiple of the column count so the grid fills evenly. This expansion is recorded as a chart adjustment.
The trellis container uses the same qv_id mapping as the original chart, so it occupies the same position on the sheet.
Primary-only trellis requires at least two dimensions (one for the trellis faceting and one for the master chart). Primary plus secondary trellis requires at least three dimensions (two for trellis faceting and one for the master chart). Charts with fewer dimensions than required are skipped.
Measure accumulation
QlikView measure accumulation (running totals) is converted to Qlik Sense accumulation modifiers. The following accumulation modes are supported:
- Full accumulation — The measure expression is rewritten using
RangeSum()withAbove()andRowNo()to produce a running total across all rows. The modifierfullAccumulationflag is set totruewith astepsvalue of 6. - Step accumulation — When the QlikView accumulation step count is greater than 1, the measure expression uses
RangeSum()withAbove()and the specified step count. The modifierfullAccumulationflag is set tofalse.
The generated accumulation expression adapts to the dimension field type:
- Numeric dimensions — Set analysis bounds use
Min()andMax()for the field. - Text dimensions — Set analysis bounds use
MinString()andMaxString()for the field. - Two-dimension charts — An
Aggr()wrapper is generated to nest the accumulation within the outer dimension context.
When accumulation is applied, QV2QS disables continuous axis mode (preferContinuousAxis=false) and sets nullMode to connect to ensure correct visual rendering. The original measure expression and label are preserved in the modifier base property.
Tab containers
QV2QS converts QlikView tab containers using three strategies depending on the container configuration and context. In all cases, child objects remain on the same Qlik Sense sheet as the container.
- Tabbed container — Standalone multi-tab containers that do not overlap other objects are converted to native Qlik Sense tabbed containers (
sn-tabbed-container). Each tab member becomes a tab within the container. Tab order follows the original QlikView member order. - Pseudo-tabs — When a multi-tab container overlaps other objects or is nested inside another container, QV2QS flattens the tabs into a layout container. A button strip is generated with one
action-buttonper tab. Each button sets a navigation variable using aSetVariableaction. Show conditions on the child objects (for example,=If('$(vCT01Tab)'='1',1,0)) control which tab content is visible. Only one tab is visible at a time. The button strip reproduces the tab-switching behavior of the original QlikView container. - Layout container — Containers in grid mode are converted to layout containers (
sn-layout-container).
Single-object containers are simplified. No tab strip or variable is created. The single child object is placed directly at the container position with the container show condition applied.
Nested containers are supported up to a depth of 8 levels. QV2QS detects cycles and stops recursion if a container creates a circular reference.
Show conditions on the container and on individual child objects are composed using logical AND. A child object is visible only when the container condition, the tab variable condition, and the child object condition all evaluate to true.
Show conditions
QlikView show conditions on individual objects are preserved. Qlik Sense does not support show conditions directly on visualization objects. QV2QS wraps objects that have show conditions in a single-child layout container and applies the condition as a condition entry on the container. Objects already inside a layout container (due to overlapping) receive the condition on the container entry directly.
When a show condition evaluates to false, the layout container remains at the grid position but displays no content. The hidden container does not collapse or cause adjacent objects to reflow. In both dynamic grid and fixed canvas modes, the hidden object leaves blank space at the original position. The blank space behavior matches QlikView, where hidden objects also leave blank space.
Alternate states
QV2QS preserves alternate state assignments. Objects bound to an alternate state in QlikView retain the same state binding in Qlik Sense. State names are preserved exactly. QV2QS creates the required alternate states in the Qlik Cloud app during deployment. Alternate state references within set analysis expressions (for example, {[State2]<Year={2024}>}) are passed through verbatim and work in Qlik Sense without modification.
In Local only mode (--unbuildOnly), alternate state names are written to cloud/alternate_states.json in the project subfolder (for example, <outputDir>/Sales/cloud/alternate_states.json). The states must be created manually or by the qlik app build tool when deploying the output to a Qlik Cloud tenant.
Object actions
QV2QS converts actions on buttons (BU, BT) and text objects (TX). Text objects that contain actions are promoted to action buttons (action-button). Supported action types include navigation, SetVariable, SelectField, and others documented in Conversion outcomes.
Actions on other object types (charts, listboxes, sliders, and containers) are not converted. QlikView supports OnActivate actions on any object type, but QV2QS parses actions only from button and text object XML. Non-macro actions (SetVariable, SelectField, navigation) attached to charts, listboxes, or other non-button objects are dropped during conversion and do not appear in the conversion report. To find dropped actions, search the PRJ XML files for <Actions> elements in non-button object definitions.
The gap scanner detects macro invocations across all object types for reporting purposes. Macro cross-references in the Analysis worksheet reflect all objects, not only buttons. Non-macro action types on non-button objects are not reported.
Calculation conditions
Calculation conditions are preserved for the following visualization types: bar chart, boxplot, combo chart, gauge, line chart, Mekko chart, pie chart, scatter plot, grid chart, pivot table, table, treemap, and waterfall chart.
The condition expression and the custom error message (the text displayed to users when the condition is not met) are both applied to the hypercube definition. If the original QlikView object has no custom message, Qlik Sense displays the default calculation condition message.
Visualization types not in the list above (including funnel chart, radar chart, and KPI) do not receive a calculation condition. If a QlikView object has a calculation condition and the target visualization type does not support the feature, both the condition and the message are silently dropped.