Video by: Reid Havens
DAX has shipped more new surface area since 2022 than in the five years before it, and most of that never made it into anyone's habits. Part 4 of the series covers the five additions that change how you actually write code, where each one earns its keep, and where it still falls short.
User-defined functions are the headline. Reusable, parameterized DAX stored as a model object, so the pattern you keep copying between six measures finally lives in one place. We build one, call it with and without default parameters, and get into the limitations that are still there in the current release.
From there it's window functions (OFFSET, INDEX, WINDOW, RANK, ROWNUMBER) for row-relative math that time intelligence can't reach, INFO functions for querying your own model metadata as a table, EVALUATEANDLOG for debugging without littering the model with temporary measures, and dynamic format strings that follow context instead of sitting fixed on the measure.
The last stretch runs through the smaller additions that still come up: TREATAS, GROUPBY, DETAILROWS, ERROR, and TOCSV/TOJSON. None of them need a section of their own, but skipping them leaves gaps.
RELATED CONTENT 🔗
DAX Foundations Guide (Series Part 1)
DAX Context Guide (Series Part 2)
DAX Patterns Guide (Series Part 3)
DAX Modern Guide (Series Part 4)
