Запросы DAX
Клиенты подготовки отчетов, такие как Power BI и Excel, выполняют запросы DAX при каждом размещении поля в отчете или при применении фильтра. С помощью SQL Server Management Studio (SSMS), Power BI Report Builder и средств с открытым кодом, таких как DAX Studio, можно создавать и выполнять собственные запросы DAX. Запросы DAX возвращают результаты в виде таблицы прямо в средстве, что позволяет быстро создавать и тестировать производительность формул DAX.
Прежде чем изучать запросы, важно иметь четкое представление об основах DAX. Если вы еще не сделали этого, обязательно ознакомьтесь с общими сведениями о DAX.
Ключевые слова
Запросы DAX имеют простой синтаксис, состоящий из всего одного обязательного ключевого слова, EVALUATE и нескольких необязательных ключевых слов: ORDER BY, START AT, DEFINE, MEASURE, VAR, TABLE и COLUMN. Каждое ключевое слово определяет инструкцию, используемую в течение времени выполнения запроса.
EVALUATE (обязательный)
На самом базовом уровне запрос DAX — это инструкция EVALUATE , содержащая табличное выражение. Требуется по крайней мере одна инструкция EVALUATE, однако запрос может содержать любое количество инструкций EVALUATE.
Синтаксис EVALUATE
EVALUATE <table>
Параметры EVALUATE
Термин | Определение |
---|---|
table | Табличное выражение. |
Пример EVALUATE
EVALUATE
'Internet Sales'
Возвращает все строки и столбцы из таблицы "Продажи в Интернете" в виде таблицы.
ORDER BY (необязательно)
Необязательное ключевое слово ORDER BY определяет одно или несколько выражений, используемых для сортировки результатов запроса. Любое выражение, которое можно оценить для каждой строки результата, допустимо.
Синтаксис ORDER BY
EVALUATE <table>
[ORDER BY {<expression> [{ASC | DESC}]}[, …]]
Параметры ORDER BY
Термин | Определение |
---|---|
выражение | Любое выражение DAX, возвращающее одно скалярное значение. |
ASC | (по умолчанию) Порядок сортировки по возрастанию. |
DESC | Порядок сортировки по убыванию. |
Пример ORDER BY
EVALUATE
'Internet Sales'
ORDER BY
'Internet Sales'[Order Date]
Возвращает все строки и столбцы из таблицы Internet Sales по возрастанию, упорядоченные по Order Date, в виде таблицы.
START AT (необязательно)
Необязательное ключевое слово START AT используется в предложении ORDER BY . Он определяет значение, с которого начинаются результаты запроса.
Синтаксис START AT
EVALUATE <table>
[ORDER BY {<expression> [{ASC | DESC}]}[, …]
[START AT {<value>|<parameter>} [, …]]]
Параметры START AT
Термин | Определение |
---|---|
значение | Значение константы . Не может быть выражением. |
параметр | Имя параметра в инструкции XMLA, префиксированного символом @ . |
Примечания для START AT
Аргументы START AT имеют одно-одно соответствие столбцам в предложении ORDER BY. В предложении START AT может быть столько аргументов, сколько в предложении ORDER BY, но не больше. Первый аргумент в START AT определяет начальное значение в столбце 1 столбца ORDER BY. Второй аргумент в START AT определяет начальное значение в столбце 2 столбца ORDER BY в строках, которые соответствуют первому значению столбца 1.
Пример START AT
EVALUATE
'Internet Sales'
ORDER BY
'Internet Sales'[Sales Order Number]
START AT "SO7000"
Возвращает все строки и столбцы из таблицы Internet Sales по возрастанию, упорядоченные по Sales Order Number, начиная с SO7000.
DEFINE (необязательно)
Необязательное ключевое слово DEFINE содержит одно или несколько определений вычисляемых сущностей, которые существуют, только пока выполняется запрос. Определения предшествуют инструкции EVALUATE и допустимы для всех инструкций EVALUATE. Определения могут быть переменными, мерами, таблицами1 и столбцами1. Определения могут ссылаться на другие определения, которые отображаются до или после текущего определения. Если ключевое слово DEFINE включено в запрос, требуется по крайней мере одно определение.
Синтаксис DEFINE
[DEFINE
(
(MEASURE <table name>[<measure name>] = <scalar expression>) |
(VAR <var name> = <table or scalar expression>) |
(TABLE <table name> = <table expression>) |
(COLUMN <table name>[<column name>] = <scalar expression>) |
) +
]
(EVALUATE <table expression>) +
Параметры DEFINE
Термин | Определение |
---|---|
Объект | MEASURE, VAR, TABLE1 или COLUMN1. |
name | Имя определения меры, переменной, таблицы или столбца. Это не может быть выражением. Имя не обязательно должно быть уникальным. Имя существует, только пока выполняется запрос. |
выражение | Любое выражение DAX, возвращающее табличное или скалярное значение. Выражение может использовать любую из определенных сущностей. Если требуется преобразовать скалярное выражение в табличное, заключите его внутри конструктора таблицы в фигурные скобки {} или используйте функцию ROW() для возврата таблицы с одной строкой. |
[1] Внимание. Определения таблицы и столбца в области запросов предназначены только для внутреннего использования. Хотя выражения TABLE и COLUMN для запроса можно определять без синтаксической ошибки, они могут вызывать ошибки выполнения, поэтому их использовать не рекомендуется.
Примечания для DEFINE
Запрос DAX может содержать несколько инструкций EVALUATE, но может иметь только одну инструкцию DEFINE. Определения в инструкции DEFINE могут применяться к любым инструкциям EVALUATE в запросе.
В инструкции DEFINE требуется по крайней мере одно определение.
Определения мер для запроса переопределяют меры модели с тем же именем, но используются только в течение времени выполнения запроса. Они не затрагивают меру модели.
Имена VAR имеют уникальные ограничения. Дополнительные сведения см. в разделе VAR — параметры.
Пример DEFINE
DEFINE
MEASURE 'Internet Sales'[Internet Total Sales] =
SUM ( 'Internet Sales'[Sales Amount] )
EVALUATE
SUMMARIZECOLUMNS (
'Date'[Calendar Year],
TREATAS (
{
2013,
2014
},
'Date'[Calendar Year]
),
"Total Sales", [Internet Total Sales],
"Combined Years Total Sales",
CALCULATE (
[Internet Total Sales],
ALLSELECTED ( 'Date'[Calendar Year] )
)
)
ORDER BY [Calendar Year]
Возвращает вычисленную общую сумму продаж в течение 2013 и 2014 года, а в качестве таблицы вычисляется общий объем продаж в течение 2013 и 2014 года. Мера в операторе DEFINE , Internet Total Sales, используется как в выражениях Total Sales, так и в объединенных годах Total Sales.
Параметры в запросах DAX
Хорошо определенная инструкция запроса DAX может быть параметризована, а затем использоваться снова и более с изменениями значений параметров.
Метод Execute Method (XMLA) имеет элемент коллекции Parameters (XMLA), позволяющий определять и назначать параметры. В коллекции каждый элемент Parameter Element (XMLA) определяет имя параметра и значение для него.
Ссылка на параметры XMLA путем префикса имени параметра символом @
. Любое место в синтаксисе, в котором разрешено значение, значение можно заменить вызовом параметра. Все параметры XMLA введите текст.
Внимание
Параметры, определенные в разделе параметров и не используемые в элементе <STATEMENT> , создают ответ об ошибке в XMLA. Параметры, используемые и не определенные в элементе <Parameters> , создают ответ ошибки в XMLA.