Join us at FabCon Atlanta from March 16 - 20, 2026, for the ultimate Fabric, Power BI, AI and SQL community-led event. Save $200 with code FABCOMM.
Register now!The Power BI Data Visualization World Championships is back! Get ahead of the game and start preparing now! Learn more
Can someone please guide me why does my formula work in the form containing variables, but when I move their contents back into the formula, it doesn't?
The form containing variables:
Result =
var _parent = [Parent]
var _maxvalue =
CALCULATE(
MAX(Table1[Value]),
ALLEXCEPT(Table2,Table2[Parent])
)
return
CONCATENATEX(
CALCULATETABLE(
FILTER(
ALL(Table1),
Table1[Value] = _maxvalue &&
RELATED(Table2[Parent]) = _parent
)
),
[Name],","
)
The form without variables:
Result2 =
CONCATENATEX(
CALCULATETABLE(
FILTER(
ALL(Table1),
Table1[Value] = CALCULATE(
MAX(Table1[Value]),
ALLEXCEPT(Table2,Table2[Parent])
)
&& RELATED(Table2[Parent]) = [Parent]
)
),
[Name],","
)
Solved! Go to Solution.
In the first example with the variables the value of the variables is evaluated once and captured, then the rest of the expression is evaluated.
In the second expression without the variables both the [Parent] measure and the MAX() expression are re-evaluated for each row of Table1 (since they are referenced inside the FILTER function which effectively iterates row by row over Table1). This may or may not affect the [Parent] measure depending on your data and how the two tables are related, but it will definitely have a big impact on the calculation of MAX( Table1[Value] ).
Effectively as the FILTER function iterates row by row over Table1 it calculates the MAX of Table1[Value] for that row which gives you the current value for that row. This in turn will return every row in Table1 as you are effectively checking if the amount in the [Value] column is equal to itself. You could probably fix this by adding an ALL(table1) as a parameter in your calculation of the MAX(), but personally I find using variables simpler (and they perform better also).
In the first example with the variables the value of the variables is evaluated once and captured, then the rest of the expression is evaluated.
In the second expression without the variables both the [Parent] measure and the MAX() expression are re-evaluated for each row of Table1 (since they are referenced inside the FILTER function which effectively iterates row by row over Table1). This may or may not affect the [Parent] measure depending on your data and how the two tables are related, but it will definitely have a big impact on the calculation of MAX( Table1[Value] ).
Effectively as the FILTER function iterates row by row over Table1 it calculates the MAX of Table1[Value] for that row which gives you the current value for that row. This in turn will return every row in Table1 as you are effectively checking if the amount in the [Value] column is equal to itself. You could probably fix this by adding an ALL(table1) as a parameter in your calculation of the MAX(), but personally I find using variables simpler (and they perform better also).
Check out the November 2025 Power BI update to learn about new features.
Advance your Data & AI career with 50 days of live learning, contests, hands-on challenges, study groups & certifications and more!
| User | Count |
|---|---|
| 58 | |
| 43 | |
| 41 | |
| 23 | |
| 17 |
| User | Count |
|---|---|
| 188 | |
| 118 | |
| 96 | |
| 64 | |
| 45 |