Find everything you need to get certified on Fabric—skills challenges, live sessions, exam prep, role guidance, and more.
Get startedGrow your Fabric skills and prepare for the DP-600 certification exam by completing the latest Microsoft Fabric challenge.
A small data model with two tables <Dfact> <Ddim>
<Ddim>[SubCategory] (1) --- (*) <Dfact>[SubCategory]
The first query returns 3.
Whereas the second query returns 1.
<Dfact>
ID | SubCategory |
1 | SC1 |
2 | SC1 |
3 | SC2 |
4 | SC2 |
5 | SC3 |
6 | SC3 |
<Ddim>
Category | SubCategory |
C1 | SC1 |
C1 | SC2 |
C2 | SC3 |
C2 | SC4 |
C3 | SC5 |
EVALUATE
CALCULATETABLE (
{ COUNTROWS ( Ddim ) },
Dfact,
Dfact[SubCategory] = "SC1"
)
EVALUATE
SUMMARIZECOLUMNS (
Dfact,
FILTER ( ALL ( Dfact[SubCategory] ), Dfact[SubCategory] = "SC1" ),
"count", COUNTROWS ( Ddim )
)
What's the difference between the 2 quries?
Thanks in advance.
Solved! Go to Solution.
This is what happens under the hood for query 1,
For any CALCULATE() / CALCULATETABLE(), DAX engine evaluates all filter arguments ( 1.expanded table and 2.predicate in your case ) independently from each other before final evaluation.
More specifically,
1.expanded table
filters Ddim via [related C] and [related SC] (data lineage kept)
2.predicate
doesn't propagate the filtering to Ddim due to 1:* direction constraint by default.
An alternative to query 2 is
Expertise = List.Accumulate( {Days as from Today}, {Skills and Knowledge}, (Current, Everyday) => Current & Day.LeanAndPractise(Everyday) ) |
This is what happens under the hood for query 1,
For any CALCULATE() / CALCULATETABLE(), DAX engine evaluates all filter arguments ( 1.expanded table and 2.predicate in your case ) independently from each other before final evaluation.
More specifically,
1.expanded table
filters Ddim via [related C] and [related SC] (data lineage kept)
2.predicate
doesn't propagate the filtering to Ddim due to 1:* direction constraint by default.
An alternative to query 2 is
Expertise = List.Accumulate( {Days as from Today}, {Skills and Knowledge}, (Current, Everyday) => Current & Day.LeanAndPractise(Everyday) ) |
Many thanks!
Now I know what I misunderstood about the CALCULATE.
I mistakenly thought CALCULATE merges the filter arguments by intersection before applying to the data model as below:
The arguments are evaluated independently from each other in the CALCULATE, and they filter the corresponding columns separately before final evaluation.
Hi,
I am not sure what is your desired outcome, but regarding the first one,
it shows the same result if it is written like below.
And, having the condition like the below on many side of the relationship
Dfact[SubCategory] = "SC1"
does not influence on counting rows in one side of the relationship.
I assume you want to see this result = 1, and please try something like below.
RELATEDTABLE function (DAX) - DAX | Microsoft Learn
If this post helps, then please consider accepting it as the solution to help other members find it faster, and give a big thumbs up.
Thank you!
I was wondering how CALCULATE merges the filter arguments and yes I was confused why it's not 1.
I mistakenly thought CALCULATE would apply the filter Dfact[SubCategory] = "SC1" to the first filter argument <Dfact>.
Join the community in Stockholm for expert Microsoft Fabric learning including a very exciting keynote from Arun Ulag, Corporate Vice President, Azure Data.
User | Count |
---|---|
70 | |
37 | |
21 | |
18 | |
15 |
User | Count |
---|---|
126 | |
32 | |
28 | |
24 | |
24 |