Открыть сервис

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

Функции DAX классифицируются по назначению. Ниже перечислены основные категории с примерами:

Функции агрегации

Используются для суммирования, подсчёта средних значений, количеств. Простейшие (SUM, AVERAGE, COUNT) работают только с контекстом фильтрации. Итераторы (SUMX, AVERAGEX, COUNTX) выполняют вычисление по каждой строке таблицы, а затем агрегируют промежуточные результаты. Дополнительно:

Функции фильтрации и управления контекстом

Центральная функция — CALCULATE. Она изменяет контекст фильтрации для выражения, позволяя переопределять или добавлять фильтры. Без CALCULATE невозможно выполнять сложные вычисления, зависящие от разных срезов данных. Ключевые функции:

Функции работы со временем (Time Intelligence)

Используются для расчётов, связанных с датами: год-к-году, остаток, начало-конец периодов. Требуют наличия в модели непрерывной таблицы дат (календаря). Важные функции:

Логические и информационные функции

Математические и статистические функции

Функции работы с текстом

Принцип работы контекста вычисления

Контекст вычислений — наиболее сложная для понимания составляющая DAX. Каждое выражение вычисляется в двух контекстах одновременно:

  1. Контекст фильтрации — задаётся внешними фильтрами: срезами (фильтрами) на отчёте (странице, таблице, матрице) и явными фильтрами внутри функции CALCULATE. Он определяет, с каким подмножеством строк таблицы производится работа.
  2. Контекст строки — возникает только при использовании итераторов (SUMX, FILTER, ADDCOLUMNS) или в вычисляемых столбцах. В контексте строки каждая строка таблицы обрабатывается последовательно, и выражение может обращаться к значениям столбцов текущей строки.

При вызове итератора DAX сначала переключается в контекст строки для каждой строки исходной таблицы, вычисляет промежуточное значение, а затем — в зависимости от функции — применяет агрегацию. Внутри итератора можно использовать контекст фильтрации, но он заморожен на текущем внешнем контексте. Функция CALCULATE преобразует контекст строки в контекст фильтрации, что часто приводит к путанице.

Ограничения и особенности производительности

DAX — мощный, но ресурсоёмкий язык. Поскольку табличный движок VertiPaq хранит данные в памяти и использует сжатие, неправильное проектирование модели или избыточные вычисления могут привести к чрезмерному потреблению оперативной памяти и замедлению отчётов. Ключевые ограничения:

Применение

DAX применяется в продуктах Microsoft для бизнес-аналитики (BI) в следующих сценариях:

В России 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.

Интересные факты

Источники

  1. Феррари А., Руссо М. «Definitive Guide to DAX», 2021.
  2. Microsoft Learn: «Обзор DAX в Power BI», 2023.
  3. Microsoft Learn: «Основные выражения анализа данных (DAX)», 2024.
  4. Статья «Что такое DAX и как он работает» на портале Habr, 2022 (рус.).
  5. Документация SQL Server 2019: «Справочник по функциям DAX», 2023.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →