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 QueryDAX
Когда работаетНа этапе загрузки и подготовки данныхВ модели данных: вычисляемые столбцы и таблицы рассчитываются во время обновления данных, а меры — во время работы с отчётом.
Что делаетОчищает, фильтрует, объединяет таблицы из разных источниковВыполняет расчёты в модели данных: создаёт меры, вычисляемые столбцы и таблицы.
Язык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 ошибки и как их избежать.

  1. Путаница между контекстом строки и контекстом фильтрации. Первый определяет текущую строку, в частности в SUMX, второй — набор данных, попадающий в расчёт под действием фильтров, связей и самой формулы.
  2. Вычисляемый столбец вместо меры. Столбец рассчитывается во время обновления и хранится в модели, а мера — во время работы с отчётом и реагирует на фильтры. Для динамического показателя обычно нужна мера.
  3. Деление без проверки знаменателя. Если он может равняться нулю или быть пустым, используйте DIVIDE: Маржа % = DIVIDE([Прибыль], [Выручка]). По умолчанию функция вернёт BLANK; третьим аргументом можно задать другое значение.
  4. Неоптимальные фильтры в CALCULATE. Для простых условий лучше фильтровать непосредственно по столбцу, а FILTER использовать для более сложной логики.
  5. Непонятные названия мер. «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-моделью:

  1. Аудит бизнес-логики. Команда уточняет, как компания считает каждую метрику, и согласовывает единые правила.
  2. Проектирование модели данных. Структура таблиц, таблица дат и связи между ними определяют дальнейшую сложность DAX-формул.
  3. Написание и оптимизация мер. Быстродействие проверяют на данных, по объёму и структуре приближённых к рабочим.
  4. Документирование логики. Для сложных метрик фиксируют источники данных и правила расчёта.

Бесплатная консультация от IWIS

Если DAX формулы дают неправильный результат, дашборд работает медленно или показатели не сходятся, проверять нужно модель, связи, фильтры, бизнес-логику и сами формулы.

На бесплатной консультации команда IWIS:

  • проанализирует структуру данных и DAX-модель;
  • найдёт причины расхождений в расчётах;
  • подскажет, какие метрики стоит переделать или оптимизировать;
  • посоветует формат внедрения бизнес-аналитики на базе Power BI под ваши процессы.

Разобраться с вашей DAX-моделью

Оставьте заявку на бесплатную консультацию — обсудим вашу модель данных и расчёты.

Оставить заявку
Ксения Баланюк
Об авторе

Ксения Баланюк

Head of PMO 15

Руководитель проектного отдела IWIS. Координирует портфель проектов компании, обеспечивает слаженную работу команд и своевременную доставку продукта. Занимается внедрением методологий, оптимизацией процессов и коммуникацией между бизнесом и разработкой.

Частые вопросы

Все вопросы

Что такое 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, а после этого — к функциям временной аналитики. Для классических расчётов по периодам нужно также создать и правильно настроить отдельную таблицу дат.