DAX (язык запросов)

Эта статья находится на начальном уровне проработки, в одной из её версий выборочно используется текст из источника, распространяемого под свободной лицензией
Материал из энциклопедии Руниверсалис
DAX
Семантика формульный, функциональный, предметно-ориентированный
Появился в 2010
Автор Jeffrey Wang[en] и команда разработки
Разработчик Microsoft
Выпуск Сентябрь 2018 (ежемесячные релизы) (2018)
Система типов Динамическая
Основные реализации Microsoft Power BI Desktop, Microsoft Analysis Services, Microsoft Excel
Испытал влияние Microsoft Excel
Повлиял на Microsoft Power BI, Microsoft Analysis Services, Microsoft Excel
Лицензия n/a
Платформа x86-64, x86-32
ОС Microsoft Windows

DAX (англ. Data Analysis eXpressions — выражения для анализа данных) — формульный функциональный язык запросов, разрабатываемый и поддерживаемый компанией Microsoft, для построения выражений и извлечения данных, которые расположены в табулярной модели — модели представления данных, идеологически схожей с многомерной OLAP-моделью. Запрос или выражение на DAX напоминает синтаксис формул Excel, в котором осуществляется вызов тех или иных функций языка, но, в отличие от Excel, оперирует либо сразу целыми столбцами таблицы данных, либо частью этих столбцов. В отличие от Excel, адресное обращение к данным в какой-либо ячейке таблицы данных средствами DAX невозможно, что сближает язык с SQL или MDX.

Является одним из трёх ключевых элементов концепции построения BI-систем по версии Microsoft, наряду с ETL-средствами Power Query[en] и подсистемой визуализации Power View[en]. Использование DAX свободно от лицензионных отчислений.

Синтаксис

Поскольку создатели DAX вдохновлялись синтаксисом формул Excel[1], то и любой запрос на DAX может быть представлен как строка. Переводы каретки, пробелы, знаки табуляции между элементами запроса игнорируются, а многострочные запросы используются только для упрощения чтения программного кода.

Пример создания новой меры (аналог новой функции с точки зрения языков программирования), которая возвращает вчерашнюю дату:

Вчерашняя дата = TODAY () - 1

В реализации DAX в PowerPivot для Excel в качестве инфикса для присвоение вместо знака «=» в определениях мер используется «:=»; В остальном синтаксис остаётся неизменным. DAX-запрос для SSAS предваряет служебное слово EVALUATE. В других реализациях (например, PowerPivot для Excel, Power BI) служебное слово EVALUATE, а также ряд других служебных слов (DEFINE, MEASURE, GROUP BY, ORDER и тому подобные) не используются в пользовательском интерфейсе и применяются автоматически.

Функциональный состав

Результатом работы запроса или выражения может быть таблица или единичное, скалярное значение. Более чем две сотни встроенных функций языка подразделяются на следующие группы:

  • функции с табличным значением
    • функции фильтров
    • агрегатные функции
    • функции логики операций со временем
  • скалярные функции
    • функции даты и времени
    • статистические функции
    • логические функции
    • функции фильтров
    • математические и тригонометрические функции
    • текстовые функции
    • функции иерархии
    • функции логики операций со временем[2].

Локализация

Синтаксис языка имеет частичную локализацию: названия функций языка пишутся всегда на английском (ABS, AVERAGE, BLANK, NOW, TODAY, SUM и так далее), а десятичный разделитель и разделитель функций зависит от локали операционной системы, например, в англоязычной версии точка используется в качестве десятичного разделителя, а запятая в качестве разделителя функций (если функций в запросе больше одной), а в русской локализации для десятичного разделителя по умолчанию используется запятая, а для разделения функций внутри одного запроса или параметров функции используется точка с запятой («;»).

Испорченная кодировка в справке Power BI Desktop

Производительность

Особенностью языка является обеспечение высокой производительности запросов к данным и ориентированность на резидентные вычисления (англ. in-memory computing), за счёт чего достигается ускорение выполнения запросов и появляется возможность интерактивного взаимодействия с элементами построенных на этих данных BI-отчётов, построения информационных панелей[en] с функциями интерактивной подгрузки детализаций (drill-down), вопросно-ответных интерфейсов и ряда других подобных средств.

Вопросно-ответный интерфейс

История

DAX не является языком программирования. DAX — это прежде всего язык формул, а также язык запросов. Вы можете использовать DAX для определения пользовательских вычислений для вычисляемых столбцов, показателей, вычисляемых таблиц, групп вычислений, строк настраиваемого формата и выражений фильтра в безопасности на основе ролей в табличных моделях. Тот же механизм служб Analysis Services для табличных моделей также используется в Power BI и Power Pivot для Excel. Power BI также использует DAX для выражений условного форматирования и других динамических свойств визуальных компонентов.[3]

При реализации технологии столбцового хранения данных в памяти, которое используется в «движках» xVelocity (vertiPaq), потребовался язык запросов, который бы обеспечивал манипуляцию с данными, хранящимися в столбцах табличных данных (как в измерениях MDX). С другой стороны, язык должен был бы быть синтаксически похож на язык формул Excel, который к 2008—2009 году был знаком подавляющему числу бизнес-пользователей, занимающихся анализом данных. Однако похожесть DAX на нелокализованный, базирующийся на английском языке, язык формул Excel является скорее маркетинговым ходом, чем реальной необходимостью в одностроковых запросах.

Поскольку запросы производились к данным в оперативной памяти и не требовались операции ввода-вывода, новый язык мог игнорировать ряд подходов к оптимизации запросов, используемых в MDX/SQL[4], за счёт чего достигалась компактность запросов, более высокая скорость разработки и, потенциально, более высокая производительность по сравнению с MDX/SQL.

В 2010 году DAX вместе с табулярной моделью данных был интегрирован в SSAS версии 2012[5] и выпущено дополнение для Microsoft Excel 2010 Professional, версия которого стала именоваться Professional Plus.

Эксперимент был признан успешным поскольку в дальнейшем Microsoft встраивала поддержку DAX во все свои продукты линейки Microsoft Analysis Services редакций Enterprise и Business Intelligence (SQL Server 2014, SQL Server 2016,SQL Server 2017)[6] и расширенные версии Microsoft Excel для платформы Windows (Excel 2013, Excel 2016), а также облачные реализации на платформе Azure[7][8].

В начале 2015 года был выпущен первый продукт линейки Power BI — Power BI Designer, в котором были интегрированы все «Power»-технологии, входившие в виде дополнений или иным образом интегрированные с Excel — PowerPivot, Power Query, Power View и Power Maps. В конце 2015 года этот интегрированный продукт сменил название на Power BI Desktop, c того же момента он свободен от лицензионных отчислений для персонального использования.

Примечания

  1. Интервью с разработчиком DAX (Jeffrey Wang). Дата обращения: 24 августа 2018. Архивировано 24 августа 2018 года. (нем./англ.)
  2. Типы функций DAX. Дата обращения: 13 октября 2013. Архивировано 15 августа 2018 года.
  3. Alberto Ferrari. Dax patterns : the most comprehensive collection of ready-to-use solutions in DAX for Power BI, Anaysis Services and Power Pivot. — 2nd ed. — Las Vegas (NV), copyright 2020. — 1 vol. (xviii-396 p.) с. — ISBN 978-1-7353652-0-6, 1-7353652-0-3.
  4. SQL Explore. Extreme Analysis Service (недоступная ссылка). Дата обращения: 15 августа 2018. Архивировано 15 августа 2018 года.
  5. Электронная документация по SQL Server 2012. Microsoft. Дата обращения: 14 августа 2018. Архивировано 14 августа 2018 года.
  6. Возможности, поддерживаемые различными выпусками SQL Server 2014 (недоступная ссылка). Дата обращения: 14 августа 2018. Архивировано 14 августа 2018 года.
  7. Создание модели на портале Azure. Microsoft. Дата обращения: 3 июня 2018. Архивировано 15 августа 2018 года.
  8. How to setup a tabular data model in SSAS Azure. Дата обращения: 1 мая 2017. Архивировано 14 августа 2018 года.

Литература

Ссылки