{<Field+={x}>} / {<Field-={x}>} / {<Field*={x}>}

Set modifier operators: =, +=, -=, *= in Power BI

Qlik set modifiers can replace, extend, reduce or intersect the user's selection in a field. Here is how each assignment operator maps to DAX, using KEEPFILTERS, TREATAS and UNION.

Partial / different approach DAX

Short answer: = is a plain CALCULATE filter. *= is KEEPFILTERS(...). -= is KEEPFILTERS(col <> x), with care for blanks. += needs TREATAS(UNION(VALUES(col), {...}), col).

What it does in Qlik

Inside a modifier, the assignment operator decides how the listed values combine with the current selection in that field:

  • Region={'North'}: replace the selection with North.
  • Region+={'North'}: current selection plus North.
  • Region-={'North'}: current selection minus North.
  • Region*={'North'}: only North, and only if it is in the current selection.

Qlik example

Qlik chart expressions
Sum({<Region-={'North'}>} Sales)   // everything selected except North
Sum({<Region*={'North'}>} Sales)   // North only if North is selected/possible
Sum({<Region+={'North'}>} Sales)   // the selection plus North

Power BI equivalent

*= (intersect): KEEPFILTERS

KEEPFILTERS intersects the new filter with the existing one instead of replacing it.

DAX
Sales North if selected =
CALCULATE ( [Sales], KEEPFILTERS ( Customer[Region] = "North" ) )

-= (exclude)

DAX
Sales excl North =
CALCULATE (
    [Sales],
    KEEPFILTERS ( Customer[Region] <> "North" && NOT ISBLANK ( Customer[Region] ) )
)

The NOT ISBLANK part copies Qlik's behaviour: a selection in Region can never include records where Region is null. Remove it if you want blank regions included.

+= (union with the selection)

DAX has no += shortcut. Build the set of values explicitly. TREATAS is needed because a UNION with a table constructor loses the column lineage.

DAX
Sales selection plus North =
CALCULATE (
    [Sales],
    TREATAS ( UNION ( VALUES ( Customer[Region] ), { "North" } ), Customer[Region] )
)

Gotchas and behaviour differences

  • VALUES(Customer[Region]) returns the values that are *visible* in the current filter context. That is closer to Qlik's possible values than to the values the user explicitly clicked, so cross-filtering from other slicers changes the result.
  • Plain Customer[Region] <> "North" without KEEPFILTERS replaces the Region filter. That gives you {<Region={"*"}-{'North'}>} (all regions except North), not "my selection minus North".
  • In a visual grouped by Region, KEEPFILTERS also intersects with the row's own Region. Without it, every row would show the same number.

Official documentation

Related pages

Spotted an error or a better pattern? QlikToDax is maintained by a working BI consultant; corrections are welcome via the About page. Last reviewed 2026-10-25.