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í:
- 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ů.
- 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.
- 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.
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.
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.
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.
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 EVALUATE
můž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ů.
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í.
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) má 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.