Запросы 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'

Возвращает все строки и столбцы из таблицы "Продажи в Интернете" в виде таблицы.

Инструкция DAX Evaluate

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, в виде таблицы.

DAX Evaluate order by statement

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.

Инструкция DAX Evaluate order by Sales order number

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 Evaluate with measure defnition

Параметры в запросах DAX

Хорошо определенная инструкция запроса DAX может быть параметризована, а затем использоваться снова и более с изменениями значений параметров.

Метод Execute Method (XMLA) имеет элемент коллекции Parameters (XMLA), позволяющий определять и назначать параметры. В коллекции каждый элемент Parameter Element (XMLA) определяет имя параметра и значение для него.

Ссылка на параметры XMLA путем префикса имени параметра символом @ . Любое место в синтаксисе, в котором разрешено значение, значение можно заменить вызовом параметра. Все параметры XMLA введите текст.

Маңызды

Параметры, определенные в разделе параметров и не используемые в элементе <STATEMENT> , создают ответ об ошибке в XMLA. Параметры, используемые и не определенные в элементе <Parameters> , создают ответ ошибки в XMLA.

Инструкции DAX
SUMMARIZECOLUMNS
TREATAS
ФИЛЬТР