Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Клиенты для отчетности, такие как Power BI и Excel, выполняют DAX запросы при отображении визуальных элементов в отчете или добавлении поля в таблицу, и эти DAX запросы корректируются при применении фильтра. Анализатор производительности в Power BI Desktop может отображать эти DAX запросы и даже запускать их в DAX представлении запросов Power BI Desktop.
С помощью DAX представления запросов в Power BI Desktop или DAX записи запросов в службе Power BI можно создавать и запускать собственные DAX запросы. С помощью Microsoft Fabric вы можете еще больше повысить свою производительность, используя Copilot для написания DAX запросов в DAX настольной или веб-версии. Помимо средств DAX Power BI запросы можно запускать в записных книжках Fabric с помощью семантической ссылки для чтения данных из семантических моделей с помощью Python, а также с помощью REST API выполнения запросов, также доступных в Power Automate. Другие средства, такие как SQL Server Management Studio (SSMS), построитель отчетов Power BI и средства с открытым кодом, такие DAX как Studio, также позволяют создавать и запускать DAX запросы.
DAX запросы возвращают результаты в виде таблицы прямо в средстве, что позволяет быстро создавать и тестировать производительность DAX формул в мерах или просто просматривать данные в семантической модели. INFO и INFO.VIEW DAX функции также могут получать информацию о вашей семантической модели, например, список таблиц, столбцов, метрик и многое другое.
Прежде чем изучать запросы, важно иметь четкое понимание основ DAX. Если вы еще не сделали этого, ознакомьтесь с DAX обзором.
Ключевые слова
DAX запросы имеют простой синтаксис, состоящий только из одного обязательного ключевого слова, EVALUATE. EVALUATE за которым следует табличное выражение, например функция или имя таблицы DAX, которое при выполнении выдает результирующую таблицу. К табличным выражениям, выводяющим таблицу результатов, относятся:
- Общие DAX функции, которые выводят таблицы, например, SUMMARIZE, SUMMARIZECOLUMNS, SELECTCOLUMNS, FILTER, UNION, TOPN, ADDCOLUMNS, DATATABLE и многие другие, работают с EVALUATE для вывода результирующей таблицы.
- Таблицы в модели, на которые ссылается имя, работают с EVALUATE для вывода таблицы результатов с данными в таблице. Например, EVALUATE "Имя таблицы" можно выполнить как запросDAX.
- Меры в модели или в любой DAX формуле, возвращающей скалярное значение, работают с EVALUATE для отображения значения в виде таблицы результатов, если оно заключено в фигурные скобки. Например, EVALUATE {[Total Sales]} или EVALUATE {COUNTROWS('Sales')} можно запустить как DAX запрос. Они называются конструкторами таблиц .
Существует несколько необязательных ключевых слов, относящихся к DAX запросам: ORDER BY, START AT, DEFINE, MEASURE, table VARи COLUMN.
EVALUATE (обязательно)
На самом базовом уровне запрос DAX — это оператор EVALUATE, содержащий табличное выражение. По крайней мере один EVALUATE оператор требуется, однако запрос может содержать любое количество EVALUATE операторов.
Синтаксис EVALUATE
EVALUATE <table>
параметры EVALUATE
| Срок | Определение |
|---|---|
table |
Табличное выражение. |
Пример EVALUATE
EVALUATE
'Sales Order'
Возвращает все строки и столбцы из таблицы "Заказы на продажу" в виде результирующей таблицы. Это можно ограничить с использованием TOPN или FILTER, и отсортировать с помощью ORDER BY.
ORDER BY (необязательно)
Необязательное ORDER BY ключевое слово определяет один или несколько столбцов в запросе или выражениях, используемых для сортировки результатов запроса. Любое выражение, которое можно оценить для каждой строки результата, допустимо. Любой столбец в самом запросе также является допустимым.
Сортировка по свойству столбца в семантических моделях не применяется к DAX результатам запроса. Если столбец должен быть отсортирован по другому столбцу в модели, например в случае имени месяца, то сортировка по столбцу также должна быть включена в DAX запрос, который будет использоваться в объекте ORDER BY.
Синтаксис ORDER BY
EVALUATE <table>
[ORDER BY {<expression> [{ASC | DESC}]}[, …]]
параметры ORDER BY
| Срок | Определение |
|---|---|
expression |
Любое DAX выражение, возвращающее одно скалярное значение или столбец, включенный DAX в запрос. |
ASC |
(по умолчанию) Порядок сортировки по возрастанию. |
DESC |
Порядок сортировки по убыванию. |
Пример ORDER BY
EVALUATE
SUMMARIZECOLUMNS(
// Group by columns
'Date'[Month Name],
'Date'[Month of Year],
'Product'[Category],
// Optional filters
FILTER(
VALUES('Product'[Category]),
[Category] = "Clothing"
),
// Measures or explicit DAX formulas to aggregate and analyze the data by row
"Orders", [Orders],
"Avg Profit per Order", DIVIDE(
[Total Sales Profit],
[Orders]
)
)
// DAX queries do not use sort order defined in Power BI,
// sort by columns must be included in the DAX query to be used in order by
ORDER BY 'Date'[Month of Year] ASC
Возвращает возвращённые заказы на одежду и среднюю прибыль по заказу за месяц в порядке возрастания по месяцам, в виде результирующей таблицы.
TOPN не выбирает указанное количество строк, возвращаемых в зависимости от порядка сортировки, указанного в ORDER BY. Вместо этого TOPN имеет собственный синтаксис, чтобы дополнительно указать сортировку до возврата первых 100 строк. ORDER BY сортирует только таблицу результатов, возвращаемую TOPN.
EVALUATE
TOPN(
100,
'Sales Order',
// The way the data is sorted before the top 100 rows are selected
'Sales Order'[SalesOrderLineKey], ASC
)
// The way the data is sorted for the results
ORDER BY
'Sales Order'[Sales Order] ASC,
'Sales Order'[Sales Order Line] ASC
Возвращает первые 100 заказов на продажу, отсортированные по возрастанию SalesOrderLienKey, а затем сортирует результаты сначала по заказу на продажу, а затем по строке заказов на продажу.
START AT (необязательно)
Необязательное ключевое слово START AT используется в предложении ORDER BY. Он определяет значение, с которого начинаются результаты запроса.
Синтаксис START AT
EVALUATE <table>
[ORDER BY {<expression> [{ASC | DESC}]}[, …]
[START AT {<value>|<parameter>} [, …]]]
параметры START AT
| Срок | Определение |
|---|---|
value |
Значение константы . Не может быть выражением. |
parameter |
Имя параметра в инструкции XMLA, которому предшествует символ @. |
START AT примечания
Аргументы START AT соответствуют столбцам в конструкции ORDER BY "один к одному". В предложении может быть столько аргументов START AT , сколько в предложении ORDER BY , но не больше. Первый аргумент в START AT задает начальное значение в первом столбце ORDER BY. Второй аргумент в START AT определяет начальное значение во 2-м столбце в строках, которые соответствуют первому значению в столбце 1 из ORDER BY.
Пример START AT
EVALUATE
'Sales Order'
ORDER BY 'Sales Order'[Sales Order] ASC
// Start at this order, orders before this order will not be displayed
START AT "SO43661"
Возвращает все столбцы из таблицы «Заказ покупателя», отсортированные по возрастанию номера заказа, начиная с SO43661. Строки перед этим заказом на продажу не включаются в таблицу результатов.
DEFINE (необязательно)
Необязательное DEFINE ключевое слово вводит одно или несколько вычисляемых определений сущностей, которые существуют только в течение запроса. В отличие от EVALUATE, в запросе может быть только один блок DEFINE с одним или несколькими определениями DAX.
DEFINE должен предшествовать первому EVALUATE оператору и применяется ко всем EVALUATE операторам в запросе. Определения могут быть переменными, мерами, таблицами1 и столбцами1. Определения могут ссылаться на другие определения, которые отображаются до или после текущего определения. Если ключевое слово DEFINE включено в запрос, требуется хотя бы одно определение.
DEFINE MEASURE — это распространенный сценарий для создания новых мер или изменения существующих мер в семантической модели. Если мера уже существует в модели, запрос будет использовать формулу меры, определённую в запросе, DAX, DAX. Это полезно для тестирования мер с помощью запроса DAX перед обновлением модели.
DEFINE MEASURE Полезно также создать дополнительный анализ с DAX формулами для конкретного DAX запроса, если у вас может отсутствовать разрешение на добавление меры в модель, или если ее наличие в модели не является обязательным.
Синтаксис DEFINE
[DEFINE
(
(MEASURE <table name>[<measure name>] = <scalar expression>) |
(VAR <var name> = <table or scalar expression>) |
(TABLE <table name> = <virtual table definition>) |
(COLUMN <table name>[<column name>] = <scalar expression>) |
) +
]
(EVALUATE <table expression>) +
параметры DEFINE
| Срок | Определение |
|---|---|
Entity |
MEASURE, VARTABLE1 или COLUMN1. |
name |
Имя меры, переменной, таблицы или определения столбца. Это не может быть выражением. Имя не должно быть уникальным. Имя существует только для длительности запроса. |
expression |
Любое DAX выражение, возвращающее табличное или скалярное значение. Выражение может использовать любую из определенных сущностей. Если требуется преобразовать скалярное выражение в табличное выражение, обтекайте выражение внутри конструктора таблицы с фигурными скобками {}или используйте функцию ROW() для возврата одной таблицы строк. |
DEFINE примечания
Запрос DAX может содержать несколько операторов EVALUATE, но может иметь только одну инструкцию DEFINE. Определения в инструкции DEFINE могут применяться к любым EVALUATE операторам в запросе.
В инструкции DEFINE требуется по крайней мере одно определение.
Определения мер для запроса переопределяют меры модели с тем же именем, но используются только в пределах этого запроса. Они не повлияют на меру модели.
VAR имена имеют уникальные ограничения. Дополнительные сведения см. в разделе VAR — параметры.
Пример DEFINE
DEFINE
VAR _firstyear = MIN('Date'[Fiscal Year])
VAR _lastyear = MAX('Date'[Fiscal Year])
TABLE 'Unbought products' = FILTER('Product', [Orders] + 0 = 0)
COLUMN 'Unbought products'[Year Range] = _firstyear & " - " & _lastyear
MEASURE 'Unbought products'[Unbought products] = COUNTROWS('Unbought products')
EVALUATE
'Unbought products'
EVALUATE
{[Unbought products]}
Возвращает таблицу, определенную в запросе DAX, чтобы отобразить некупленные продукты с дополнительным столбцом, который ссылается на заданные переменные. Мера также определяется и оценивается для подсчета строк непроданных продуктов.
DEFINE
MEASURE 'Pick a sales measure'[Orders] = DISTINCTCOUNT('Sales Order'[Sales Order])
MEASURE 'Pick a sales measure'[Customers] = CALCULATE(
COUNTROWS(Customer),
FILTER(
'Sales',
[Orders] > 0
)
)
MEASURE 'Pick a sales measure'[Orders per Customer] = DIVIDE(
[Orders],
[Customers],
0
)
EVALUATE
SUMMARIZECOLUMNS(
'Date'[Fiscal Year],
"Orders", [Orders],
"Customers", [Customers],
"Orders per Customer", [Orders per Customer]
)
Возвращает таблицу, оценивающую три определенные меры, чтобы показать результаты по финансовому году. Все меры также существуют в модели, а заказы на одного клиента изменяются в запросе DAX.
Параметры в запросах DAX
Хорошо определяемая DAX инструкция запроса может быть параметризована, а затем использоваться повторно с только изменениями значений параметров.
Метод Execute Method (XMLA) имеет элемент коллекции Parameters (XMLA), позволяющий определять и назначать параметры. В коллекции каждый элемент Parameter Element (XMLA) определяет имя параметра и значение для него.
Ссылайтесь на параметры XMLA, добавляя префикс @ к имени параметра. Любое место в синтаксисе, в котором разрешено значение, значение можно заменить вызовом параметра. Все параметры XMLA имеют тип "текст".
Важный
Параметры, определенные в разделе параметров и не используемые в элементе <STATEMENT> , создают ответ об ошибке в XMLA.
Параметры, которые используются, но не определены в элементе <Parameters>, вызывают ответ об ошибке в XMLA.