DAX (язык запросов)
DAX (англ. Data Analysis eXpressions — выражения для анализа данных) — формульный функциональный язык запросов, разрабатываемый и поддерживаемый компанией Microsoft, для построения выражений и извлечения данных, которые расположены в табулярной модели — модели представления данных, идеологически схожей с многомерной OLAP-моделью. Запрос или выражение на DAX напоминает синтаксис формул Excel, в котором осуществляется вызов тех или иных функций языка, но, в отличие от Excel, оперирует либо сразу целыми столбцами таблицы данных, либо частью этих столбцов. В отличие от Excel, адресное обращение к данным в какой-либо ячейке таблицы данных средствами DAX невозможно, что сближает язык с SQL или MDX.
DAX | |
---|---|
Семантика | формульный, функциональный, предметно-ориентированный |
Класс языка | язык запросов |
Появился в | 2010 |
Автор | Jeffrey Wang и команда разработки |
Разработчик | 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 |
Является одним из трёх ключевых элементов концепции построения BI-систем по версии Microsoft, наряду с ETL-средствами Power Query и подсистемой визуализации Power View. Использование 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
и так далее), а десятичный разделитель и разделитель функций зависит от локали операционной системы, например, в англоязычной версии точка используется в качестве десятичного разделителя, а запятая в качестве разделителя функций (если функций в запросе больше одной), а в русской локализации для десятичного разделителя по умолчанию используется запятая, а для разделения функций внутри одного запроса или параметров функции используется точка с запятой («;»).
Производительность
Особенностью языка является обеспечение высокой производительности запросов к данным и ориентированность на резидентные вычисления (англ. in-memory computing), за счёт чего достигается ускорение выполнения запросов и появляется возможность интерактивного взаимодействия с элементами построенных на этих данных BI-отчётов, построения информационных панелей с функциями интерактивной подгрузки детализаций (drill-down), вопросно-ответных интерфейсов и ряда других подобных средств.
История
При реализации технологии столбцового хранения данных в памяти, которое используется в «движках» xVelocity (vertiPaq), потребовался язык запросов, который бы обеспечивал манипуляцию с данными, хранящимися в столбцах табличных данных (как в измерениях MDX). С другой стороны, язык должен был бы быть синтаксически похож на язык формул Excel, который к 2008—2009 году был знаком подавляющему числу бизнес-пользователей, занимающихся анализом данных. Однако похожесть DAX на нелокализованный, базирующийся на английском языке, язык формул Excel является скорее маркетинговым ходом, чем реальной необходимостью в одностроковых запросах.
Поскольку запросы производились к данным в оперативной памяти и не требовались операции ввода-вывода, новый язык мог игнорировать ряд подходов к оптимизации запросов, используемых в MDX/SQL[3], за счёт чего достигалась компактность запросов, более высокая скорость разработки и, потенциально, более высокая производительность по сравнению с MDX/SQL.
В 2010 году DAX вместе с табулярной моделью данных был интегрирован в SSAS версии 2012[4] и выпущено дополнение для Microsoft Excel 2010 Professional, версия которого стала именоваться Professional Plus.
Эксперимент был признан успешным поскольку в дальнейшем Microsoft встраивала поддержку DAX во все свои продукты линейки Microsoft Analysis Services редакций Enterprise и Business Intelligence (SQL Server 2014, SQL Server 2016,SQL Server 2017)[5] и расширенные версии Microsoft Excel для платформы Windows (Excel 2013, Excel 2016), а также облачные реализации на платформе Azure[6][7].
В начале 2015 года был выпущен первый продукт линейки Power BI — Power BI Designer, в котором были интегрированы все «Power»-технологии, входившие в виде дополнений или иным образом интегрированные с Excel — PowerPivot, Power Query, Power View и Power Maps. В конце 2015 года этот интегрированный продукт сменил название на Power BI Desktop, c того же момента он свободен от лицензионных отчислений для персонального использования.
Примечания
- Интервью с разработчиком DAX (Jeffrey Wang) . (нем./англ.)
- Типы функций DAX . Дата обращения: 13 октября 2013.
- SQL Explore. Extreme Analysis Service (недоступная ссылка). Дата обращения: 15 августа 2018. Архивировано 15 августа 2018 года.
- Электронная документация по SQL Server 2012 . Microsoft.
- Возможности, поддерживаемые различными выпусками SQL Server 2014 . (недоступная ссылка)
- Создание модели на портале Azure . Microsoft. Дата обращения: 3 июня 2018.
- How to setup a tabular data model in SSAS Azure . Дата обращения: 1 мая 2017.
Литература
- Practical PowerPivot & DAX Formulas for Excel 2010. — McGraw Hill Professional, 2012. — ISBN 9780071746854.
- Alberto Ferrari, Marco Russo. DAX Patterns 2015. — SQLBI, 2014. — ISBN 978-1-5056-2363-5.
- Matt Allington. Learn to Write DAX. — Holy Macro! Books, 2015. — ISBN 978-1-61547-041-9.
- Daniil Maslyuk. Exam Ref 70-778 Analyzing and Visualizing Data by Using Microsoft Power BI. — Microsoft Press, 2018. — ISBN 978-1-5093-0702-9.
Ссылки
- Общие сведения по выражениям анализа данных (DAX)
- Справочник по выражениям анализа данных (DAX)
- Data Analysis Expressions (DAX) Reference
- Введение в DAX
- An Introduction to DAX as a Query Language
- Официальное сообщество Microsoft (англоязычное). Вопросы DAX чаще всего рассматриваются в секциях Desktop и Developer
- powerBiForever Русскоязычное и одно из крупнейших профессиональных сообществ по вопросам Excel и Power BI. Не связанное с Microsoft