Power BI is turning 10! Tune in for a special live episode on July 24 with behind-the-scenes stories, product evolution highlights, and a sneak peek at what’s in store for the future.
Save the dateEnhance your career with this limited time 50% discount on Fabric and Power BI exams. Ends August 31st. Request your voucher.
Hello,
I have the following code that is part of a bigger measure:
Measure ORDER2 =
Var _Product=SELECTEDVALUE('Slicer'[PRODUCT])
Var _Store=SELECTEDVALUE('SlicerStore'[STORE_ID])
Var _Year=SELECTEDVALUE('SlicerYear'[YEAR_ID])
Var _ProductID=CALCULATETABLE(VALUES('ProductDim'[PRODUCT_ID]),'ProductDim'[PRODUCT]=_Product)
Var _StoreID=CALCULATETABLE(VALUES('StoreDim'[STORE_ID]),'StoreDim'[STORE_ID]=_Store)
Var _YearID=CALCULATETABLE(VALUES('YearDim'[YEAR_ID]),'YearDim'[YEAR_ID]=_Year)
Var _table1=CALCULATETABLE(VALUES('OrdersFact'[CUSTOMER_ID]),'OrdersFact'[PRODUCT_ID]=_ProductID, OrdersFact[Store]=_StoreID, 'OrdersFact'[Year]=_YearID)
We have 3 slicers one for Product, Store, Year which correspond to three dimensions related to the Orders Fact. We want to change _table1 variable so that when we don't select a value in the slicer (or select all values), the filter in the CALCULATETABLE expression will not filter rows, that is to say: the filter should apply only when we have a selected value in the corresponding slicer. What would be the best and most scalable solution that would work for 3 or more filters, taking into account that we may have all combinations of slicers selections (some have a value selected, some not).
Thank you !
Solved! Go to Solution.
Hello @CMunteanu
You could use a function like HASONEFILTER to check whether there is a single value filtered on a the slicer columns.
The "negation" of the HASONEFILTER check could then be OR-ed with each of the existing boolean conditions used within CALCULATETABLE for _table1.
Using variables to store these additional checks, the result would be something like this:
VAR _SlicerProduct_SingleFilter =
HASONEFILTER ( 'Slicer'[PRODUCT] )
VAR _SlicerStore_SingleFilter =
HASONEFILTER ( 'SlicerStore'[STORE_ID] )
VAR _SlicerYear_SingleFilter =
HASONEFILTER ( 'SlicerYear'[YEAR_ID] )
VAR _table1 =
CALCULATETABLE (
VALUES ( 'OrdersFact'[CUSTOMER_ID] ),
'OrdersFact'[PRODUCT_ID] = _ProductID || NOT _SlicerProduct_SingleFilter,
'OrdersFact'[Store] = _StoreID || NOT _SlicerStore_SingleFilter,
'OrdersFact'[Year] = _YearID || NOT _SlicerYear_SingleFilter
)
I think this would be the safest way to write it. You could also write the conditions like this, assuming there are always at least two values available on the slicers:
'OrdersFact'[PRODUCT_ID] = _ProductID || ISBLANK ( _ProductID )
Does the above code work for you?
Hello @CMunteanu
You could use a function like HASONEFILTER to check whether there is a single value filtered on a the slicer columns.
The "negation" of the HASONEFILTER check could then be OR-ed with each of the existing boolean conditions used within CALCULATETABLE for _table1.
Using variables to store these additional checks, the result would be something like this:
VAR _SlicerProduct_SingleFilter =
HASONEFILTER ( 'Slicer'[PRODUCT] )
VAR _SlicerStore_SingleFilter =
HASONEFILTER ( 'SlicerStore'[STORE_ID] )
VAR _SlicerYear_SingleFilter =
HASONEFILTER ( 'SlicerYear'[YEAR_ID] )
VAR _table1 =
CALCULATETABLE (
VALUES ( 'OrdersFact'[CUSTOMER_ID] ),
'OrdersFact'[PRODUCT_ID] = _ProductID || NOT _SlicerProduct_SingleFilter,
'OrdersFact'[Store] = _StoreID || NOT _SlicerStore_SingleFilter,
'OrdersFact'[Year] = _YearID || NOT _SlicerYear_SingleFilter
)
I think this would be the safest way to write it. You could also write the conditions like this, assuming there are always at least two values available on the slicers:
'OrdersFact'[PRODUCT_ID] = _ProductID || ISBLANK ( _ProductID )
Does the above code work for you?
Hi Owen,
Many thanks for your answer, it works perfectly fine.
Regards
Check out the July 2025 Power BI update to learn about new features.
This is your chance to engage directly with the engineering team behind Fabric and Power BI. Share your experiences and shape the future.
User | Count |
---|---|
23 | |
10 | |
10 | |
9 | |
7 |