Skip to main content
Announcements
Have questions about Qlik Connect? Join us live on April 10th, at 11 AM ET: SIGN UP NOW
hic
Former Employee
Former Employee

Set Analysis is a commonly used tool when creating advanced formulas in Qlik Sense or QlikView. But why is it called “Set Analysis”? And why are there so many curly brackets?

Set Analysis is really a simple and straightforward tool, but with an advanced syntax. “Simple” since its only function is to allow you to define a calculation scope different from the current selection. The basics are very much like defining a SQL Where clause.

 

A different term for the scope is the “record set”. With this, we mean the set of records in the data over which the aggregations should be calculated.

 

Image4.png

 

The above Set analysis expression is equivalent to selecting 2015 from OrderYear. It is also equivalent to a SQL condition “Where OrderYear=2015”.

 

The Set analysis syntax is advanced because there are so many different ways to define a record set; you can use a selection, a bookmark, or an alternate state. Further, just as in any set algebra, you can define intersections, unions and other set operations, e.g. the difference between two sets:

 

Image1.png

 

This expression describes the Set difference between current selection in the default state $ and selection in the alternate state State2: I.e. records that are included by the default state, but not included in State2.

 

Venn.png

 

Another set expression is the following:

 

Image3.png

 

This defines the records belonging to any order date that occurs before the latest order date in the current selection. The dollar expansion is needed, since the parser expects field values in clear text in the search string.

 

Note that the last Set expression contains two pairs of curly brackets. Set analysis expressions with many curly brackets look complicated, but there is in fact method in the madness…

 

  • The outer brackets: Sum( { … } Sales )
    These define the record set; i.e. the records in the data over which the aggregation should be made.
  • The inner brackets: Sum( {$<Field= { … } >} Sales )
    These define the element set; i.e. the set of individual field values that define the selection in this field.

 

For those of you who have read about Symbol Tables and Bit-Stuffed Pointers it may be interesting to know that the element set operate on the symbol tables, whereas the record set is defined on the data tables.

 

The element set can be a list of values or a search string. It can also be described by field references or by the P() and E() functions, e.g.

 

Image5.png

 

Summary:

  • There are two different sets in a Set expression: The Record Set and the Element Set.
  • The record set (the outer curly brackets) defines the records in the data tables. Use 1, $, a bookmark or an alternate state as Set identifier.
  • The element set (the inner curly brackets) defines the selection that modifies a record set. Use one or several of the following to define your element set:
    • A list of values, e.g: {2013,2014,2015}
    • A search, e.g: {">=2015-01-06<=2015-02-05"}
    • A field reference
    • A set function, i.e: P() or E()
  • Set operators can be used to define both the record set and the element set.

 

With this, I hope that you understand Set Analysis somewhat better.

 

HIC

 

Further reading related to this topic:

A Primer on Set Analysis

Symbol Tables and Bit-Stuffed Pointers

Implicit Set Operators

25 Comments
datanibbler
Champion
Champion

Hi,

great post! Set_analysis is really one of the most powerful tools there are in QlikView and thus well worth exploring.

The only drawback - but that would be for Qlik to fix - is that the expression_editor often does not recognize SET_analysis_syntax and underlines it in red. That is a bit annoying, especially if there are another two or three expressions following because the editor doesn't even check those.

Is there any chance that qlik is going to fix that? (maybe it already has, we don't update that often)

There are alternatives - with less elegant expressions that the editor does recognize.

4,950 Views
SreeniJD
Specialist
Specialist

Hi HIC,

Nice post. Keep update this post as it deserves to have more examples and enhanced versions.

Sreeni

0 Likes
4,950 Views
Not applicable

Nice Explanation!! Very helpful

0 Likes
4,950 Views
Anonymous
Not applicable

Simple and clear explanation

0 Likes
4,950 Views
qlikviewwizard
Master II
Master II

Hi hic,

Thanks for the detailed explanation on set analysis.

Could you tell me what this {$<Customer=Customer+P({1<OrderYear={2015}>}Customer)>} set analysis will show the data?

0 Likes
4,950 Views
anderseriksson
Partner - Specialist
Partner - Specialist

Update to the latest version and you will see improvements of the editors understanding of set analysis..

0 Likes
4,950 Views
anderseriksson
Partner - Specialist
Partner - Specialist

The currently selected Customers plus those Customers with orders in 2015.

4,096 Views
rwunderlich
Partner Ambassador/MVP
Partner Ambassador/MVP

‌I disagree that the latest update (sr12) improves the editor syntax checking. In fact, I think sr11 makes it more difficult.

SR11 Error Handling Changes | Qlikview Cookbook

It looks like QLikView Version 12, when it becomes available, will have much improved syntax checking.

4,096 Views
anderseriksson
Partner - Specialist
Partner - Specialist

Yes read your blog, but I think there are some improvements also to the syntax check, at least in SR12.

Probably there are both and you should try which you like the best.

Or hope for version 12 to sort it out.

0 Likes
4,096 Views
Not applicable

Very helpful TNX

0 Likes
4,096 Views