3.2.5. Calculation Groups
💡 First Principle: Many measures differ only in the time logic or transformation wrapped around them: Sales YTD, Margin YTD, Units YTD; Sales PY, Margin PY, Units PY. Calculation groups factor out that wrapper. You write each transformation once as a calculation item, and it applies to whichever measure the visual is showing.
A calculation group is a special table with a single column whose values are calculation items. Each item contains a DAX expression that uses SELECTEDMEASURE() as a placeholder for "the measure currently being evaluated":
-- Calculation group: Time Calculations
Current = SELECTEDMEASURE ()
YTD = CALCULATE ( SELECTEDMEASURE (), DATESYTD ( 'Date'[Date] ) )
PY = CALCULATE ( SELECTEDMEASURE (), SAMEPERIODLASTYEAR ( 'Date'[Date] ) )
YoY % =
VAR CurrentValue = SELECTEDMEASURE ()
VAR PriorValue = CALCULATE ( SELECTEDMEASURE (), SAMEPERIODLASTYEAR ( 'Date'[Date] ) )
RETURN DIVIDE ( CurrentValue - PriorValue, PriorValue )
Put the calculation group's column on a matrix's columns (or in a slicer) and any measure in the values well is transformed: three base measures times four items yields twelve results from seven definitions instead of twelve hand-written measures.
Key properties and functions:
- Create calculation groups in Power BI Desktop's Model view (New calculation group) or with external tools such as Tabular Editor; in Desktop you can also author them through TMDL view.
- Creating a calculation group sets the model's Discourage implicit measures property, because calculation items apply only to explicit measures.
- Format string expressions (dynamic format strings) let an item change formatting: YoY % displays as a percentage even when the base measure is currency.
SELECTEDMEASURENAME()andISSELECTEDMEASURE([Measure])let an item behave differently for specific measures (for example, skip YTD for a ratio).- Ordinal controls item sort order; precedence decides evaluation order when multiple calculation groups apply at once (for example, a time group and a currency-conversion group).
⚠️ Exam Trap: Calculation items don't affect implicit measures (a raw column dragged into a visual). When a stem says "after adding a calculation group, a visual showing Sum of SalesAmount no longer works as expected," the fix is replacing the implicit measure with an explicit one, not editing the calculation item.
Reflection Question: A model has 15 base measures and the business wants Current, MTD, QTD, YTD, PY, and YoY % for each. Calculate how many measures you'd maintain with and without a calculation group, and name the one function that makes the difference possible.