
CORE AGGREGATIONS
━━━━━━━━━━━━━━━━━━━━
SUM vs SUMX?
-> SUM sums a column directly
-> SUMX evaluates row by row THEN sums
-> Example: SUMX(Sales, Sales[Qty] * Sales[SalesAmount])
Always use DIVIDE over /:
-> DIVIDE(Sales[Amount], Sales[Qty]) handles zero errors safely
━━━━━━━━━━━━━━━━━━━━
FILTER CONTEXT
━━━━━━━━━━━━━━━━━━━━
-> CALCULATE → modifies filter context
-> ALL → removes ALL filters
-> ALLEXCEPT → keeps filters on specified columns
-> ALLSELECTED → respects user slicer selections
-> REMOVEFILTERS → removes filters from specific columns
━━━━━━━━━━━━━━━━━━━━
TIME INTELLIGENCE
━━━━━━━━━━━━━━━━━━━━
-> YTD: TOTALYTD(SUM(Sales[Amount]), Date[Date])
-> vs Last Year: CALCULATE(SUM(Sales[Amount]), SAMEPERIODLASTYEAR(Date[Date]))
-> MoM Growth: DIVIDE(SUM(Sales[Amount]), CALCULATE(SUM(Sales[Amount]), PREVIOUSMONTH(Date[Date]))) - 1
-> 30-Day Moving Avg: AVERAGEX(DATESINPERIOD(Date[Date], MAX(Date[Date]), -30, DAY), Sales[Amount])
-> Last 6 Months: CALCULATE(SUM(Sales[Amount]), DATESINPERIOD(Date[Date], TODAY(), -6, MONTH))
━━━━━━━━━━━━━━━━━━━━
RANKING & RUNNING TOTALS
━━━━━━━━━━━━━━━━━━━━
-> Rank: RANKX(ALL(Sales[ProductID]), SUM(Sales[Amount]), , DESC)
-> Running Total: CALCULATE(SUM(Sales[Amount]), FILTER(ALL(Date[Date]), Date[Date] <= MAX(Date[Date])))
-> % of Total: DIVIDE(SUM(Sales[Amount]), CALCULATE(SUM(Sales[Amount]), ALL(Sales)))
━━━━━━━━━━━━━━━━━━━━
ADVANCED DAX
━━━━━━━━━━━━━━━━━━━━
-> RELATED → fetches from related table via relationship
-> LOOKUPVALUE → fetches without a relationship
-> EARLIER → references outer row context during iteration
-> TREATAS → creates virtual relationships between columns
-> CROSSFILTER → changes relationship filter direction
-> SUMMARIZE → creates grouped summary tables
-> CALCULATETABLE → returns a filtered table (not a value)
-> RLS: USERNAME() → filters rows by logged-in user