DAX формулы в Power BI: практический гайд

DAX отвечает за расчёты внутри модели Power BI. Разбираем базовые функции, временную аналитику, типичные ошибки и готовые формулы для бизнес-отчётов.
Когда водитель после лет на автомате садится за руль механики, знакомые движения вдруг перестают работать. Похожая ситуация с Excel и Power BI: функции SUM, IF или FILTER знакомы, но логика расчётов другая. DAX формулы в Power BI работают с контекстом строк и фильтров — именно это требует смены привычного подхода.
В гайде разберём, что такое DAX, чем он отличается от Power Query, какие функции нужны прежде всего и где возникают типичные ошибки. Материал подойдёт как DAX для начинающих, так и для аналитиков с опытом.
Что такое DAX и зачем он нужен
DAX — это язык формул и выражений Microsoft для Power BI, Analysis Services и Power Pivot в Excel. С помощью DAX создают меры, вычисляемые столбцы и таблицы. Результат расчёта зависит от структуры модели и контекста, в котором выполняется формула.
Excel-формулы обычно обращаются к ячейкам и диапазонам, тогда как DAX формулы работают с таблицами и столбцами модели. Например, мера с SUM пересчитывается в соответствии с текущими фильтрами отчёта.
Зачем нужен DAX аналитику:
- Расчёт бизнес-метрик: маржа, конверсия, LTV — показатели, которые невозможно получить простым суммированием столбца.
- Временная аналитика: сравнение год к году, нарастающий итог, показатели на начало/конец периода.
- Динамические расчёты: меры пересчитываются в соответствии с выбранными пользователем фильтрами и не хранят отдельный результат для каждой строки.
Если компания использует Power BI для бизнеса, DAX нужен для собственных метрик и расчётов, которые меняются вместе с фильтрами отчёта.
DAX vs Power Query: в чём разница
Power Query готовит и преобразует данные до загрузки в модель, а DAX выполняет расчёты уже внутри модели.
| Критерий | Power Query | DAX |
|---|---|---|
| Когда работает | На этапе загрузки и подготовки данных | В модели данных: вычисляемые столбцы и таблицы рассчитываются во время обновления данных, а меры — во время работы с отчётом. |
| Что делает | Очищает, фильтрует, объединяет таблицы из разных источников | Выполняет расчёты в модели данных: создаёт меры, вычисляемые столбцы и таблицы. |
| Язык | M (Power Query M) | DAX (Data Analysis Expressions). |
| Результат | Новая таблица или столбец в модели | Зависит от типа расчёта: мера меняет результат в соответствии с текущими фильтрами, а вычисляемые столбцы и таблицы хранят рассчитанные значения в модели. |
| Пример задачи | Объединить данные из CRM и Excel-файла в одну таблицу | Посчитать долю повторных клиентов от общего количества |
Power Query отвечает за подготовку данных, а DAX функции — за расчёты в модели. Синтаксически правильная DAX-формула всё равно может дать ошибочный результат из-за ошибки в логике, связях или контексте.
Базовые функции DAX
DAX функции не нужно учить все сразу. Для начала важнее освоить базовые функции и понять, как контекст влияет на расчёт.
CALCULATE
CALCULATE — одна из ключевых DAX функций: она вычисляет выражение в изменённом контексте фильтрации.
Базовый синтаксис:
CALCULATE(<выражение>, <фильтр1>, <фильтр2>, …)
Пример: нужно посчитать продажи категории «Электроника», даже если через поле Product[Category] в отчёте выбрана другая категория:
Продажи Электроники = CALCULATE(SUM(Sales[Amount]), Product[Category] = “Электроника”)
CALCULATE заменит текущий фильтр на Product[Category], но фильтры по периоду, региону и т. д. продолжат действовать. Это один из базовых принципов написания более сложных DAX формул.
SUM, SUMX и итеративные функции
SUM — самая простая агрегатная функция, она суммирует значения одного столбца:
Общая сумма = SUM(Sales[Amount])
Для расчётов, где выражение нужно выполнить для каждой строки, используют итеративные функции SUMX, AVERAGEX, COUNTX. Они вычисляют выражение строка за строкой, а затем агрегируют результат.
Классический пример — расчёт выручки, когда цена и количество хранятся в разных столбцах:
Выручка = SUMX(Sales, Sales[Количество] * Sales[Цена])
В этом примере SUM не подходит, поскольку нужно сначала перемножить значения в каждой строке.
Time intelligence — формулы для периодов
DAX функции даты используют для сравнения периодов, например месяц к месяцу, год к году или для нарастающего итога.
- SAMEPERIODLASTYEAR возвращает набор дат за соответствующий период предыдущего года.
- DATESYTD возвращает набор дат от начала года до текущей даты в расчёте.
- PREVIOUSMONTH и PREVIOUSQUARTER возвращают даты предыдущего месяца или квартала.
- DATEADD смещает набор дат на заданный промежуток времени.
Эти функции обычно используют внутри CALCULATE, чтобы на основе полученного набора дат рассчитать нужный показатель.
Пример формулы для сравнения продаж год к году:
Продажи прошлого года = CALCULATE(SUM(Sales[Amount]), SAMEPERIODLASTYEAR(Calendar[Date]))
Такие формулы в Power BI используют в KPI-дашбордах для автоматического сравнения показателей между периодами.
Для классической временной аналитики нужна отдельная таблица дат с уникальными значениями без пропусков и пустых значений, которая охватывает полные годы и отмечена в Power BI как таблица дат.
Типичные ошибки при написании DAX
Если вы только учитесь, как писать DAX формулы, стоит прежде всего разобраться с ошибками, которые напрямую влияют на результат расчётов. Вот самые распространённые DAX ошибки и как их избежать.
- Путаница между контекстом строки и контекстом фильтрации. Первый определяет текущую строку, в частности в SUMX, второй — набор данных, попадающий в расчёт под действием фильтров, связей и самой формулы.
- Вычисляемый столбец вместо меры. Столбец рассчитывается во время обновления и хранится в модели, а мера — во время работы с отчётом и реагирует на фильтры. Для динамического показателя обычно нужна мера.
- Деление без проверки знаменателя. Если он может равняться нулю или быть пустым, используйте DIVIDE: Маржа % = DIVIDE([Прибыль], [Выручка]). По умолчанию функция вернёт BLANK; третьим аргументом можно задать другое значение.
- Неоптимальные фильтры в CALCULATE. Для простых условий лучше фильтровать непосредственно по столбцу, а FILTER использовать для более сложной логики.
- Непонятные названия мер. «Measure1» усложняет поддержку модели, тогда как «Маржа % текущего месяца» сразу показывает назначение расчёта.
Примеры DAX-формул для бизнес-отчётов
Ниже несколько DAX формул для типичных бизнес-отчётов:
Доля повторных клиентов:
% Повторных клиентов = VAR ПовторныеКлиенты = FILTER( VALUES(Sales[ClientID]), CALCULATE(DISTINCTCOUNT(Sales[OrderNumber])) > 1 ) RETURN DIVIDE( COUNTROWS(ПовторныеКлиенты), DISTINCTCOUNT(Sales[ClientID]) )
Повторным здесь считается клиент с более чем одним уникальным заказом в текущем контексте отчёта.
Нарастающий итог продаж с начала года:
Продажи YTD = TOTALYTD(SUM(Sales[Amount]), Calendar[Date])
Динамика относительно прошлого месяца (в %):
Продажи прошлого месяца = CALCULATE( [Общая сумма], PREVIOUSMONTH(Calendar[Date]) )
Динамика MoM % = DIVIDE( [Общая сумма] – [Продажи прошлого месяца], [Продажи прошлого месяца] )
ТОП-N товаров по выручке (для рейтинговых визуалов):
Ранг товара = RANKX(ALL(Product[Название]), [Выручка], , DESC)
Чтобы получить именно ТОП-N товаров, после расчёта рейтинга нужно применить к визуализации соответствующий фильтр, например Ранг товара <= 10.
Активные клиенты за последние 90 дней:
Активные клиенты 90д = CALCULATE( DISTINCTCOUNT(Sales[ClientID]), DATESINPERIOD(Calendar[Date], MAX(Calendar[Date]), -90, DAY) )
Как IWIS строит сложные DAX-модели для клиентов
Среди проектов IWIS по бизнес-аналитике есть решения для Планеты Кино, Helen Marlen, BAT, Swiss Krono и других компаний. В сложных моделях Power BI бизнес-логика часто выходит далеко за пределы базовых SUM и CALCULATE.
Типичная последовательность работы команды над DAX-моделью:
- Аудит бизнес-логики. Команда уточняет, как компания считает каждую метрику, и согласовывает единые правила.
- Проектирование модели данных. Структура таблиц, таблица дат и связи между ними определяют дальнейшую сложность DAX-формул.
- Написание и оптимизация мер. Быстродействие проверяют на данных, по объёму и структуре приближённых к рабочим.
- Документирование логики. Для сложных метрик фиксируют источники данных и правила расчёта.
Бесплатная консультация от IWIS
Если DAX формулы дают неправильный результат, дашборд работает медленно или показатели не сходятся, проверять нужно модель, связи, фильтры, бизнес-логику и сами формулы.
На бесплатной консультации команда IWIS:
- проанализирует структуру данных и DAX-модель;
- найдёт причины расхождений в расчётах;
- подскажет, какие метрики стоит переделать или оптимизировать;
- посоветует формат внедрения бизнес-аналитики на базе Power BI под ваши процессы.
Разобраться с вашей DAX-моделью
Оставьте заявку на бесплатную консультацию — обсудим вашу модель данных и расчёты.
Оставить заявкуЧастые вопросы
Что такое DAX в Power BI?
DAX (Data Analysis Expressions) — язык формул для расчётов в Power BI. DAX работает с таблицами, столбцами и связями модели данных, а результат мер меняется в зависимости от текущих фильтров отчёта.
Для чего нужен DAX?
DAX позволяет создавать собственные бизнес-метрики: например, рассчитывать маржинальность, сравнивать показатели между периодами или строить нарастающий итог. Power BI может работать и без собственных DAX-формул, но DAX в Power BI нужен для расчётов, которых нет в исходных данных и которые должны меняться в зависимости от фильтров отчёта.
Чем measure отличается от calculated column?
Вычисляемый столбец рассчитывается во время обновления данных, а его значения хранятся в модели. Мера вычисляется во время работы с отчётом и реагирует на текущие фильтры, например на выбранный регион или период. Для динамических показателей обычно используют меры, а вычисляемые столбцы нужны для расчётов на уровне отдельных строк.
Какие DAX функции нужно знать аналитику?
Достаточно уверенно владеть базовым набором: CALCULATE (изменение контекста фильтров), SUM и SUMX (агрегация), DIVIDE (безопасное деление) и функциями временной аналитики — SAMEPERIODLASTYEAR, DATESYTD, TOTALYTD.
Как работает функция CALCULATE в DAX?
CALCULATE вычисляет выражение после изменения условий фильтрации. Например, с её помощью можно посчитать продажи определённой категории, заменив текущий фильтр именно на категорию товара, но сохранив другие фильтры отчёта. Поэтому понимание CALCULATE нужно для построения многих более сложных DAX формул.
С каких формул DAX начать?
DAX для начинающих стоит начинать с базовых агрегатных функций SUM, AVERAGE и COUNT, затем перейти к DIVIDE и CALCULATE, а после этого — к функциям временной аналитики. Для классических расчётов по периодам нужно также создать и правильно настроить отдельную таблицу дат.
Интересные материалы для вас
Что такое дашборд: виды, примеры и как бизнес использует дашборды для принятия решений
Большинство знают Флоренс Найтингейл как медсестру....
Читать далее Что такое дашборд: виды, примеры и как бизнес использует дашборды для принятия решений