DAX
DAX — это язык выражений, используемый в таких продуктах корпорации Microsoft, как Power Pivot, Power BI, SQL Server Analysis Services (SSAS, в табличных моделях) и Excel (в Power Pivot), для создания пользовательских вычислений (мер и вычисляемых столбцов) в табличных моделях данных. DAX является функциональным языком, сочетающим элементы формул Microsoft Excel с реляционной логикой, и предназначен для работы со столбцами и таблицами, а не с отдельными ячейками. Полное название — Data Analysis Expressions (выражения анализа данных). Язык был анонсирован в 2009 году в составе надстройки Power Pivot для SQL Server 2008 R2 и Excel 2010 как альтернатива языку многомерных выражений (MDX).
Предпосылки создания и история
До появления DAX аналитики, работающие с многомерными кубами (OLAP), использовали язык MDX, который был сложен для освоения пользователями Excel. С развитием технологий самообслуживаемой бизнес-аналитики (Self-Service BI) Microsoft потребовался инструмент, который позволил бы пользователям, знакомым с формулами Excel, выполнять сложные вычисления на реляционных моделях данных, а не только на многомерных.
DAX был разработан для табличного движка xVelocity (позже переименованного в VertiPaq), который хранит данные в разреженной колоночной структуре в оперативной памяти. Первая публичная версия DAX появилась в 2009 году с выходом Power Pivot для Excel 2010. В 2011 году Microsoft включила DAX в SQL Server 2012 (в режим табличных моделей Analysis Services). С 2015 года DAX является основным языком для моделирования данных в Power BI, которая с момента выхода стала ключевым продуктом Microsoft в области бизнес-аналитики. Версии языка эволюционировали: в 2010—2015 годах был доступен базовый набор функций (статистические, логические, фильтрации), в 2015—2019 годах добавились функции манипуляции таблицами (CALCULATETABLE, GENERATE), а с 2020 года — поддержка оконных функций (WINDOW, INDEX, OFFSET) и улучшенная обработка иерархий (в Power BI Desktop).
Основные понятия и конструкция языка
DAX строго типизирован, но автоматически выполняет неявные преобразования типов (например, число может быть преобразовано в текст при сравнении). Выражение DAX пишется как формула, начинающаяся с символа равенства, после которого следует вызов одной или нескольких функций с аргументами, ссылающимися на таблицы, столбцы или другие выражения.
Ключевые компоненты:
- Контекст вычисления — фундаментальное понятие DAX, отсутствующее в Excel. Различают два типа: контекст строки (задаётся итераторами, такими как SUMX, FILTER) и контекст фильтрации (задаётся фильтрами на столбцах в отчёте или явно в функции CALCULATE). DAX автоматически переключает контексты при выполнении функций итерации.
- Меры — динамические формулы, пересчитываемые для каждого пересечения строк и столбцов в отчёте (например, для каждого года и продукта). Мера вычисляется на лету и не хранится в таблице.
- Вычисляемые столбцы — статические формулы, которые вычисляются при обновлении (обработке) модели данных и сохраняются как часть таблицы в оперативной памяти. Они занимают место и пересчитываются только при загрузке данных.
- Вычисляемые таблицы — результат формулы DAX, который создаёт дополнительную таблицу в модели (например, для создания календаря или вспомогательной таблицы измерений).
Классификация функций DAX
Функции DAX классифицируются по назначению. Ниже перечислены основные категории с примерами:
Функции агрегации
Используются для суммирования, подсчёта средних значений, количеств. Простейшие (SUM, AVERAGE, COUNT) работают только с контекстом фильтрации. Итераторы (SUMX, AVERAGEX, COUNTX) выполняют вычисление по каждой строке таблицы, а затем агрегируют промежуточные результаты. Дополнительно:
- MIN / MAX — минимальное и максимальное значение в столбце.
- MINA / MAXA — работают с логическими и текстовыми значениями, интерпретируя TRUE как 1, а строки — как ошибки.
- COUNTROWS — подсчитывает количество строк в указанной таблице.
- DISTINCTCOUNT — подсчитывает количество уникальных значений в столбце.
- PRODUCT — перемножение значений в столбце (используется редко из-за числовой стабильности).
Функции фильтрации и управления контекстом
Центральная функция — CALCULATE. Она изменяет контекст фильтрации для выражения, позволяя переопределять или добавлять фильтры. Без CALCULATE невозможно выполнять сложные вычисления, зависящие от разных срезов данных. Ключевые функции:
- FILTER — возвращает таблицу, отфильтрованную по логическому условию (используется как аргумент для CALCULATE или для итерации).
- ALL — удаляет все фильтры с указанного столбца или таблицы. ALLEXCEPT — удаляет фильтры со всех столбцов, кроме перечисленных.
- RELATED — извлекает значение из связанной таблицы (аналог ВПР в Excel, но только для связей, созданных в модели данных).
- VALUES — возвращает уникальные значения столбца с учётом текущего контекста.
Функции работы со временем (Time Intelligence)
Используются для расчётов, связанных с датами: год-к-году, остаток, начало-конец периодов. Требуют наличия в модели непрерывной таблицы дат (календаря). Важные функции:
- DATESYTD / DATESQTD / DATESMTD — возвращают год-к-дате (с начала года), квартал-к-дате и месяц-к-дате.
- PREVIOUSMONTH / PREVIOUSQUARTER / PREVIOUSYEAR — сдвигают контекст фильтрации назад.
- SAMEPERIODLASTYEAR — сдвигает на один год назад.
- TOTALYTD / TOTALQTD — удобные обёртки для расчёта накопленных итогов.
Логические и информационные функции
- IF — условное ветвление (возвращает два варианта в зависимости от условия).
- SWITCH — альтернатива вложенным IF (выполняет поиск соответствия или проверяет последовательность логических условий).
- ISBLANK, ISERROR — проверка наличия пустых значений или ошибок.
- AND, OR, NOT — логические операторы.
Математические и статистические функции
- RAND / RANDBETWEEN — генерация случайных чисел (вычисляются при каждом обновлении отчёта).
- ABS, ROUND, INT, MOD — стандартные математические операции.
- PERCENTILE.EXC / PERCENTILE.INC — расчёт перцентилей (доступны в Power BI).
Функции работы с текстом
- CONCATENATEX — объединение текстовых значений по одной строке с разделителем.
- LEFT, RIGHT, MID, UPPER, LOWER — манипуляции со строками, аналог Excel.
- FORMAT — преобразование чисел и дат в текстовую строку с заданным форматом.
- SEARCH, FIND — поиск подстроки.
Принцип работы контекста вычисления
Контекст вычислений — наиболее сложная для понимания составляющая DAX. Каждое выражение вычисляется в двух контекстах одновременно:
- Контекст фильтрации — задаётся внешними фильтрами: срезами (фильтрами) на отчёте (странице, таблице, матрице) и явными фильтрами внутри функции CALCULATE. Он определяет, с каким подмножеством строк таблицы производится работа.
- Контекст строки — возникает только при использовании итераторов (SUMX, FILTER, ADDCOLUMNS) или в вычисляемых столбцах. В контексте строки каждая строка таблицы обрабатывается последовательно, и выражение может обращаться к значениям столбцов текущей строки.
При вызове итератора DAX сначала переключается в контекст строки для каждой строки исходной таблицы, вычисляет промежуточное значение, а затем — в зависимости от функции — применяет агрегацию. Внутри итератора можно использовать контекст фильтрации, но он заморожен на текущем внешнем контексте. Функция CALCULATE преобразует контекст строки в контекст фильтрации, что часто приводит к путанице.
Ограничения и особенности производительности
DAX — мощный, но ресурсоёмкий язык. Поскольку табличный движок VertiPaq хранит данные в памяти и использует сжатие, неправильное проектирование модели или избыточные вычисления могут привести к чрезмерному потреблению оперативной памяти и замедлению отчётов. Ключевые ограничения:
- Зависимость от модели данных — неправильные связи или отсутствие календаря делают многие функции времени (Time Intelligence) нерабочими.
- Отсутствие циклов и безусловного ветвления — нет оператора цикла перебора записей; вся логика строится через функции-итераторы и CALCULATE.
- Неявные преобразования типов — могут приводить к неочевидным ошибкам, особенно при сравнении пустых значений (BLANK).
- Ошибки при пустых значениях — SUM, AVERAGE игнорируют BLANK, но COUNT учитывает все строки, включая пустые.
Применение
DAX применяется в продуктах Microsoft для бизнес-аналитики (BI) в следующих сценариях:
- Расчёт ключевых показателей эффективности (KPI) и финансовых метрик (прибыль, себестоимость, отклонения от плана).
- Вычисление скользящих средних, накопленных итогов (Year-to-Date), прироста к предыдущему периоду.
- Кластеризация и динамическая сегментация клиентов по возвратности или активности.
- ABC-анализ по методу Парето.
- Создание мер прогнозирования на основе регрессионных моделей (через DAX-выражения, хотя R и Python — альтернативы).
В России DAX активно используется в среднем и крупном бизнесе для построения корпоративных отчётов в Power BI, для интеграции с 1С (через DirectQuery или импорт данных).
Пример простейшего выражения
Пример меры для расчёта суммы выручки с учётом фильтра по региону:
`` СуммаПродажВМоскве = CALCULATE( SUM('Продажи'[Выручка]), 'Территории'[Регион] = "Москва" ) ``
Пример вычисляемого столбца:
`` КатегорияВозраста = IF('Клиенты'[Возраст] < 18, "Дети", IF('Клиенты'[Возраст] < 60, "Взрослые", "Пенсионеры") ) ``
Связанные понятия и инструменты
DAX тесно связан с технологией Power Query (M-язык), которая используется для загрузки и трансформации данных, но не для вычислений в модели. В отличие от MDX (языка многомерных кубов), DAX ориентирован на табличные модели (columnar storage) и считается более простым для начального изучения. Многие платформы (Tableau, Qlik Sense) имеют собственные языки выражений с похожей идеологией: Tableau — Tableau Calculations, Qlik — Set Analysis.
Интересные факты
- DAX не является полным по Тьюрингу, хотя некоторые реализации допускают рекурсию через табличные переменные.
- Microsoft предоставляет бесплатные учебные пособия и книгу «Definitive Guide to DAX» авторов Альберто Феррари и Марко Руссо, которая де-факто является стандартным справочником.
- В 2021 году в Power BI были введены оконные функции (WINDOW, INDEX, RANK), что приблизило возможности DAX к возможностям SQL.
- На русском языке имеются переводы официальной документации Microsoft, а также курсы от российских школ (например, «Бизнес-Аналитик Power BI»).
Источники
- Феррари А., Руссо М. «Definitive Guide to DAX», 2021.
- Microsoft Learn: «Обзор DAX в Power BI», 2023.
- Microsoft Learn: «Основные выражения анализа данных (DAX)», 2024.
- Статья «Что такое DAX и как он работает» на портале Habr, 2022 (рус.).
- Документация SQL Server 2019: «Справочник по функциям DAX», 2023.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →