запросы DAX

Программное обеспечение для построения отчетов, такое как Power BI and Excel, запускает запросы DAX при отображении визуальных элементов в отчете, or добавлении поля в таблицу, and и DAX запросы корректируются при применении фильтра filter. Анализатор производительности в Power BI Desktop может показать эти DAX запросы andeven запускать их в представлении запросов DAX.

С помощью представления запросов в desktop BI Desktop запросов в службе бизнес-аналитики можно создать выполнять собственные запросы . С помощью Microsoft Fabricвы можете повысить производительность с помощью Copilot для записи DAX запросов в DAX представлении запросов классического or web. Помимо средств бизнес-аналитики PowerDAX запросы можно выполнять в записных книжках Fabric с помощью семантической связи для чтения данных из семантических моделей с помощью Python, and с REST API выполнения запросов, также доступных в Power Automate. Другие средства, такие как SQL Server Management Studio (SSMS), Power построителя отчетов бизнес-аналитики, and средства с открытым кодом, такие как DAX Studio, также позволяют создавать and выполнять запросы DAX.

DAX запросы возвращают результаты в виде таблицы right в средстве, что позволяет быстро создавать and тестировать производительность формул DAX в мерах, or просто просматривать данные в семантической модели. INFO and INFO. Функции VIEW DAX также могут получать сведения о семантической модели, например список таблиц, столбцов, метрик, and и многое другое.

Прежде чем изучать запросы, важно иметь четкое понимание основ DAX. If если вы еще этого не сделали, обязательно посмотрите обзор DAX.

Ключевые слова

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

  1. Общие функции DAX, которые выводит таблицу, такие как SUMMARIZE, SUMMARIZECOLUMNS, SELECTCOLUMNS, FILTER, UNION, TOPN, ADDCOLUMNS, DATATABLE, and многие другие, работают с EVALUATE для вывода таблицы результатов.
  2. Таблицы в модели, на которые ссылается имя, работают с EVALUATE для вывода таблицы результатов с данными в таблице. Например, EVALUATE "Имя таблицы" можно выполнить как запросDAX.
  3. Меры в модели or любой формулы DAX, возвращающей скалярную value, работают с EVALUATE, чтобы отобразить value в формате таблицы результатов, когда заключены в фигурные скобки. Например, EVALUATE {[Total Sales]}orEVALUATE {COUNTROWS('Sales')} можно запустить как запрос DAX. Они называются конструкторами таблиц .

Существует несколько необязательных ключевых слов, относящихся к запросам DAX: ORDER BY, START AT, DEFINE, MEASURE, VAR, TABLE, and COLUMN.

EVALUATE (обязательно)

На самом базовом уровне запрос DAX — это оператор EVALUATE, содержащий табличное выражение. Требуется хотя бы одна запись EVALUATE, но запрос может содержать любое количество EVALUATEstatements.

Синтаксис EVALUATE

EVALUATE <table>

параметры EVALUATE

Срок Определение
table Табличное выражение.

Пример EVALUATE

EVALUATE
	'Sales Order'

Возвращает all строку and столбец из таблицы "Заказ на продажу" в виде результирующей таблицы. Это может быть ограничено посредством использования TOPNorFILTERи упорядочивания and с помощью ORDER BY.

снимок экрана, показывающий, как использовать EVALUATE для запроса DAX в представлении запросов DAXPower BI Desktop.

ORDER BY (необязательно)

Необязательное ключевое слово ORDER BY определяет один or больше столбцов в выражениях запроса or, используемых для сортировки результатов запроса. Любое выражение, которое можно оценить для каждой строки результата, допустимо. Любой столбец в самом запросе также является допустимым.

Сортировка по свойству столбца в семантических моделях not применяется к результатам запроса DAX. If столбец должен быть отсортирован по другому столбцу в модели, например в случае Month имени, сортировка по столбцу также должна быть включена в запрос DAX, который будет использоваться в ORDER BY.

Синтаксис ORDER BY

EVALUATE <table>
[ORDER BY {<expression> [{ASC | DESC}]}[, …]]

параметры ORDER BY

Срок Определение
expression Любое выражение DAX, возвращающее один скалярный value, or столбец, включенный в запрос 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

Возвращает заказы одежды andaverage прибыль на заказ по month, в порядке возрастания по month, в виде таблицы результатов.

снимок экрана, показывающий, как использовать ORDER BY для запроса DAX в представлении запросов DAXPower BI Desktop.

TOPN выполняет ли not выбор указанного количества строк в соответствии с порядком сортировки, указанным в 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, а затем сортирует результаты first по заказу на продажу, а затем по строке заказов на продажу.

снимок экрана, демонстрирующий использование TOPNandORDER BY для запроса DAX в представлении запросов DAX на платформе Power BI Desktop.

START AT (необязательно)

Необязательное ключевое слово START AT используется в предложении ORDER BY. Он определяет value, с которого начинаются результаты запроса.

Синтаксис START AT

EVALUATE <table>
[ORDER BY {<expression> [{ASC | DESC}]}[, …]
[START AT {<value>|<parameter>} [, …]]]

параметры START AT

Срок Определение
value Константа value. Не может быть выражением.
parameter Имя параметра в инструкции XMLA, которому предшествует символ @.

START AT примечания

Аргументы START AT соответствуют столбцам в конструкции ORDER BY "один к одному". В предложении START AT может быть столько аргументов, сколько в предложении ORDER BY, но not больше. Аргумент first в START AT определяет начальный value в первом столбце из столбцов ORDER BY. Аргумент second в START AT определяет начальный value во втором столбце среди столбцов ORDER BY в строках, которые соответствуют firstvalue для столбца 1.

Пример 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"

Возвращает all столбцы из таблицы "Заказ продаж" в порядке возрастания по заказу на продажу, начиная с SO43661. Строки перед этим заказом на продажу not включены в таблицу результатов.

скриншот, показывающий, как использовать ORDER BYandSTART AT для запроса DAX в режиме просмотра запросов DAX в Power BI Desktop.

DEFINE (необязательно)

Необязательное ключевое слово DEFINE содержит одно or больше определений вычисляемых сущностей, которые существуют только для duration запроса. В отличие от EVALUATE, в запросе DAX может быть только один блок DEFINE с более чем одним or определением. DEFINE должны предшествовать and инструкции firstEVALUATE допустимы для allEVALUATEstatements в запросе. Определения могут быть переменными, мерами, таблицами1, and столбцами1. Определения могут ссылаться на другие определения, которые появляются перед or, предшествуя текущему определению. Хотя бы одно определение является обязательным, if ключевое слово DEFINE включается в запрос.

DEFINE MEASURE — это распространенный сценарий для создания новых мер, or редактирования существующих мер в семантической модели. Если measure уже существует в модели, запрос DAX будет использовать формулу measureDAX, определенную в запросе. Это полезно для тестирования мер с помощью запроса DAX перед обновлением модели.

DEFINE MEASURE также полезно создать дополнительный анализ с формулами DAX для конкретного запроса DAX, где вы можете not иметь разрешение на добавление модели measureor необходимо not его в модели.

Синтаксис 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

Срок Определение
Entity MEASURE, VAR, TABLE1, or COLUMN1.
name Имя для measure, var, определения таблицы, колонки or. Это не может быть выражением. Имя not должно быть уникальным. Имя существует только для duration запроса.
expression Любое выражение DAX, которое возвращает таблицу or или скалярное значение value. Выражение может использовать любую из определенных сущностей. If необходимо convert преобразовать скалярное выражение в табличное выражение, обернуть выражение внутри конструктора таблицы с фигурными скобками {}, or использовать функцию ROW() для возврата таблицы с одной строкой.

[1] Предупреждение: определения запроса and таблицы столбцов предназначены исключительно для внутреннего использования. Хотя вы можете использовать выражения define TABLE and COLUMN для запроса без синтаксической ошибки error, они могут вызвать ошибки времени выполнения и поэтому не рекомендуются and и not.

DEFINE примечания

  • Запрос DAX может иметь несколько EVALUATEstatements, но может иметь только одну инструкцию DEFINE. Определения в инструкции DEFINE могут применяться к любым EVALUATEstatements в запросе.

  • В инструкции DEFINE требуется по крайней мере одно определение.

  • Measure определения для модели запроса переопределяют меры с тем же именем, но используются только в рамках самого запроса. Они not повлияют на measureмодель.

  • 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, чтобы отобразить некупленные продукты с дополнительным столбцом, который ссылается на заданные переменные. Кроме того, measure определяется and как count строки непроданных продуктов.

скриншот, демонстрирующий, как использовать DEFINE для запроса DAX в представлении запросов DAXPower BI Desktop.

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]
	)

Возвращает таблицу, оценивающую три заданные меры, чтобы продемонстрировать результаты по финансовым year. All измерения также существуют в модели, and Заказы на Клиента модифицированы в запросе DAX.

снимок экрана, демонстрирующий использование DEFINEMEASURE для запроса DAX в представлении запросов DAX программы Power BI Desktop.

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

Четко заданное заявление запроса DAX можно параметризовать and, а затем использовать снова and, изменяя только параметр values.

Метод Execute Method (XMLA) содержит элемент коллекции Parameters Element (XMLA), который позволяет определять параметры назначенным . Внутри коллекции каждый элемент параметра (XMLA) определяет имя параметра and и атрибут value к нему.

Ссылайтесь на параметры XMLA, добавляя префикс @ к имени параметра. Любое место в синтаксисе, где разрешено value, value можно заменить вызовом параметра. All параметры XMLA имеют текстовый тип.

Важно!

Параметры, определённые в разделе параметров andnot, используемые в элементе <STATEMENT>generate, в ответе error в XMLA. Параметры, используемые andnot, определенные в элементе <Parameters>generate ответа error в XMLA.

DAX statements SUMMARIZECOLUMNS