Udostępnij za pośrednictwem


DAX queries

Klienci raportowania, tacy jak Power BI i Excel, wykonują zapytania DAX za każdym razem, gdy wizualizacje są wyświetlane w raporcie lub pole dodane do tabeli, a te DAX zapytania są dostosowywane po zastosowaniu filtru. The performance analyzer in Power BI Desktop can show you these DAX queries and even run them in DAX query view of Power BI Desktop.

Korzystając z widoku zapytań DAX w programie Power BI Desktop lub tworząc zapytania DAX w usłudze Power BI, można tworzyć i uruchamiać własne zapytania DAX. With Microsoft Fabric, you can further increase your productivity with Copilot to write DAX queries in DAX query view of Desktop or web. In addition to Power BI tools, DAX queries can be run in Fabric notebooks using semantic link to read data from semantic models with python, and with the Execute Queries REST API, also available in Power Automate. Inne narzędzia, takie jak SQL Server Management Studio (SSMS), program Power BI Report Builderi narzędzia open source, takie jak DAX Studio, umożliwiają również tworzenie i uruchamianie zapytań DAX.

DAX queries return results as a table right within the tool, allowing you to quickly create and test the performance of your DAX formulas in measures or simply view the data in your semantic model. Funkcje INFO i INFO.VIEW DAX mogą również pozyskiwać informacje o modelu semantycznym, takie jak lista tabel, kolumn, miar i wiele innych elementów.

Before learning about queries, it is important you have a solid understanding of DAX basics. If you haven't already, be sure to check out DAX overview.

Słowa kluczowe

DAX zapytania mają prostą składnię składającą się tylko z jednego wymaganego słowa kluczowego, EVALUATE. EVALUATE jest poprzedzone wyrażeniem tabeli, takim jak funkcja DAX lub nazwa tabeli, które po uruchomieniu generują tabelę wyników. Wyrażenia tabeli, które generują tabelę wyników, obejmują:

  1. Typowe funkcje DAX, które wyprowadzą tabelę, taką jak SUMMARIZE, SUMMARIZECOLUMNS, SELECTCOLUMNS, FILTER, UNION, TOPN, ADDCOLUMNS, DATATABLEi wiele innych, współpracują z EVALUATE, aby wyświetlić tabelę wyników.
  2. Tables in the model when referenced by name work with EVALUATE to output a result table showing the data in the table. Na przykład EVALUATE "Nazwa tabeli" można uruchamiać jako zapytanie DAX.
  3. Measures in the model or any DAX formula, which return a scalar value, work with EVALUATE to show the value as a result table when enclosed in curly braces. Na przykład EVALUATE {[Total Sales]} lub EVALUATE {COUNTROWS('Sales')} można uruchamiać jako zapytanie DAX. Są one nazywane konstruktorami tabel .

Istnieje kilka opcjonalnych słów kluczowych specyficznych dla zapytań DAX: ORDER BY, START AT, DEFINE, MEASURE, VAR, TABLE i COLUMN.

EVALUATE (wymagane)

Na najbardziej podstawowym poziomie zapytanie DAX jest instrukcją EVALUATE zawierającą wyrażenie tabeli. Wymagana jest co najmniej jedna instrukcja EVALUATE, jednak zapytanie może zawierać dowolną liczbę instrukcji EVALUATE.

składnia EVALUATE

EVALUATE <table>

EVALUATE Parameters

Termin Definicja
table A table expression.

Przykład EVALUATE

EVALUATE
	'Sales Order'

Zwraca wszystkie wiersze i kolumny z tabeli Sales Order (Zamówienie sprzedaży) jako tabelę wynikową. This can be limited with the use of TOPN or FILTER, and sorted with ORDER BY.

Zrzut ekranu przedstawiający sposób używania EVALUATE dla zapytania DAX w widoku zapytania DAX programu Power BI Desktop.

ORDER BY (opcjonalnie)

Opcjonalne słowo kluczowe ORDER BY definiuje co najmniej jedną kolumnę w zapytaniu lub wyrażeniach używanych do sortowania wyników zapytania. Każde wyrażenie, które można ocenić dla każdego wiersza wyniku, jest prawidłowe. Każda kolumna w samym zapytaniu jest również prawidłowa.

Sortowanie według właściwości kolumny w modelach semantycznych nie ma zastosowania do DAX wyników zapytania. Jeśli kolumna powinna być sortowana według innej kolumny w modelu, na przykład w przypadku nazwy miesiąca, sortowanie według kolumny powinno być również uwzględnione w zapytaniu DAX, które ma być używane w ORDER BY.

składnia ORDER BY

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

ORDER BY Parameters

Termin Definicja
expression Dowolne wyrażenie DAX zwracające pojedynczą wartość skalarną lub kolumnę zawartą w zapytaniu DAX.
ASC (ustawienie domyślne) Rosnąca kolejność sortowania.
DESC Descending sort order.

Przykład 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

Returns clothing orders and average profit per order by month, in ascending order by month, as a result table.

Zrzut ekranu przedstawiający sposób używania ORDER BY dla zapytania DAX w widoku zapytania DAX programu Power BI Desktop.

TOPN does not choose the specified number of rows to return based on the sort order specified in ORDER BY. Instead, TOPN has its own syntax to optionally specify a sort before the top 100 rows are return. ORDER BY sortuje tylko tabelę wyników zwracaną przez 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

Returns the top 100 sales orders sorted by SalesOrderLienKey ascending, then sorts the results first by sales order, then by sales order line.

Zrzut ekranu przedstawiający sposób używania TOPN i ORDER BY dla zapytania DAX w widoku zapytań DAX programu Power BI Desktop.

START AT (opcjonalnie)

Opcjonalne słowo kluczowe START AT jest używane wewnątrz klauzuli ORDER BY. Definiuje wartość, na której zaczynają się wyniki zapytania.

składnia START AT

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

START AT Parameters

Termin Definicja
value Stała wartość. Nie może być wyrażeniem.
parameter Nazwa parametru w instrukcji XMLA poprzedzona znakiem @.

START AT Uwagi

START AT arguments have a one-to-one correspondence with the columns in the ORDER BY clause. W klauzuli START AT może istnieć tyle argumentów, ile istnieje w klauzuli ORDER BY, ale nie więcej. Pierwszy argument w START AT definiuje wartość początkową w kolumnie 1 kolumny ORDER BY. The second argument in the START AT defines the starting value in column 2 of the ORDER BY columns within the rows that meet the first value for column 1.

Przykład 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"

Returns all columns from the Sales Order table, in ascending order by Sales Order, beginning at SO43661. Rows before this sales order are not included in the result table.

Zrzut ekranu przedstawiający sposób używania ORDER BY i START AT dla zapytania DAX w widoku zapytań DAX programu Power BI Desktop.

DEFINE (opcjonalnie)

Opcjonalne słowo kluczowe DEFINE wprowadza co najmniej jedną definicję jednostki obliczeniowej, która istnieje tylko przez czas trwania zapytania. W przeciwieństwie do EVALUATEmoże istnieć tylko jeden blok DEFINE z co najmniej jedną definicją w zapytaniu DAX. DEFINE musi poprzedzać pierwszą instrukcję EVALUATE i są prawidłowe dla wszystkich instrukcji EVALUATE w zapytaniu. Definicje mogą być zmiennymi, miarami, tabelami1i kolumnami1. Definicje mogą odwoływać się do innych definicji, które pojawiają się przed lub po bieżącej definicji. Co najmniej jedna definicja jest wymagana, jeśli słowo kluczowe DEFINE jest zawarte w zapytaniu.

DEFINE MEASURE jest typowym scenariuszem tworzenia nowych miar lub edytowania istniejących miar w modelu semantycznym. Gdy miara już istnieje w modelu, zapytanie DAX użyje miary DAX formuły zdefiniowanej w zapytaniu. Jest to przydatne w przypadku testowania miar za pomocą zapytania DAX przed zaktualizowaniem modelu.

DEFINE MEASURE jest również pomocna w tworzeniu dodatkowej analizy przy użyciu formuł DAX dla określonego zapytania DAX, w którym być może nie masz uprawnień do dodawania miary modelu lub nie jest konieczne jej posiadanie w modelu.

składnia 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 Parameters

Termin Definicja
Entity MEASURE, VAR, TABLE1lub COLUMN1.
name Nazwa miary, var, tabeli lub definicji kolumny. Nie może to być wyrażenie. Nazwa nie musi być unikatowa. Nazwa istnieje tylko przez czas trwania zapytania.
expression Dowolne wyrażenie DAX zwracające tabelę lub wartość skalarną. Wyrażenie może używać dowolnej ze zdefiniowanych jednostek. Jeśli istnieje potrzeba przekonwertowania wyrażenia skalarnego na wyrażenie tabeli, zawiń wyrażenie wewnątrz konstruktora tabeli za pomocą nawiasów klamrowych {}lub użyj funkcji ROW(), aby zwrócić tabelę z jednym wierszem.

[1]Przestroga: Definicje tabel i kolumn dotyczące zakresu zapytania są przeznaczone tylko do użytku wewnętrznego. Chociaż można zdefiniować wyrażenia TABLE i COLUMN dla zapytania bez błędu składniowego, mogą one powodować błędy środowiska uruchomieniowego i nie są zalecane.

DEFINE Uwagi

  • Zapytanie DAX może zawierać wiele instrukcji EVALUATE, ale może mieć tylko jedną instrukcję DEFINE. Definicje w instrukcji DEFINE mogą być stosowane do dowolnych instrukcji EVALUATE w zapytaniu.

  • Co najmniej jedna definicja jest wymagana w instrukcji DEFINE.

  • Definicje miar dla kwerendy zastępują miary modelu o tej samej nazwie, ale są używane tylko w zapytaniu. They will not affect the model measure.

  • VAR names have unique restrictions. Aby dowiedzieć się więcej, zobacz VAR — parametry.

Przykład 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]}

Zwraca tabelę zdefiniowaną w zapytaniu DAX, aby wyświetlić niekupione produkty z dodatkową kolumną odwołującą się do zdefiniowanych zmiennych. Miara jest również definiowana i oceniana w celu zliczania wierszy produktów, które nie zostały kupione.

Zrzut ekranu przedstawiający sposób używania DEFINE dla zapytania DAX w widoku zapytania DAX programu Power 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]
	)

Zwraca tabelę oceniając trzy zdefiniowane miary, aby pokazać wyniki według roku obrachunkowego. All measures also exist in the model, and Orders per Customer is modified in the DAX query.

Zrzut ekranu przedstawiający sposób używania DEFINEMEASURE dla zapytania DAX w widoku zapytania DAX programu Power BI Desktop.

Parametry w zapytaniach DAX

Dobrze zdefiniowana instrukcja zapytania DAX może być sparametryzowana, a następnie używana wielokrotnie przy zmianach tylko wartości parametrów.

Metoda Execute Method (XMLA) ma w kolekcji element Parameters Element (XMLA), który umożliwia definiowanie parametrów i przypisywanie im wartości. W kolekcji każdy element parametru (XMLA) definiuje nazwę parametru i jego wartość.

Odwołuj się do parametrów XMLA, prefiksując nazwę parametru z znakiem @. Dowolne miejsce w składni, w której dozwolona jest wartość, wartość można zastąpić wywołaniem parametru. Wszystkie parametry XMLA są wpisywane jako tekst.

Ważny

Parametry zdefiniowane w sekcji parameters i nieużytowane w elemecie <STATEMENT> generują odpowiedź o błędzie w pliku XMLA. Parametry używane i niezdefiniowane w elemecie <Parameters> generują odpowiedź o błędzie w kodzie XMLA.

oświadczenia DAXSUMMARIZECOLUMNS