Что такое DAX и базовые функции
Знакомимся с языком формул DAX и его базовыми агрегатными функциями.
DAX (Data Analysis Expressions) — язык формул Power BI для вычисления показателей поверх модели данных.
Что такое DAX и зачем он
Модель и визуализации показывают данные, но настоящие показатели — выручку, средний чек, конверсию, рост — нужно посчитать. Для этого служит DAX. Внешне его формулы напоминают функции Excel (SUM, IF, AVERAGE), но работают они не над ячейками, а над столбцами и таблицами целиком, с учётом текущего фильтра отчёта. Это смещение от «ячейки» к «столбцу в контексте» — главное, что нужно перестроить в голове после Excel.
Синтаксис
Формула DAX обращается к столбцу через имя таблицы и столбца в квадратных скобках:
Выручка = SUM( Sales[amount] )
Количество заказов = COUNTROWS( Sales )
Средний чек = DIVIDE( SUM(Sales[amount]), COUNTROWS(Sales) )Здесь Sales[amount] — столбец «сумма» в таблице Sales. Функция SUM складывает все его значения в текущем фильтре: если на отчёте выбран регион «Юг» и июнь, сложатся только подходящие строки.
Базовые агрегатные функции
| Функция | Что делает |
SUM | сумма значений столбца |
AVERAGE | среднее значение |
MIN / MAX | минимум / максимум |
COUNT | число непустых значений столбца |
COUNTROWS | число строк таблицы |
DISTINCTCOUNT | число уникальных значений |
Особняком стоит DIVIDE — безопасное деление: DIVIDE(a, b) вернёт пусто (а не ошибку) при делении на ноль. В аналитике делений много (доли, средние, конверсии), поэтому DIVIDE используют всегда вместо оператора /.
Маленькая иллюстрация логики агрегата
Чтобы прочувствовать, что делает SUM по столбцу, посмотрим на чистом Python (DAX не исполняется в браузере):
amounts = [100, 250, 90, 320, 150]
print("Выручка (SUM):", sum(amounts))
print("Средний чек (AVERAGE):", round(sum(amounts) / len(amounts), 2))
print("Заказов (COUNTROWS):", len(amounts))Вывод:
Выручка (SUM): 910 Средний чек (AVERAGE): 182.0 Заказов (COUNTROWS): 5
Как работает под капотом
Когда вы кладёте меру Выручка на карточку, Power BI определяет текущий контекст фильтра (что выбрано в срезах, на какой ячейке таблицы считаем), сужает столбец Sales[amount] до подходящих строк и складывает их движком VertiPaq. Один и тот же DAX даёт разные числа в разных местах отчёта — потому что меняется контекст. Эта зависимость от контекста — суть DAX, и ей посвящён отдельный урок.
Частые ошибки
- Делить через
/вместоDIVIDE. Ноль в знаменателе даст ошибку и «сломает» визуал. - Считать DAX «как Excel по ячейкам». DAX работает над столбцами в контексте, а не над отдельными клетками.
- Путать
COUNTиCOUNTROWS. Первая считает непустые значения столбца, вторая — строки таблицы.
Итог
- DAX считает показатели поверх модели, работая над столбцами в текущем фильтре.
- Базовые функции:
SUM,AVERAGE,COUNTROWS,DISTINCTCOUNT; деление — черезDIVIDE. - Одна и та же мера даёт разные числа в разных местах — из-за контекста фильтра.