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.
Hi everyone, I want to display the revenue of each product where its productID is greater than 10. I have a Dax formula as bellow:
Revenue of productID greater than 10 := CALCULATE(Sales[Sum revenue],'Product'[ProductID]>10))
This return a table that is not as expected because the revenue is the same with all productIDs:
When I modify the Dax to:
Revenue of productID greater than 10 =
Var productIDContext = VALUES('Product'[ProductID])
return CALCULATE(Sales[Sum revenue],'Product'[ProductID]>10,productIDContext)
It returns the result as expected
In conclusion, I want to what variable productIDContext is really doing in this Dax formulae, it seems that the filter: 'Product'[ProductID]>10 has overwritten the filter context of productID outside the calculation function so we need productIDContext to regain it, but I still could not understand exactly the under the mechanism of Dax to merge the initial filter context of productID outside the Calculate function and 2 filter parameters inside the Calculate function. Can someones please explain this to me? Sorry for my bad english.
Solved! Go to Solution.
Hi,
When you write
CALCULATE(
[Sum revenue],
'Product'[ProductID]>10
)
DAX actually goes away and does this:
CALCULATE(
[Sum revenue],
FILTER(
ALL('Product'[ProductID]),
'Product'[ProductId] > 10
)
)
eg it removes any existing filters on product id (eg the ones coming from the matrix rows and then it adds a new filter to just get ids greater than 10.
In the measure that is working it does the same but VALUES('Product'[ProductId]) add back the existing Product Ids that were in the filter context to start with.
Thanks for you your support
Hi,
When you write
CALCULATE(
[Sum revenue],
'Product'[ProductID]>10
)
DAX actually goes away and does this:
CALCULATE(
[Sum revenue],
FILTER(
ALL('Product'[ProductID]),
'Product'[ProductId] > 10
)
)
eg it removes any existing filters on product id (eg the ones coming from the matrix rows and then it adds a new filter to just get ids greater than 10.
In the measure that is working it does the same but VALUES('Product'[ProductId]) add back the existing Product Ids that were in the filter context to start with.
@bcdobbs is correct. VALUES is restoring the local ProductId filter context that CALCULATE replaces.
I just wanted to suggest using KEEPFILTERS in your measure like this rather than VALUES:
CALCULATE (
Sales[Sum revenue],
KEEPFILTERS ( 'Product'[ProductID] > 10 )
)
User | Count |
---|---|
22 | |
11 | |
8 | |
6 | |
6 |
User | Count |
---|---|
25 | |
12 | |
11 | |
7 | |
6 |