Sdílet prostřednictvím


DAX dotazy

Klienti generování sestav, jako jsou Power BI a Excel, spouštějí DAX dotazy pokaždé, když se vizuály objeví v sestavě nebo když je pole přidáno do tabulky, a tyto DAX dotazy se upravují při aplikaci filtru. Analyzátor výkonu v Power BI Desktopu vám může tyto DAX dotazy zobrazit a dokonce je spustit v zobrazení dotazu DAX.

Pomocí DAX zobrazení dotazů v Power BI Desktopu nebo Psát DAX dotazy ve službě Power BI můžete vytvářet a spouštět vlastní DAX dotazy. S Microsoft Fabricmůžete zvýšit produktivitu pomocí Copilotu a psát DAX dotazy v zobrazení dotazů DAX Desktopu nebo webu. Kromě nástrojů Power BI je možné DAX dotazy spouštět v poznámkových blocích Fabric pomocí sémantického odkazu ke čtení dat z sémantických modelů pomocí Pythonu a s spouštění dotazů rozhraní REST API, které jsou k dispozici také v Power Automate. Další nástroje, jako je SQL Server Management Studio (SSMS), Tvůrce sestav Power BI a opensourcové nástroje, jako je DAX Studio, umožňují také vytvářet a spouštět DAX dotazy.

DAX dotazy vrací výsledky jako tabulku přímo v nástroji, takže můžete rychle vytvořit a otestovat výkon vzorců DAX v mírách nebo jednoduše zobrazit data v sémantickém modelu. Funkce INFORMACE a INFORMACE.VIEW DAX můžou také získat informace o vašem sémantickém modelu, jako je seznam tabulek, sloupců, parametrů a mnoho dalšího.

Než se seznámíte s dotazy, je důležité, abyste pochopili základní informace o DAX. Pokud jste to ještě neudělali, nezapomeňte si prohlédnout přehled DAX.

Klíčová slova

DAX dotazy mají jednoduchou syntaxi tvořenou pouze jedním požadovaným klíčovým slovem EVALUATE. EVALUATE je následován tabulkovým výrazem, jako je funkce DAX nebo název tabulky, který při spuštění vrátí výslednou tabulku. Výrazy tabulky, které vypíšou výstupní tabulku, zahrnují:

  1. Běžné DAX funkce, které vypíše tabulku, jako je SUMMARIZE, SUMMARIZECOLUMNS, SELECTCOLUMNS, FILTER, UNION, TOPN, ADDCOLUMNS, DATATABLEa mnoho dalších, pracují s EVALUATE na výstupu tabulky výsledků.
  2. Tabulky v modelu, na které odkazuje název, pracují s EVALUATE pro výstup výsledné tabulky zobrazující data v tabulce. Například EVALUATE název tabulky lze spustit jako DAX dotaz.
  3. Míry v modelu nebo libovolném vzorci DAX, který vrací skalární hodnotu, pracují s EVALUATE, aby se hodnota zobrazovala jako výsledná tabulka, když je uzavřená ve složených závorkách. Například EVALUATE {[Total Sales]} nebo EVALUATE {COUNTROWS('Sales')} lze spustit jako dotaz DAX. Nazývají se konstruktory tabulky.

Pro dotazy DAX existuje několik volitelných klíčových slov: ORDER BY, START AT, DEFINE, MEASURE, VAR, TABULKA a SLOUPEC.

EVALUATE (povinné)

Na nejzásadnější úrovni je DAX dotaz příkazem EVALUATE obsahujícím výraz tabulky. Vyžaduje se alespoň jeden příkaz EVALUATE, ale dotaz může obsahovat libovolný počet příkazů EVALUATE.

Syntaxe EVALUATE

EVALUATE <table>

parametry EVALUATE

Období Definice
table Výraz tabulky.

příklad EVALUATE

EVALUATE
	'Sales Order'

Vrátí všechny řádky a sloupce z tabulky Sales Order (Prodejní objednávka) jako výslednou tabulku. To může být omezeno použitím TOPN nebo FILTERa seřazeno pomocí ORDER BY.

snímek obrazovky ukazující, jak použít EVALUATE pro dotaz DAX v zobrazení dotazu DAX v Power BI Desktopu.

ORDER BY (volitelné)

Volitelné klíčové slovo ORDER BY definuje jeden nebo více sloupců v dotazu nebo výrazech použitých k řazení výsledků dotazu. Libovolný výraz, který lze vyhodnotit pro každý řádek výsledku, je platný. Jakýkoli sloupec v samotném dotazu je také platný.

Vlastnost seřadit podle sloupce v sémantických modelech se nevztahuje na výsledky dotazu DAX. Pokud by měl být sloupec seřazen podle jiného sloupce v modelu, například v případě názvu měsíce, měl by být řazení podle sloupce také zahrnut do DAX dotazu, který se má použít v ORDER BY.

Syntaxe ORDER BY

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

parametry ORDER BY

Období Definice
expression Libovolný výraz DAX, který vrátí jednu skalární hodnotu nebo sloupec zahrnutý v dotazu DAX.
ASC (výchozí) Vzestupné pořadí řazení
DESC Sestupné pořadí řazení

příklad 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

Vrátí objednávky oblečení a průměrný zisk na objednávku podle měsíce ve vzestupném pořadí podle měsíce jako výslednou tabulku.

snímek obrazovky ukazující, jak použít ORDER BY pro dotaz DAX v DAX zobrazení dotazu v Power BI Desktopu.

TOPN nevybere zadaný počet řádků, které se mají vrátit na základě pořadí řazení zadaného v ORDER BY. Místo toho TOPN má vlastní syntaxi pro volitelné zadání řazení před vrácením prvních 100 řádků. ORDER BY seřazuje pouze tabulku výsledků vrácenou 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

Vrátí prvních 100 prodejních objednávek seřazených vzestupně podle SalesOrderLienKey a pak výsledky seřadí jako první podle prodejní objednávky a potom podle řádku prodejní objednávky.

Snímek obrazovky ukazující, jak použít TOPN a ORDER BY pro dotaz DAX v zobrazení dotazu DAX v Power BI Desktop.

START AT (volitelné)

Volitelné klíčové slovo START AT se používá uvnitř klauzule ORDER BY. Definuje hodnotu, pro kterou začínají výsledky dotazu.

Syntaxe START AT

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

parametry START AT

Období Definice
value Konstantní hodnota. Nemůže být výrazem.
parameter Název parametru v příkazu XMLA s předponou znaku @.

poznámky k START AT

START AT argumenty mají shodu 1:1 se sloupci v klauzuli ORDER BY. V klauzuli START AT může být tolik argumentů, kolik existuje v klauzuli ORDER BY, ale ne více. První argument v START AT definuje počáteční hodnotu ve sloupci 1 ORDER BY sloupců. Druhý argument v START AT definuje počáteční hodnotu ve sloupci 2 mezi sloupci ORDER BY v těch řádcích, které odpovídají první hodnotě ve sloupci 1.

příklad 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"

Vrátí všechny sloupce z tabulky Sales Order (Prodejní objednávka) ve vzestupném pořadí podle prodejní objednávky počínaje SO43661. Řádky před touto prodejní objednávkou nejsou zahrnuty do výsledné tabulky.

Snímek obrazovky ukazující, jak v Power BI Desktopu použít ORDER BY a START AT pro dotaz DAX v zobrazení dotazu DAX.

DEFINE (volitelné)

Volitelné klíčové slovo DEFINE zavádí jednu nebo více definic počítaných entit, které existují pouze po dobu trvání dotazu. Na rozdíl od EVALUATEmůže existovat pouze jeden blok DEFINE s jednou nebo více definicemi v dotazu DAX. DEFINE musí předcházet prvnímu příkazu EVALUATE a jsou platné pro všechny příkazy EVALUATE v dotazu. Definice mohou být proměnné, míry, tabulky1a sloupce1. Definice můžou odkazovat na jiné definice, které se zobrazí před nebo za aktuální definicí. Pokud je do dotazu zahrnuté klíčové slovo DEFINE, vyžaduje se alespoň jedna definice.

DEFINE MEASURE je běžným scénářem vytváření nových měr nebo úprav stávajících měr v sémantickém modelu. Pokud již míra existuje v modelu, dotaz DAX použije vzorec definovaný v dotazu pro míru DAX. To je užitečné pro testování měr s dotazem DAX před aktualizací modelu.

DEFINE MEASURE je také užitečné vytvořit další analýzu pomocí vzorců DAX pro konkrétní DAX dotaz, kde nemáte oprávnění k přidání míry modelu nebo není nutné ji mít v modelu.

Syntaxe 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>) +

parametry DEFINE

Období Definice
Entity MEASURE, VAR, TABULKA1nebo SLOUPEC1.
name Název míry, var, tabulky nebo definice sloupce. Nemůže to být výraz. Název nemusí být jedinečný. Název existuje pouze po dobu trvání dotazu.
expression Libovolný DAX výraz, který vrací tabulku nebo skalární hodnotu. Výraz může použít libovolnou z definovaných entit. Pokud je potřeba převést skalární výraz na výraz tabulky, zabalte výraz do konstruktoru tabulky se složenými závorkami {}nebo použijte funkci ROW() k vrácení tabulky s jedním řádkem.

[1]Upozornění: Definice TABULEK a SLOUPCŮ s oborem dotazu jsou určeny pouze pro interní použití. I když můžete definovat výrazy TABLE a COLUMN pro dotaz bez chyby syntaxe, mohou způsobit chyby za běhu a nedoporučuje se.

poznámky k DEFINE

  • Dotaz DAX může mít více příkazů EVALUATE, ale může mít pouze jeden DEFINE příkaz. Definice v příkazu DEFINE se můžou vztahovat na jakékoli příkazy EVALUATE v dotazu.

  • V příkazu DEFINE se vyžaduje aspoň jedna definice.

  • Definice měr v dotazu přepíší míry modelu se stejným názvem, ale jsou použity pouze v rámci dotazu. Nebudou mít vliv na měření modelu.

  • VAR názvy mají jedinečná omezení. Další informace najdete v tématu VAR – parametry.

příklad 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]}

Vrátí tabulku definovanou v dotazu DAX tak, aby zobrazovala nepřepravené produkty s dalším definovaným sloupcem odkazujícím na definované proměnné. Míra se také definuje a vyhodnocuje tak, aby se spočítaly řádky nespotřebovaných produktů.

snímek obrazovky ukazující, jak použít DEFINE pro dotaz DAX v DAX zobrazení dotazu v Power BI Desktopu.

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

Vrátí tabulku, která vyhodnocuje tři definované míry, aby zobrazila výsledky podle fiskálního roku. V modelu existují také všechny míry, a počet objednávek na zákazníka se v dotazu DAX upraví.

Snímek obrazovky znázorňující, jak použít DEFINEMEASURE pro dotaz DAX v zobrazení dotazu DAX Power BI Desktopu

Parametry v dotazech DAX

Dobře definovaný příkaz dotazu DAX je možné parametrizovat a pak ho použít znovu s pouhými změnami v hodnotách parametrů.

Metoda Execute Method (XMLA)Parameters Element (XMLA) kolekční prvek, který umožňuje definovat parametry a přiřadit jim hodnoty. V rámci kolekce každý element Parameter Element (XMLA) definuje název parametru a hodnotu.

Odkazovat na parametry XMLA předponou názvu parametru @ znakem. Jakékoli místo v syntaxi, kde je povolena hodnota, může být hodnota nahrazena voláním parametru. Všechny parametry XMLA jsou zadány jako text.

Důležitý

Parametry definované v oddílu parametrů a nepoužívané v elementu <STATEMENT> generují v XMLA chybovou odpověď. Parametry použité a nedefinované v elementu <Parameters> generují chybovou odpověď v XMLA.

DAX příkazySUMMARIZECOLUMNS