Zdieľať cez


Prehľad jazyka DAX

Data Analysis Expressions (DAX) je výrazový jazyk vzorcov, ktorý sa používa v aplikáciách Analysis Services, Power BI a Power Pivot v Exceli. Vzorce jazyka DAX obsahujú funkcie, operátory a hodnoty na vykonávanie rozšírených výpočtov a dotazov na údajoch v súvisiacich tabuľkách a stĺpcoch v tabuľkových dátových modeloch.

Tento článok obsahuje iba základný úvod k najdôležitejším konceptom v jazyku DAX. Popisuje jazyk DAX, pretože sa vzťahuje na všetky produkty, ktoré ho používajú. Niektoré funkcie sa nemusia vzťahovať na určité produkty alebo prípady použitia. Pozrite si dokumentáciu k produktu s popisom konkrétnej implementácie jazyka DAX.

Výpočty

Vzorce jazyka DAX sa používajú v mierkach, vypočítaných stĺpcoch, vypočítaných tabuľkách a zabezpečení na úrovni riadkov.

Miery

Mierky sú dynamické výpočtové vzorce, v ktorých sa výsledky menia v závislosti od kontextu. Mierky sa používajú na vytváranie zostáv, ktoré podporujú kombinovanie a filtrovanie údajov modelu pomocou viacerých atribútov, ako sú zostava služby Power BI alebo excelová kontingenčná tabuľka alebo kontingenčný graf. Mierky sa vytvárajú pomocou riadka vzorcov DAX v návrhárovi modelu.

Vzorec v mierke môže používať štandardné agregačné funkcie, ktoré sa automaticky vytvoria pomocou funkcie automatického súhrnu, ako napríklad COUNT alebo SUM, alebo môžete definovať svoj vlastný vzorec pomocou riadka vzorcov DAX. Pomenované mierky možno odovzdať ako argument do iných mierok.

Keď definujete vzorec pre mierku v riadku vzorcov, funkcia popisu zobrazí ukážku výsledkov pre celkovú hodnotu v aktuálnom kontexte, ale v opačnom prípade výsledky okamžite nikde nevystupujú. Dôvod, prečo nie je možné zobraziť (filtrované) výsledky výpočtu okamžite, je skutočnosť, že výsledok mierky nemožno určiť bez kontextu. Na vyhodnotenie mierky sa vyžaduje klientska aplikácia na vytváranie zostáv, ktorá môže poskytnúť kontext potrebný na načítanie údajov relevantných pre každú bunku a potom vyhodnotiť výraz pre každú bunku. Tento klient môže byť excelová kontingenčná tabuľka alebo kontingenčný graf, zostava Power BI alebo výraz tabuľky v dotaze DAX v nástroji SQL Server Management Studio (SSMS).

Bez ohľadu na klienta sa pre každú bunku vo výsledkoch spustí samostatný dotaz. To znamená, že každá kombinácia hlavičiek riadkov a stĺpcov v kontingenčnej tabuľke alebo každý výber rýchlych filtrov a filtrov v zostave Power BI vygeneruje inú podmnožinu údajov, na ktorých sa mierka vypočítava. Napríklad pomocou tohto veľmi jednoduchého vzorca mierky:

Total Sales = SUM([Sales Amount])

Keď používateľ umiestni mierku TotalSales (Celkový predaj) v zostave a potom umiestni stĺpec Product Category (Kategória produktov) z tabuľky Product (Produkt) do filtrov, pre každú kategóriu produktu sa vypočíta a zobrazí súčet Sales Amount (Čiastka predaja).

Na rozdiel od vypočítaných stĺpcov obsahuje syntax mierky pred vzorcom názov mierky. V uvedenom príklade sa názov Celkový predaj zobrazí pred vzorcom. Po vytvorení mierky sa názov a definícia zobrazia v zozname polí klientskej aplikácie na vytváranie zostáv a v závislosti od perspektív a rolí bude k dispozícii pre všetkých používateľov modelu.

Ďalšie informácie nájdete v téme:
Mierky v aplikácii Power BI Desktop
Mierky v službe Analysis Services
Mierky v doplnku Power Pivot

Vypočítané stĺpce

Vypočítaný stĺpec je stĺpec, ktorý pridáte do existujúcej tabuľky (v návrhárovi modelu) a potom vytvorte vzorec DAX, ktorý definuje hodnoty stĺpca. Keď vypočítaný stĺpec obsahuje platný vzorec DAX, hodnoty sa vypočítajú pre každý riadok ihneď po zadaní vzorca. Hodnoty sa potom uložia do dátového modelu v pamäti. Napríklad v tabuľke dátumov, keď je vzorec zadaný do riadka vzorcov:

= [Calendar Year] & " Q" & [Calendar Quarter]

Hodnota pre každý riadok v tabuľke sa vypočíta tak, že sa vyberajú hodnoty zo stĺpca Kalendárny rok (v tej istej tabuľke dátumov), pridá sa medzera a veľké písmeno Q, potom sa pridajú hodnoty z stĺpca Kalendárny štvrťrok (v tej istej tabuľke dátumov). Výsledok pre každý riadok vo vypočítanom stĺpci sa vypočíta okamžite a zobrazí sa, napríklad ako 2017 Q1. Hodnoty stĺpcov sa prepočítajú iba v prípade, že tabuľka alebo ľubovoľná súvisiaca tabuľka sa spracuje (obnoví) alebo sa model uvoľní z pamäte a potom sa znova načíta, napríklad pri zatvorení a opätovnom otvorení súboru aplikácie Power BI Desktop.

Ďalšie informácie nájdete v téme:
Vypočítané stĺpce v aplikácii Power BI Desktop
Vypočítané stĺpce v službe Analysis Services
Vypočítané stĺpce v doplnku Power Pivot.

vypočítané tabuľky,

Vypočítaná tabuľka je objekt vypočítaný na základe výrazu vzorca odvodeného z celej alebo časti iných tabuliek v tom istom modeli. Namiesto dotazovania a načítavania hodnôt do nových stĺpcov tabuľky zo zdroja údajov vzorec jazyka DAX definuje hodnoty tabuľky.

Vypočítavané tabuľky môžu byť užitočné v dimenzii zohrávajúcej roly. Príkladom je tabuľka dátumov, napríklad DátumObjednávky, DátumOdoslania alebo TermínDodanej Hodnoty, v závislosti od vzťahu cudzieho kľúča. Vytvorením explicitne vypočítanej tabuľky pre dávny dátum odoslania získate samostatnú tabuľku, ktorá je k dispozícii pre dotazy ako plne funkčná ako ktorákoľvek iná tabuľka. Vypočítané tabuľky sú tiež užitočné pri konfigurácii filtrovanej množiny riadkov alebo podmnožiny alebo nadmnožiny stĺpcov z iných existujúcich tabuliek. To vám umožní ponechať pôvodnú tabuľku neporušenú a zároveň vytvárať variácie tejto tabuľky na podporu konkrétnych scenárov.

Vypočítané tabuľky podporujú vzťahy s inými tabuľkami. Stĺpce vo vypočítavanej tabuľke majú typy údajov, formátovanie a môžu patriť do kategórie údajov. Vypočítané tabuľky môžu byť pomenované a zobrazované na povrch alebo skryté rovnako ako akékoľvek iné tabuľky. Vypočítané tabuľky sa prepočítajú, ak sa niektorá z tabuliek, z ktorej načíta údaje, obnoví alebo aktualizuje.

Ďalšie informácie nájdete v téme:
Vypočítané tabuľky v aplikácii Power BI Desktop
Vypočítané tabuľky v službe Analysis Services.

Zabezpečenie na úrovni riadkov

So zabezpečením na úrovni riadkov sa musí vzorec jazyka DAX vyhodnotiť na booleovskú podmienku TRUE/FALSE definujúc, ktoré riadky môžu byť vrátené výsledkami dotazu podľa členov konkrétnej roly. Napríklad pre členov roly Predaj tabuľka Zákazníci s nasledujúcim vzorcom DAX:

= Customers[Country] = "USA"

Členovia roly Predaj budú môcť zobraziť údaje iba pre zákazníkov v USA a agregáty, napríklad SUM, sa vrátia iba pre zákazníkov v USA. Zabezpečenie na úrovni riadkov nie je k dispozícii v aplikácii Power Pivot v Exceli.

Pri definovaní zabezpečenia na úrovni riadkov pomocou vzorca jazyka DAX vytvárate povolenú množinu riadkov. Tým sa nezamieňuje prístup k iným riadkom. Namiesto toho sa jednoducho nevrátia ako súčasť povolenej množiny riadkov. Iné roly môžu umožniť prístup k riadkom vylúčeným podľa vzorca DAX. Ak je používateľ členom inej roly a zabezpečenie na úrovni riadkov tejto roly umožňuje prístup ku konkrétnej množine riadkov, používateľ môže zobraziť údaje pre tento riadok.

Vzorce zabezpečenia na úrovni riadkov sa vzťahujú na zadané riadky, ako aj na súvisiace riadky. Ak tabuľka obsahuje viacero vzťahov, filtre použijú zabezpečenie na vzťah, ktorý je aktívny. Vzorce zabezpečenia na úrovni riadkov sa budú prekrývať s inými vzorcami definovanými pre súvisiace tabuľky.

Ďalšie informácie nájdete v téme:
Zabezpečenie na úrovni riadkov (RLS) v Power BI
Roly v službe Analysis Services

Dotazy

Dotazy DAX je možné vytvoriť a spustiť v nástroji SQL Server Management Studio (SSMS) a nástrojoch open-source, ako je napríklad DAX Studio (daxstudio.org). Na rozdiel od výpočtových vzorcov jazyka DAX, ktoré je možné vytvoriť iba v tabuľkových dátových modeloch, možno dotazy DAX spúšťať aj v prípade multidimenzionálnych modelov služby Analysis Services. Dotazy DAX sa často jednoduchšie zapisujú a sú efektívnejšie ako dotazy MDX (multidimenzionálnych údajových výrazov).

Dotaz DAX je príkaz podobný príkazu SELECT v T-SQL. Základný typ dotazu DAX je vyhodnotiť príkaz. Napríklad

EVALUATE
 ( FILTER ( 'DimProduct', [SafetyStockLevel] < 200 ) )
ORDER BY [EnglishProductName] ASC

Vráti vo výsledkoch tabuľku, ktorá uvádza iba tie produkty s Trezor tyStockLevel menšou ako 200 vo vzostupnom poradí podľa názvuProduktuvAnglište.

Mierky môžete vytvoriť ako súčasť dotazu. Mierky existujú len počas trvania dotazu. Ďalšie informácie nájdete v téme Dotazy DAX.

Vzorce

Vzorce DAX sú nevyhnutné na vytváranie výpočtov vo vypočítaných stĺpcoch a mierkach a na zabezpečenie údajov pomocou zabezpečenia na úrovni riadkov. Ak chcete vytvoriť vzorce pre vypočítané stĺpce a mierky, použite riadok vzorcov v hornej časti okna návrhára modelu alebo Editora DAX. Ak chcete vytvoriť vzorce pre zabezpečenie na úrovni riadkov, použite dialógové okno Správca rolí alebo Spravovať roly. Informácie v tejto časti sú určené ako úvodné informácie o základoch vzorcov DAX.

Základy vzorcov

Vzorce DAX môžu byť veľmi jednoduché alebo aj pomerne zložité. V nasledujúcej tabuľke sú uvedené príklady jednoduchých vzorcov, ktoré možno použiť vo vypočítanom stĺpci.

Vzorec Definícia
= TODAY() Vloží dnešný dátum do každého riadka vypočítaného stĺpca.
= 3 Vloží hodnotu 3 do každého riadka vypočítaného stĺpca.
= [Column1] + [Column2] Pridá hodnoty v rovnakom riadku položky [Stĺpec1] a [Stĺpec2] a umiestni výsledky do vypočítaného stĺpca toho istého riadka.

Bez ohľadu na to, či je vami vytváraný vzorec jednoduchý alebo zložitý, môžete pri vytváraní vzorca použiť nasledujúce kroky:

  1. Každý vzorec musí začínať znamienkom rovnosti (=).

  2. Môžete buď zadať alebo vybrať názov funkcie, alebo zadať výraz.

  3. Začnite písať niekoľko prvých písmen požadovanej funkcie alebo názvu a funkcia Automatické dokončovanie zobrazí zoznam dostupných funkcií, tabuliek a stĺpcov. Stlačením klávesu TAB pridáte položku zo zoznamu automatického dokončovania do vzorca.

    Môžete tiež kliknúť na tlačidlo Fx , aby sa zobrazil zoznam dostupných funkcií. Ak chcete vybrať funkciu v rozbaľovacom zozname, pomocou klávesov so šípkami zvýraznite položku a kliknutím na tlačidlo OK pridajte funkciu do vzorca.

  4. Zadávajte argumenty do funkcie tak, že ich vyberiete z rozbaľovacieho zoznamu možných tabuliek a stĺpcov alebo zadaním hodnôt.

  5. Skontrolujte chyby syntaxe: skontrolujte, či sú všetky zátvorky zatvorené a stĺpce, tabuľky a hodnoty odkazujú správne.

  6. Stlačením klávesu ENTER prijmite vzorec.

Poznámka

Vo vypočítanom stĺpci sa ihneď po zadaní vzorca a overení vzorca stĺpec vyplní hodnotami. V mierke sa stlačením klávesu ENTER uloží definícia mierky s tabuľkou. Ak je vzorec neplatný, zobrazí sa chyba.

V tomto príklade sa pozrime na vzorec v mierke s názvom Počet dní v aktuálnom štvrťroku:

Days in Current Quarter = COUNTROWS( DATESBETWEEN( 'Date'[Date], STARTOFQUARTER( LASTDATE('Date'[Date])), ENDOFQUARTER('Date'[Date])))

Táto mierka sa používa na vytvorenie pomeru porovnania medzi neúplným obdobím a predchádzajúcim obdobím. Vzorec musí brať do úvahy časť obdobia, ktorá uplynula, a porovnať ho s rovnakým pomerom v predchádzajúcom období. V tomto prípade [Počet dní v aktuálnom štvrťroku k dátumu]/[Počet dní v aktuálnom štvrťroku] udáva podiel, ktorý uplynul v aktuálnom období.

Tento vzorec obsahuje nasledujúce prvky:

Prvok vzorca Description
Days in Current Quarter Názov mierky.
= Vzorec začína znakom rovnosti (=).
COUNTROWS Funkcia COUNTROWS spočíta počet riadkov v tabuľke dátumov
() Ľavá a pravá zátvorka určuje argumenty.
DATESBETWEEN Funkcia DATESBETWEEN vráti dátumy medzi posledným dátumom pre každú hodnotu v stĺpci Date v tabuľke dátumov.
'Date' Určuje tabuľku dátumov. Tabuľky sú v jednoduchých úvodzovkách.
[Date] Určuje stĺpec Dátum v tabuľke dátumov. Stĺpce sú v hranatých zátvorkách.
,
STARTOFQUARTER Funkcia STARTOFQUARTER vráti dátum začiatku štvrťroka.
LASTDATE Funkcia LASTDATE vráti posledný dátum štvrťroka.
'Date' Určuje tabuľku dátumov.
[Date] Určuje stĺpec Dátum v tabuľke dátumov.
,
ENDOFQUARTER Funkcia ENDOFQUARTER
'Date' Určuje tabuľku dátumov.
[Date] Určuje stĺpec Dátum v tabuľke dátumov.

Použitie funkcie Automatické dokončovanie

Funkcia Automatické dokončovanie pomáha zadať platnú syntax vzorca – poskytuje možnosti pre každý prvok vo vzorci.

  • Funkciu Automatického dokončovanie vzorca môžete použiť v strede existujúceho vzorca s vnorenými funkciami. Text bezprostredne pred kurzorom sa použije na zobrazenie hodnôt v rozbaľovacom zozname a celý text po kurzore zostáva nezmenený.

  • Funkcia Automatické dokončovanie nepridáva pravú zátvorku funkcií ani automaticky nespája zátvorky. Musíte sa uistiť, že každá funkcia je syntakticky správna, inak nie je možné vzorec uložiť či použiť.

Používanie viacerých funkcií vo vzorci

Funkcie môžete vnoriť, čo znamená, že výsledky z jednej funkcie použijete ako argument inej funkcie. Vo vypočítaných stĺpcoch môžete vnoriť až do 64 úrovní funkcií. Vnorenie však môže sťažiť vytváranie vzorcov alebo riešenie problémov so vzorcami. Mnohé funkcie sú navrhnuté tak, aby sa používali výlučne ako vnorené funkcie. Tieto funkcie vracajú tabuľku, ktorú nie je možné priamo uložiť ako výsledok. musí byť zadaný ako vstup pre funkciu tabuľky. Napríklad, všetky funkcie SUMX, AVERAGEX a MINX vyžadujú ako prvý argument tabuľku.

Funkcie

Funkcia je pomenovaný vzorec vo výraze. Väčšina funkcií má ako vstup povinné a voliteľné argumenty, známe aj ako parametre. Po spustení funkcie sa vráti hodnota. Jazyk DAX obsahuje funkcie, ktoré môžete použiť na vykonávanie výpočtov s použitím dátumov a časov, vytváranie podmienených hodnôt, prácu s reťazcami, vyhľadávanie na základe vzťahov a schopnosť iterovať na tabuľke s cieľom vykonávať rekurzívne výpočty. Ak poznáte vzorce programu Excel, mnohé z týchto funkcií budú vyzerať veľmi podobne. Vzorce jazyka DAX sa však líšia nasledujúcimi dôležitými spôsobmi:

  • Funkcia DAX vždy odkazuje na úplný stĺpec alebo tabuľku. Ak chcete z tabuľky alebo stĺpca použiť iba konkrétne hodnoty, môžete do vzorca pridať filtre.

  • Ak chcete prispôsobiť výpočty po riadkoch, DAX obsahuje funkcie, ktoré umožňujú použiť aktuálnu hodnotu riadka alebo súvisiacu hodnotu ako druh parametra na vykonávanie výpočtov, ktoré sa líšia kontextom. Informácie o tom, ako fungujú tieto funkcie, nájdete v téme Kontext v tomto článku.

  • DAX obsahuje mnohé funkcie, ktoré namiesto hodnoty vracajú tabuľku. Tabuľka sa nezobrazuje v klientovi na vytváranie zostáv, ale slúži na zadávanie vstupov pre ďalšie funkcie. Môžete napríklad načítať tabuľku a potom spočítať jedinečné hodnoty v nej alebo vypočítať dynamické súčty v filtrovaných tabuľkách alebo stĺpcoch.

  • Medzi funkcie jazyka DAX patria rôzne funkcie časovej inteligencie. Tieto funkcie umožňujú definovať alebo vybrať rozsahy dátumov a vykonávať na ich základe dynamické výpočty. Môžete napríklad porovnať súčty pre paralelné obdobia.

Agregačné funkcie

Agregačné funkcie vypočítavajú (skalárnu) hodnotu, ako je počet, súčet, priemer, minimum alebo maximum pre všetky riadky v stĺpci alebo tabuľke, ako je definované výrazom. Ďalšie informácie nájdete v téme Agregačné funkcie.

Funkcie dátumu a času

Funkcie dátumu a času jazyka DAX sú podobné ako funkcie dátumu a času v programe Microsoft Excel. Funkcie jazyka DAX sú však založené na údajoch typu datetime počnúc 1. marcom 1900. Ďalšie informácie nájdete v téme Funkcie dátumu a času.

Funkcie filtrovania

Funkcie filtrovania v jazyku DAX vracajú konkrétne typy údajov, vyhľadávajú hodnoty v súvisiacich tabuľkách a filtrujú podľa súvisiacich hodnôt. Vyhľadávacie funkcie fungujú pomocou tabuliek a vzťahov, ako je napríklad databáza. Funkcie filtrovania umožňujú manipulovať s údajovými kontextmi a vytvárať tak dynamické výpočty. Ďalšie informácie nájdete v téme Funkcie filtrovania.

Finančné funkcie

Finančné funkcie v jazyku DAX sa používajú vo vzorcoch, ktoré vykonávajú finančné výpočty, ako je súčasná čistá hodnota a miera návratnosti. Tieto funkcie sú podobné finančným funkciám, ktoré sa používajú v programe Microsoft Excel. Ďalšie informácie nájdete v téme Finančné funkcie.

Informačné funkcie

Informačná funkcia skontroluje bunku alebo riadok, ktoré sú poskytnuté ako argument, a povie, či sa hodnota zhoduje s očakávaným typom. Napríklad funkcia ISERROR vráti hodnotu TRUE, ak hodnota, na ktorú odkazujete, obsahuje chybu. Ďalšie informácie nájdete v téme Informačné funkcie.

Logické funkcie

Logické funkcie konajú na základe výrazu s cieľom vrátiť informácie o hodnotách vo výraze. Funkcia TRUE napríklad umožňuje zistiť, či výraz, ktorý vyhodnocujete, vráti hodnotu TRUE. Ďalšie informácie nájdete v téme Logické funkcie.

Matematické a trigonometrické funkcie

Matematické funkcie v jazyku DAX sú veľmi podobné matematickým a trigonometrickým funkciám programu Excel. Existujú určité rozdiely v číselných typoch údajov, ktoré používajú funkcie jazyka DAX. Ďalšie informácie nájdete v téme Matematické a trigonometrické funkcie.

Ďalšie funkcie

Tieto funkcie vykonávajú jedinečné úkony, ktoré nie je možné definovať žiadnou z kategórií, do ktorých patrí väčšina ostatných funkcií. Ďalšie informácie nájdete v téme Ostatné funkcie.

Funkcie vyjadrujúci vzťahy

Funkcie vyjadrujúce vzťahy v jazyku DAX umožňujú vrátiť hodnoty z inej súvisiacej tabuľky, určiť konkrétny vzťah, ktorý sa má použiť vo výraze, a určiť smer krížového filtrovania. Ďalšie informácie nájdete v téme Funkcie vzťahov.

Štatistické funkcie

Štatistické funkcie vypočítavajú hodnoty súvisiace so štatistickými distribúciami a pravdepodobnosťou, ako je napríklad smerodajná odchýlka a počet permutácií. Ďalšie informácie nájdete v téme Štatistické funkcie.

Textové funkcie

Textové funkcie v jazyku DAX sú veľmi podobné ako v programe Excel. Môžete vrátiť časť reťazca, vyhľadávať text v reťazci alebo zreťaziť hodnoty reťazca. Jazyk DAX obsahuje tiež funkcie na ovládanie formátov pre dátumy, časy a čísla. Ďalšie informácie nájdete v téme Textové funkcie.

Funkcie časovej inteligencie

Funkcie časovej inteligencie, ktoré sú k dispozícii v jazyku DAX, umožňujú vytvárať výpočty, ktoré využívajú vstavané znalosti o kalendároch a dátumoch. Pomocou rozsahov času a dátumov v kombinácii s agregáciami alebo výpočtami môžete vytvárať zmysluplné porovnania v porovnateľných časových obdobiach pre predaj, zásoby a podobne. Ďalšie informácie nájdete v téme Funkcie časovej inteligencie (DAX).

Funkcie na prácu s tabuľkami

Tieto funkcie vracajú tabuľku alebo pracujú s existujúcimi tabuľkami. Pomocou funkcie ADDCOLUMNS môžete napríklad pridať vypočítané stĺpce do zadanej tabuľky alebo môžete vrátiť súhrnnú tabuľku v množine skupín pomocou funkcie SUMMARIZECOLUMNS. Ďalšie informácie nájdete v téme Funkcie na prácu s tabuľkami.

Premenné

Pomocou funkcie VAR môžete vytvárať premenné v rámci výrazu. VAR technicky nie je funkcia, je to kľúčové slovo na uloženie výsledku výrazu ako pomenovanej premennej. Táto premenná sa potom môže odovzdať ako argument pre iné výrazy mierok. Napríklad:

VAR
    TotalQty = SUM ( Sales[Quantity] )

Return

    IF (
        TotalQty > 1000,
        TotalQty * 0.95,
        TotalQty * 1.25
        )

V tomto príklade je možné premennú TotalQty odovzdať ako pomenovanú premennú do iných výrazov. Premenné môžu patriť k ľubovoľnému skalárnemu typu údajov vrátane tabuliek. Používanie premenných vo vzorcoch DAX môže byť neuveriteľne výkonné.

Typy údajov

Údaje môžete importovať do modelu z mnohých rôznych zdrojov údajov, ktoré môžu podporovať rôzne typy údajov. Pri importovaní údajov do modelu sa údaje skonvertujú na jeden z typov údajov tabuľkového modelu. Keď sa údaje modelu použijú vo výpočte, údaje sa potom skonvertujú na typ údajov DAX po dobu trvania a výstupu výpočtu. Keď vytvoríte vzorec DAX, výrazy použité vo vzorci budú automaticky určovať vrátený typ údajov hodnoty.

Jazyk DAX podporuje nasledujúce typy údajov:

Typ údajov v modeli Typ údajov v jazyku DAX Description
Celé číslo 64-bitová (8-bajtová) celočíselná hodnota 1, 2 Čísla, ktoré nemajú žiadne desatinné miesta. Celé čísla môžu byť kladné alebo záporné čísla, ale musia byť celé čísla medzi -9 223 372 036 854 775 808 (-2^63) a 9 223 372 036 854 775 807 (2^63-1).
Desatinné číslo 64-bitové (osem-bajtové) reálne číslo 1, 2 Reálne čísla sú čísla, ktoré môžu mať desatinné miesta. Reálne čísla pokrývajú široký rozsah hodnôt:

Záporné hodnoty od -1,79E +308 do -2,23E -308

Nula

Kladné hodnoty od 2,23E -308 do 1,79E + 308

Počet významných číslic je však obmedzený na 17 desatinných miest.
Boolean Boolean Hodnota True alebo False.
Text String Reťazec údajov znakov Unicode. Môže ísť o reťazce, čísla alebo dátumy zobrazené v textovom formáte.
Date Dátum a čas Dátumy a časy v akceptovanom zobrazení dátumu a času.

Platné dátumy sú všetky dátumy po 1. marci 1900.
Mena Mena Typ údajov Mena povoľuje hodnoty v rozsahu od -922 337 203 685 477,5808 do 922 337 203 685 477,5807 so štyrmi desatinnými číslicami s pevnou presnosťou.
Neaplikovateľné Blank Prázdna hodnota je typ údajov v DAX, ktorý predstavuje a nahrádza hodnoty null SQL. Prázdnu hodnotu môžete vytvoriť pomocou funkcie BLANK a prázdne hodnoty môžete testovať pomocou logickej funkcie ISBLANK.

Tabuľkové dátové modely zahŕňajú ako vstup alebo výstup pre mnohé funkcie jazyka DAX aj typ údajov Tabuľka . Napríklad funkcia FILTER použije ako vstup tabuľku a výstupom je ďalšia tabuľka, ktorá obsahuje iba riadky spĺňajúce podmienky filtra. Kombináciou funkcií tabuľky s agregačnými funkciami môžete vykonávať komplexné výpočty na dynamicky definovaných množinách údajov.

Hoci sa typy údajov zvyčajne nastavujú automaticky, je dôležité porozumieť typom údajov a spôsobu ich použitia, najmä vo vzorcoch DAX. Chyby vo vzorcoch alebo neočakávané výsledky sú často spôsobené napríklad použitím konkrétneho operátora, ktorý nemožno použiť s typom údajov zadaným v argumente. Napríklad vzorec = 1 & 2vráti výsledok reťazca 12. Vzorec = "1" + "2"však vráti celočíselný výsledok 3.

Kontexte

Kontext je dôležitý koncept, ktorý je potrebné pochopiť pri vytváraní vzorcov DAX. Kontext je to, čo umožňuje vykonávať dynamickú analýzu, pretože výsledky vzorca sa menia tak, aby zodpovedali aktuálnemu výberu riadkov alebo buniek, ako aj prípadným súvisiacim údajom. Porozumenie kontextu a použitie kontextu sú rozhodujúce prvky na vytváranie vysoko výkonných dynamických analýz a na riešenie problémov vo vzorcoch.

Vzorce v tabuľkových modeloch možno vyhodnotiť v inom kontexte v závislosti od iných prvkov návrhu:

  • Filtre použité v kontingenčnej tabuľke alebo zostave
  • Filtre definované vo vzorci
  • Vzťahy zadané pomocou špeciálnych funkcií vo vzorci

Existujú rôzne typy kontextu: kontext riadka, kontext dotazu a kontext filtra.

Kontext riadka

Kontext riadka si môžeme predstaviť ako "aktuálny riadok". Ak vytvoríte vzorec vo vypočítanom stĺpci, kontext riadka pre tento vzorec obsahuje hodnoty zo všetkých stĺpcov v aktuálnom riadku. Ak tabuľka súvisí s inou tabuľkou, obsah obsahuje aj všetky hodnoty z druhej tabuľky, ktoré súvisia s aktuálnym riadkom.

Predpokladajme napríklad, že vytvoríte vypočítaný stĺpec , = [Freight] + [Tax]ktorý sčítava hodnoty z dvoch stĺpcov, Doprava a Dane, z rovnakej tabuľky. Tento vzorec automaticky načíta iba hodnoty z aktuálneho riadka v zadaných stĺpcoch.

Kontext riadka tiež sleduje všetky vzťahy, ktoré boli definované medzi tabuľkami, vrátane vzťahov definovaných v rámci vypočítaného stĺpca pomocou vzorcov DAX, s cieľom určiť, ktoré riadky v súvisiacich tabuľkách sú priradené k aktuálnemu riadku.

Nasledujúci vzorec napríklad používa funkciu RELATED na načítanie hodnoty dane zo súvisiacej tabuľky na základe oblasti, do ktorej bola objednávka odoslaná. Hodnota dane sa určuje pomocou hodnoty pre oblasť v aktuálnej tabuľke, pričom sa vyhľadá oblasť v súvisiacej tabuľke, potom sa zo súvisiacej tabuľky získa sadzba dane pre danú oblasť.

= [Freight] + RELATED('Region'[TaxRate])  

Tento vzorec získa sadzbu dane pre aktuálnu oblasť z tabuľky Region a pridá ju do hodnoty stĺpca Doprava. Vo vzorcoch DAX nemusíte poznať ani zadávať konkrétny vzťah, ktorý spája tabuľky.

Kontext viacerých riadkov

Jazyk DAX obsahuje funkcie, ktoré iterujú výpočty v tabuľke. Tieto funkcie môžu mať viacero aktuálnych riadkov, pričom každý z nich má vlastný kontext riadka. Tieto funkcie v podstate umožňujú vytvárať vzorce, ktoré vykonávajú operácie rekurzívne na vnútornej a vonkajšej slučke.

Predpokladajme napríklad, že váš model obsahuje tabuľku Products (Produkty) a Sales (Predaj). Používatelia môžu prejsť celú tabuľku predaja, ktorá je plná transakcií týkajúcich viacerých produktov, a vyhľadať najväčšie objednané množstvo pre každý produkt v ľubovoľnej jednej transakcii.

Pomocou jazyka DAX môžete vytvoriť jeden vzorec, ktorý vráti správnu hodnotu, a výsledky sa automaticky aktualizujú vždy, keď používateľ pridá do tabuliek údaje.

= MAXX(FILTER(Sales,[ProdKey] = EARLIER([ProdKey])),Sales[OrderQty])  

Podrobný príklad tohto vzorca nájdete v téme EARLIER.

Keď to zhrnieme, funkcia EARLIER uloží kontext riadka z operácie, ktorá predchádzala aktuálnu operáciu. Po celú dobu funkcia ukladá do pamäte dve množiny kontextu: jedna množina kontextu predstavuje aktuálny riadok pre vnútornú slučku vzorca a ďalšia množina kontextu predstavuje aktuálny riadok pre vonkajšiu slučku vzorca. Jazyk DAX automaticky podáva hodnoty medzi týmito dvomi slučkami, čo umožňuje vytvárať komplexné agregáty.

Kontext dotazu

Kontext dotazu odkazuje na podmnožinu údajov, ktoré sa implicitne načítajú pre vzorec. Keď používateľ napríklad umiestni mierku alebo pole do zostavy, nástroj preskúma hlavičky riadkov a stĺpcov, rýchlych filtrov a filtrov zostáv, aby určil kontext. Potom sa spustia potrebné dotazy na modelových údajoch, aby sa načítala správna podmnožina údajov, vykoná sa výpočty definované vzorcom a potom sa vyplnia hodnoty v zostave.

Vzhľadom na to, že kontext sa mení v závislosti od umiestnenia vzorca, môžu sa zmeniť aj výsledky vzorca. Predpokladajme napríklad, že vytvoríte vzorec, ktorý sčíta hodnoty v stĺpci Zisk tabuľky Predaj: = SUM('Sales'[Profit]). Ak použijete tento vzorec vo vypočítanom stĺpci v tabuľke Predaj , výsledky pre vzorec budú rovnaké pre celú tabuľku, pretože kontext dotazu pre vzorec je vždy celá množina údajov tabuľky Sales . Výsledky budú mať zisk pre všetky oblasti, všetky produkty, všetky roky atď.

Používatelia však zvyčajne nechcú vidieť rovnaký výsledok znova a znova, ale chcú dosiahnuť zisk pre konkrétny rok, konkrétnu krajinu, konkrétny produkt alebo niektorú z týchto kombinácií a potom získať celkový súčet.

V zostave sa kontext zmení filtrovaním, pridaním alebo odstránením polí a použitím rýchlych filtrov. Pri každej zmene sa vyhodnocuje mierka v kontexte dotazu. Preto sa ten istý vzorec použitý v mierke vyhodnotí v inom kontexte dotazu pre každú bunku.

Kontext filtra

Kontext filtra je množina hodnôt povolených v každom stĺpci alebo v hodnotách načítaných zo súvisiacej tabuľky. Filtre možno použiť na stĺpec v návrhárovi alebo vo vrstve prezentácie (zostavy a kontingenčné tabuľky). Filtre možno definovať explicitne aj pomocou výrazov filtra vo vzorci.

Kontext filtra sa pridá, keď zadáte obmedzenia filtra v množine hodnôt povolených v stĺpci alebo tabuľke pomocou argumentov vo vzorci. Kontext filtra sa vzťahuje na iné kontexty, ako je napríklad kontext riadka alebo kontext dotazu.

V tabuľkových modeloch existuje mnoho spôsobov, ako vytvoriť kontext filtra. V kontexte klientov, ktorí môžu využívať model, ako sú zostavy služby Power BI, môžu používatelia vytvárať filtre za behu pridaním rýchlych filtrov alebo filtrov zostáv v hlavičkách riadkov a stĺpcov. Výrazy filtra môžete tiež zadať priamo vo vzorci, zadať tak súvisiace hodnoty, filtrovať tabuľky, ktoré sa používajú ako vstupy, alebo dynamicky získavať kontext pre hodnoty, ktoré sa používajú vo výpočtoch. Môžete tiež úplne vymazať alebo selektívne vymazať filtre pre konkrétne stĺpce. Je to veľmi užitočné pri vytváraní vzorcov, ktoré vypočítavajú celkové súčty.

Ďalšie informácie o vytváraní filtrov vo vzorcoch nájdete v téme Funkcia FILTER (DAX).
Príklad toho, ako možno vymazať filtre na vytvorenie celkových súčtov, nájdete v téme Funkcia ALL (DAX).

Príklady selektívneho vymazania a použitia filtrov vo vzorcoch nájdete v téme ALLEXCEPT.

Určovanie kontextu vo vzorcoch

Keď vytvoríte vzorec DAX, v tomto vzorci sa najskôr otestuje platná syntax a potom sa otestuje, či sa názvy stĺpcov a tabuliek vo vzorci nachádzajú v aktuálnom kontexte. Ak nie je možné nájsť niektorý stĺpec alebo tabuľku, ktoré sú zadané vo vzorci, vráti sa chyba.

Kontext počas overovania (a operácií prepočítania) sa určuje tak, ako je popísané v predchádzajúcich častiach, pomocou dostupných tabuliek v modeli, ľubovoľných vzťahov medzi tabuľkami a všetkých použitých filtrov.

Ak ste napríklad práve importovali niektoré údaje do novej tabuľky a tieto sa nevzťahujú na žiadne iné tabuľky (a nepoužili ste žiadne filtre), aktuálny kontext je celá množina stĺpcov v tabuľke. Ak je tabuľka prepojená podľa vzťahov s inými tabuľkami, aktuálny kontext zahŕňa súvisiace tabuľky. Ak pridáte stĺpec z tabuľky do zostavy, ktorá má rýchle filtre a prípadne niektoré filtre zostavy, kontext pre vzorec je podmnožinou údajov v každej bunke zostavy.

Kontext je výkonný koncept, ktorý môže riešenie problémov so vzorcami tiež ťažiť. Odporúčame začať s jednoduchými vzorcami a vzťahmi, aby ste zistili, ako kontext funguje. V nasledujúcej časti nájdete niekoľko príkladov, ako vzorce používajú rôzne typy kontextu na dynamické vrátenie výsledkov.

Operátory

Jazyk DAX používa štyri rôzne typy výpočtových operátorov vo vzorcoch:

  • Operátory porovnávania na porovnávanie hodnôt a vrátenie logickej hodnoty TRUE\FALSE.
  • Aritmetické operátory na vykonávanie aritmetických výpočtov, ktoré vracajú číselné hodnoty.
  • Operátor spájania reťazcov na spojenie dvoch alebo viacerých textových reťazcov.
  • Logické operátory, ktoré kombinujú dva alebo viac výrazov a vrátia jeden výsledok.

Podrobné informácie o operátoroch používaných vo vzorcoch DAX nájdete v téme Operátory jazyka DAX.

Práca s tabuľkami a stĺpcami

Tabuľky v tabuľkových dátových modeloch vyzerajú ako tabuľky programu Excel, ale líšia sa v tom, ako pracujú s údajmi a so vzorcami:

  • Vzorce fungujú iba s tabuľkami a stĺpcami, nie s jednotlivými bunkami, odkazmi na rozsah alebo poľami.
  • Vzorce môžu pomocou vzťahov získavať hodnoty zo súvisiacich tabuliek. Hodnoty, ktoré sa načítajú, sú vždy súvisiace s aktuálnou hodnotou riadka.
  • Nemôžete mať nepravidelné alebo "rozhádané" údaje, ako napríklad v hárku programu Excel. Každý riadok v tabuľke musí obsahovať rovnaký počet stĺpcov. V niektorých stĺpcoch však môžete mať prázdne hodnoty. Tabuľky údajov programu Excel a tabuľky údajov tabuľkového modelu nie sú vzájomne zameniteľné.
  • Keďže typ údajov je nastavený pre každý stĺpec, každá hodnota v tomto stĺpci musí byť rovnakého typu.

Odkazovanie na tabuľky a stĺpce vo vzorcoch

Pomocou názvu môžete odkazovať na ľubovoľnú tabuľku a stĺpec. Nasledujúci vzorec napríklad ilustruje, ako odkazovať na stĺpce z dvoch tabuliek pomocou úplného kvalifikovaného názvu:


= SUM('New Sales'[Amount]) + SUM('Past Sales'[Amount])  

Keď sa vzorec vyhodnotí, návrhár modelu najskôr skontroluje všeobecnú syntax, potom skontroluje názvy stĺpcov a tabuliek, ktoré zadáte v súvislosti s možnými stĺpcami a tabuľkami v aktuálnom kontexte. Ak je názov nejednoznačný alebo ak nie je možné nájsť stĺpec alebo tabuľku, vo vzorci sa zobrazí chyba (reťazec #ERROR namiesto údajovej hodnoty v bunkách, v ktorých sa chyba vyskytne). Ďalšie informácie o požiadavkách na označovanie tabuliek, stĺpcov a ďalších objektov nájdete v téme Požiadavky na označovanie v syntaxi jazyka DAX.

Vzťahy tabuliek

Vytvorením vzťahov medzi tabuľkami získate možnosť použiť vo výpočtoch v iných tabuľkách súvisiace hodnoty. Vypočítaný stĺpec môžete napríklad použiť na určenie všetkých záznamov o preprave súvisiacich s aktuálnym predajcom a následne vypočítať náklady na dopravu pre každého predajcu. V mnohých prípadoch však nemusí byť vzťah potrebný. Pomocou funkcie LOOKUPVALUE vo vzorci môžete vrátiť hodnotu v result_columnName pre riadok, ktorý spĺňa kritériá zadané v argumentoch search_column a search_value.

Mnohé funkcie jazyka DAX vyžadujú, aby existoval vzťah medzi tabuľkami alebo medzi viacerými tabuľkami, aby sa našli stĺpce, na ktoré ste odkazovali, a vrátili výsledky, ktoré majú zmysel. Ďalšie funkcie sa pokúsia rozpoznať vzťah. Najlepšie výsledky by ste však mali vždy, ak je to možné, vytvoriť vzťah. Tabuľkové dátové modely podporujú viacnásobné vzťahy medzi tabuľkami. Aby sa predišlo zmätku alebo nesprávnym výsledkom, ako aktívny vzťah je určený iba jeden vzťah, ale aktívny vzťah môžete zmeniť tak, aby pri výpočtoch prechádzal rôznymi pripojeniami v údajoch. Funkciu USERELATIONSHIP možno použiť na určenie jedného alebo viacerých vzťahov, ktoré sa majú použiť pri konkrétnom výpočte.

Pri používaní vzťahov je dôležité dodržiavať tieto pravidlá návrhu vzorca:

  • Keď sú tabuľky prepojené pomocou vzťahu, musíte zabezpečiť, aby dva stĺpce použité ako kľúče mali zhodné hodnoty. Referenčná integrita sa nevynucuje, preto je možné mať v kľúčovom stĺpci nezhodné hodnoty a napriek tomu vytvoriť vzťah. V takom prípade si musíte uvedomiť, že prázdne hodnoty alebo nezhodné hodnoty môžu ovplyvniť výsledky vzorcov.

  • Keď prepojíte tabuľky vo vašom modeli pomocou vzťahov, zväčšíte rozsah alebo kontext, v ktorom sa vaše vzorce vyhodnocujú. Zmeny v kontexte vyplývajúce z pridávania nových tabuliek, nových vzťahov alebo zo zmien v aktívnom vzťahu môžu spôsobiť, že výsledky sa zmenia neočakávaným spôsobom. Ďalšie informácie nájdete v téme Kontext v tomto článku.

Spracovanie a obnovenie

Spracovanie a prepočítanie sú dve samostatné, ale súvisiace operácie. Pri navrhovaní modelu, ktorý obsahuje zložité vzorce, veľké množstvo údajov alebo údaje získané z externých zdrojov údajov, musíte tieto koncepty dôkladne pochopiť.

Spracovanie (obnovenie) aktualizuje údaje v modeli novými údajmi z externého zdroja údajov.

Prepočítanie je proces aktualizácie výsledkov vzorcov tak, aby odrážali všetky zmeny v samotných vzorcoch a odrážali zmeny v základných údajoch. Prepočítanie môže ovplyvniť výkon nasledujúcimi spôsobmi:

  • Hodnoty vo vypočítanom stĺpci sa vypočítajú a uložia v modeli. Ak chcete aktualizovať hodnoty vo vypočítanom stĺpci, musíte spracovať model pomocou niektorého z troch príkazov na spracovanie – Spracovať celé, Spracovať údaje alebo Spracovať opätovný výpočet. Výsledok vzorca sa musí opätovne vypočítať pre celý stĺpec vždy, keď vzorec zmeníte.

  • Hodnoty vypočítané podľa mierok sa dynamicky vyhodnotia vždy, keď používateľ pridá mierku do kontingenčnej tabuľky alebo otvorí zostavu. keď používateľ upraví kontext, hodnoty vrátené mierkou sa zmenia. Výsledky mierky vždy odrážajú to najnovšie vo vyrovnávacej pamäti v pamäti.

Spracovanie a prepočítanie nemá žiadny vplyv na vzorce zabezpečenia na úrovni riadkov, pokiaľ výsledok opätovného výpočtu nevráti inú hodnotu, čo znamená, že riadok sa zmení na dotazovateľný alebo nie dotazovateľný členmi roly.

Aktualizácie

Jazyk DAX sa neustále z vylepšuje. Nové a aktualizované funkcie sa vydávajú zvyčajne raz za mesiac s ďalšou dostupnou aktualizáciou. Najprv sú aktualizované služby a následne aj nainštalované aplikácie, ako Power BI Desktop, Excel, SQL Server Management Studio (SSMS) a projektové rozšírenie Analysis Services pre Visual Studio (SSDT). Služba SQL Server Analysis Services sa aktualizuje nasledujúcou kumulatívnou aktualizáciou. Nové funkcie sú najprv ohlásené a popísané v odkaze funkcie DAX zároveň s aktualizáciami Power BI Desktop.

V starších verziách programu SQL Server Analysis Services a Excelu nie sú podporované všetky funkcie.

Riešenie problémov

Ak sa pri definovaní vzorca zobrazí chyba, vzorec môže obsahovať buď syntaktickú chybu, sémantickú chybu alebo chybu pri výpočte.

Syntaktické chyby sa riešia najľahšie. Zvyčajne zahŕňajú chýbajúcu zátvorku alebo čiarku.

Druhý typ chyby vznikne, keď je syntax správna, ale odkazovaná hodnota alebo stĺpec nedáva v kontexte vzorca zmysel. Tieto sémantické chyby a chyby pri výpočtoch môžu byť spôsobené niektorou z nasledujúcich problémov:

  • Vzorec odkazuje na neexistujúci stĺpec, tabuľku alebo funkciu.
  • Zdá sa, že vzorec je správny, ale keď údajový nástroj načíta údaje, zistí nesúlad typu a vyvolá chybu.
  • Vzorec odovzdá funkcii nesprávny počet alebo typ argumentov.
  • Vzorec odkazuje na iný stĺpec, ktorý obsahuje chybu, a preto sú jeho hodnoty neplatné.
  • Vzorec odkazuje na stĺpec, ktorý nebol spracovaný, čo znamená, že má metaúdaje, ale žiadne skutočné údaje, ktoré by sa použili na výpočty.

V prvých štyroch prípadoch príznak jazyk DAX označí celý stĺpec, ktorý obsahuje neplatný vzorec. V poslednom prípade jazyk DAX vytieňa stĺpec ako označenie, že stĺpec je v nespracovanom stave.

Aplikácie a nástroje

Power BI Desktop

Power BI Desktop

Power BI Desktop je bezplatná aplikácia na modelovanie údajov a vytváranie zostáv. Návrhár modelu obsahuje editor DAX na vytváranie vzorcov výpočtov v jazyku DAX.

Power Pivot v Exceli

Power Pivot in Excel

Návrhár modelov Power Pivot v Exceli obsahuje editor DAX na vytváranie vzorcov výpočtov v jazyku DAX.

Visual Studio

Visual Studio

Visual Studio s rozšírením Analysis Services Projects (VSIX) sa používa na vytváranie modelových projektov analysis services. Návrhár tabuľkového modelu, ktorý je nainštalovaný s rozšírením projektov, obsahuje editor DAX.

SQL Server Management Studio

SQL Server Management Studio

SQL Server Management Studio (SSMS) je základný nástroj na prácu so službou Analysis Services. SSMS obsahuje editor dotazov jazyka DAX na dotazovanie na tabuľkových aj multidimenzionálnych modeloch.

DAX Studio

DAX Studio icon

DAX Studio je klientsky nástroj typu open-source na vytváranie a spúšťanie dotazov jazyka DAX na modeloch služby Analysis Services, aplikácie Power BI Desktop a doplnku Power Pivot v Exceli.

Tabuľkový editor

Tabular Editor icon

Tabular Editor je nástroj typu open-source, ktorý poskytuje intuitívne a hierarchické zobrazenie každého objektu v metaúdajoch tabuľkového modelu. Tabular Editor obsahuje Editor DAX so zvýraznením syntaxe, ktorý poskytuje jednoduchý spôsob na úpravu mierok, vypočítaných stĺpcov a výrazov vypočítanej tabuľky.

Študijné materiály

Pri učení jazyka DAX je najlepšie používať aplikáciu, pomocou ktorú budete vytvárať dátové modely. Analysis Services, Power BI Desktop a Power Pivot v Exceli – pre všetky sú k dispozícii články a kurzy, ktoré obsahujú lekcie vytvárania mierok, vypočítaných stĺpcov a filtrov riadkov pomocou jazyka DAX. Tu je niekoľko ďalších zdrojov:

Videá

Študijný program Používanie jazyka DAX v aplikácii Power BI Desktop .

Definitívny sprievodca jazykom DAX , autori Alberto Ferrari a Marco Russo (Microsoft Press). Táto rozsiahla príručka už vo svojom druhom vydaní poskytuje základy pre inovatívne vysoko výkonné techniky pre začínajúcich modelárov údajov a profesionálov BI.

The Definitive Guide to DAX book image

Komunita

Dax má pulzujúcu komunitu, ktorá je vždy ochotná podeliť sa o svoje odborné znalosti. Microsoft Komunita Power BI má špeciálne diskusné fórum len pre príkazy DAX, príkazy DAX a Tipy.