Register now to learn Fabric in free live sessions led by the best Microsoft experts. From Apr 16 to May 9, in English and Spanish.
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 )
)
Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City
Check out the April 2024 Power BI update to learn about new features.
User | Count |
---|---|
37 | |
25 | |
19 | |
14 | |
8 |
User | Count |
---|---|
68 | |
48 | |
45 | |
18 | |
15 |