Sdílet prostřednictvím


Syntaxe jazyka DAX

Tento článek popisuje syntaxi a požadavky jazyka výrazů vzorců DAX.

Požadavky na syntaxi

Vzorec DAX vždy začíná symbolem rovná se (=). Za znaménkem rovná se můžete zadat libovolný výraz, který se vyhodnotí jako skalární, nebo výraz, který lze převést na skalár. Patří mezi ně následující:

  • Skalární konstanta nebo výraz, který používá skalární operátor (+,-,*,/,>=,...,&; ...)

  • Odkazy na sloupce nebo tabulky Jazyk DAX vždy používá tabulky a sloupce jako vstupy pro funkce, nikdy pole nebo libovolnou sadu hodnot.

  • Operátory, konstanty a hodnoty zadané jako součást výrazu

  • Výsledek funkce a jejích požadovaných argumentů. Některé funkce JAZYKA DAX vracejí tabulku místo skaláru a musí být zabalené do funkce, která vyhodnocuje tabulku a vrací skalár; pokud tabulka není jediný sloupec, tabulka s jedním řádkem, považuje se za skalární hodnotu.

    Většina funkcí JAZYKA DAX vyžaduje jeden nebo více argumentů, které můžou zahrnovat tabulky, sloupce, výrazy a hodnoty. Některé funkce, například PI, však nevyžadují žádné argumenty, ale vždy vyžadují závorky k označení argumentu null. Například musíte vždy zadat PI(), nikoli PI(). Funkce můžete také vnořit do jiných funkcí.

  • Výrazy. Výraz může obsahovat libovolný nebo všechny následující operátory, konstanty nebo odkazy na sloupce.

Například následující jsou všechny platné vzorce.

Vzorec Výsledek
= 3 3
= "Sales" Sales
= 'Sales'[Amount] Pokud použijete tento vzorec v tabulce Sales (Prodej), získáte hodnotu sloupce Amount (Částka) v tabulce Sales (Prodej) pro aktuální řádek.
= (0,03 *[Částka])

=0,03 * [Částka]
Tři procenta hodnoty ve sloupci Částka v aktuální tabulce

I když se tento vzorec dá použít k výpočtu procenta, výsledek se nezobrazí jako procento, pokud v tabulce nepoužijete formátování.
= PI() Hodnota konstanty pí.

Vzorce se můžou chovat odlišně podle toho, jak se používají. Vždy musíte vědět o kontextu a o tom, jak data, která ve vzorci používáte, souvisí s jinými daty, která se můžou použít ve výpočtu.

Požadavky na pojmenování

Datový model často obsahuje více tabulek. Tabulky a jejich sloupce společně tvoří databázi uloženou v analytickém modulu v paměti (VertiPaq). V této databázi musí mít všechny tabulky jedinečné názvy. Názvy sloupců musí být také jedinečné v rámci každé tabulky. Všechny názvy objektů nerozlišují malá a velká písmena. Například názvy SALES a Sales by představovaly stejnou tabulku.

Každý sloupec a míra, které přidáte do existujícího datového modelu, musí patřit do konkrétní tabulky. Tabulku, která obsahuje sloupec, zadáte implicitně, když vytvoříte počítaný sloupec v tabulce nebo explicitně, když vytvoříte míru a zadáte název tabulky, ve které má být uložena definice míry.

Pokud jako vstup funkce použijete tabulku nebo sloupec, musíte obecně kvalifikovat název sloupce. Plně kvalifikovaný název sloupce je název tabulky, za nímž následuje název sloupce v hranatých závorkách: například "U.S. Sales"[Products]. Plně kvalifikovaný název se vždy vyžaduje, když odkazujete na sloupec v následujících kontextech:

  • Jako argument funkce HODNOTY

  • Jako argument pro funkce, ALL nebo ALLEXCEPT

  • V argumentu filtru pro funkce, CALCULATE nebo CALCULATETABLE

  • Jako argument funkce RELATEDTABLE

  • Jako argument pro libovolnou funkci časového měřítka

Nekvalifikovaný název sloupce je jenom název sloupce, který je uzavřený v hranatých závorkách: například [Sales Amount]. Pokud například odkazujete na skalární hodnotu ze stejného řádku aktuální tabulky, můžete použít nekvalifikovaný název sloupce.

Pokud název tabulky obsahuje mezery, vyhrazená klíčová slova nebo nepovolené znaky, musíte název tabulky uzavřít do jednoduchých uvozovek. Názvy tabulek je také nutné uzavřít do uvozovek, pokud název obsahuje jakékoli znaky mimo oblast alfanumerických znaků ANSI bez ohledu na to, jestli vaše národní prostředí podporuje znakovou sadu, nebo ne. Pokud například otevřete sešit, který obsahuje názvy tabulek napsané v cyrilice, například Таблица, musí být název tabulky uzavřený do uvozovek, i když neobsahuje mezery.

Poznámka:

Pokud chcete usnadnit zadávání plně kvalifikovaných názvů sloupců, použijte v editoru vzorců funkci Automatické dokončování.

Tabulky

  • Názvy tabulek se vyžadují vždy, když je sloupec z jiné tabulky než aktuální tabulka. Názvy tabulek musí být v databázi jedinečné.

  • Názvy tabulek musí být uzavřeny do jednoduchých uvozovek, pokud obsahují mezery, jiné speciální znaky nebo jiné než anglické alfanumerické znaky.

Opatření

  • Názvy měr musí být vždy v hranatých závorkách.

  • Názvy měr můžou obsahovat mezery.

  • Každý název míry musí být v rámci modelu jedinečný. Proto je název tabulky před názvem míry volitelný při odkazování na existující míru. Při vytváření míry však musíte vždy zadat tabulku, ve které bude definice míry uložena.

Sloupce

Názvy sloupců musí být jedinečné v kontextu tabulky; Několik tabulek však může mít sloupce se stejnými názvy (nejednoznačnost se dodává s názvem tabulky).

Obecně platí, že na sloupce lze odkazovat bez odkazování na základní tabulku, do které patří, s výjimkou případů, kdy může dojít ke konfliktu názvů názvů, které by mohly být vyřešeny nebo s některými funkcemi, které vyžadují, aby byly názvy sloupců plně kvalifikované.

Vyhrazená klíčová slova

Pokud je název, který používáte pro tabulku, stejný jako rezervované klíčové slovo služby Analysis Services, vyvolá se chyba a je nutné tabulku přejmenovat. Klíčová slova však můžete použít v názvech objektů, pokud je název objektu uzavřený v závorkách (pro sloupce) nebo uvozovky (pro tabulky).

Poznámka:

Uvozovky mohou být reprezentovány několika různými znaky v závislosti na aplikaci. Pokud vložíte vzorce z externího dokumentu nebo webové stránky, nezapomeňte zkontrolovat kód ASCII znaku, který se používá pro otevírání a zavírání uvozovek, abyste měli jistotu, že jsou stejné. V opačném případě nemusí daX rozpoznat symboly jako uvozovky, což zneplatní odkaz.

Speciální znaky

Následující znaky a typy znaků nejsou platné v názvech tabulek, sloupců nebo měr:

  • Úvodní nebo koncové mezery; pokud nejsou mezery uzavřeny oddělovači názvů, hranatými závorkami nebo jedním apostrofem.

  • Řídicí znaky

  • Následující znaky, které nejsou platné v názvech objektů:

    .,;':/\*|? &%$!+=()[]{}<>

Příklady názvů objektů

Následující tabulka uvádí příklady některých názvů objektů:

Typy objektů Příklady Komentář
Název tabulky Sales Pokud název tabulky neobsahuje mezery ani jiné speciální znaky, název nemusí být uzavřený do uvozovek.
Název tabulky "Canada Sales" (Prodej v Kanadě) Pokud název obsahuje mezery, tabulátory nebo jiné speciální znaky, uzavřete ho do jednoduchých uvozovek.
Plně kvalifikovaný název sloupce Sales[Amount] Název tabulky předchází názvu sloupce a název sloupce je uzavřený v hranatých závorkách.
Plně kvalifikovaný název míry Sales[Profit] Název tabulky předchází názvu míry a název míry je uzavřený v hranatých závorkách. V určitých kontextech se vždy vyžaduje plně kvalifikovaný název.
Nekvalifikovaný název sloupce [Částka] Nekvalifikovaný název je pouze název sloupce v hranatých závorkách. Kontexty, ve kterých můžete použít nekvalifikovaný název, zahrnují vzorce v počítaném sloupci ve stejné tabulce nebo v agregační funkci, která prohledává stejnou tabulku.
Plně kvalifikovaný sloupec v tabulce s mezerami 'Canada Sales'[Qty] Název tabulky obsahuje mezery, takže musí být obklopen jednoduchými uvozovkami.

Další omezení

Syntaxe požadovaná pro každou funkci a typ operace, kterou může provádět, se výrazně liší v závislosti na funkci. Obecně platí ale následující pravidla pro všechny vzorce a výrazy:

  • Vzorce a výrazy jazyka DAX nemohou upravovat ani vkládat jednotlivé hodnoty do tabulek.

  • Počítané řádky nelze vytvořit pomocí jazyka DAX. Můžete vytvářet jenom počítané sloupce a míry.

  • Při definování počítaných sloupců můžete vnořit funkce na libovolnou úroveň.

  • JAZYK DAX má několik funkcí, které vracejí tabulku. Hodnoty vrácené těmito funkcemi obvykle použijete jako vstup do jiných funkcí, které vyžadují tabulku jako vstup.

Operátory a konstanty jazyka DAX

Následující tabulka uvádí operátory podporované jazykem DAX. Další informace o syntaxi jednotlivých operátorů najdete v tématu Operátory JAZYKA DAX.

Typ operátora Symbol a použití
Operátor závorek () Pořadí priorit a seskupení argumentů
Aritmetické operátory + (sčítání)

- (odčítání/

znaménko)

* (násobení)

/ (divize)

^ (exponentiation)
Operátory porovnání = (rovno)

> (větší než)

< (menší než)

>= (větší než nebo rovno)

<= (menší než nebo rovno)

<> (nerovná se)
Operátor zřetězení textu & (zřetězení)
Operátory logiky & (a)

|| (nebo)

Datové typy

Nemusíte přetypovat, převádět ani jinak zadávat datový typ sloupce nebo hodnoty, které používáte ve vzorci DAX. Když použijete data ve vzorci DAX, jazyk DAX automaticky identifikuje datové typy v odkazovaných sloupcích a hodnotách, které zadáte, a provede implicitní převody v případě potřeby k dokončení zadané operace.

Pokud se například pokusíte přidat číslo k hodnotě data, modul interpretuje operaci v kontextu funkce a převede čísla na běžný datový typ a výsledek pak zobrazí v zamýšleném formátu datum.

Existují však určitá omezení hodnot, které lze úspěšně převést. Pokud má hodnota nebo sloupec datový typ, který není kompatibilní s aktuální operací, vrátí jazyk DAX chybu. Jazyk DAX také neposkytuje funkce, které umožňují explicitně změnit, převést nebo přetypovat datový typ existujících dat, která jste naimportovali do datového modelu.

Důležité

Jazyk DAX nepodporuje použití datového typu varianty. Proto při načítání nebo importu dat do datového modelu se očekává, že data v každém sloupci jsou obecně konzistentním datovým typem.

Některé funkce vracejí skalární hodnoty, včetně řetězců, zatímco jiné funkce pracují s čísly, celými čísly i skutečnými čísly nebo kalendářními daty a časy. Datový typ vyžadovaný pro každou funkci je popsán v části funkce JAZYKA DAX.

Jako argument funkce můžete použít tabulky obsahující více sloupců a více řádků dat. Některé funkce také vrací tabulky, které jsou uložené v paměti a lze je použít jako argumenty pro jiné funkce.

Datum a čas

Jazyk DAX ukládá hodnoty data a času pomocí datového typu datetime, který používá Microsoft SQL Server. Formát datetime používá číslo s plovoucí desetinnou čárkou, kde hodnoty data odpovídají celočíselné části představující počet dní od 30. prosince 1899. Časové hodnoty odpovídají desetinné části hodnoty data, kde hodiny, minuty a sekundy jsou reprezentovány desetinnými zlomky dne. Funkce data a času jazyka DAX implicitně převádějí argumenty na datový typ datetime.

Poznámka:

Přesná maximální hodnota data a času podporovaná jazykem DAX je 31. prosince 9999 00:00:00.

Literál data a času

Od verze Power BI Desktopu ze srpna 2021 lze hodnoty data a data a času daX zadat jako literál ve formátu dt"YYYY-MM-DD", dt"YYYY-MM-DDThh:mm:ss"nebo dt"YYYY-MM-DD hh:mm:ss". Pokud je zadán jako literál, použití funkce DATE, TIME, DATEVALUE, TIMEVALUE ve výrazu nejsou nezbytné.

Například následující výraz používá funkce DATUM a ČAS k filtrování podle orderDate:

EVALUATE
FILTER (
        FactInternetSales,
        [OrderDate] > (DATE(2015,1,9) + TIME(2,30,0)) &&[OrderDate] < (DATE(2015,12,31) + TIME(11,59,59))
)

Stejný výraz filtru lze zadat jako literál:

EVALUATE
FILTER (
        FactInternetSales,
        [OrderDate] > dt"2015-1-9T02:30:00" && [OrderDate] < dt"2015-12-31T11:59:59"
)

Poznámka:

Ve všech verzích Power BI Desktopu, Analysis Services a Power Pivotu v Excelu není podporovaný formát literálu typu date a datetime. Nové a aktualizované funkce JAZYKA DAX se obvykle poprvé zavádějí v Power BI Desktopu a později jsou součástí Analysis Services a Power Pivotu v Excelu.