Premenné v jazyku DAX

PowerPivot už vo svojej tretej verzii pridal podporu pre premenné v jazyku DAX. Tie prinášajú množstvo zjednodušení do výpočtov, a zbavujú Vás nutnosti vytvárať zbytočne veľa jednorázových merítok či opakovania častí vzorcov. A ak ste už v DAXe napísali niekoľko stoviek vzorcov, tak sa Vám premenné v jazyku DAX budú náramne hodiť 🙂

Premenné v jazyku DAX fungujú rovnako ako premenné v programovacích jazykoch. Je to miesto v pamäti, ktoré si pomenujeme vlastným menom, priradíme doňho hodnotu, a následne ho môžeme hocikoľkokrát použiť vo vzorci. Výhody takéhoto prístupu oproti vytváraniu merítok sú nasledovné:

  1. netreba vytvárať zbytočne merítko, ak jeho zmyslom bolo iba jednorazovo si zjednodušiť výpočet
  2. nie sú zobrazené pre užívateľov, a preto ani nezapratávajú zbytočne ponuku
  3. dá sa nimi presne regulovať postupnosť výpočtu pri zložitých výpočtoch, čo pri merítkach nejde
  4. vypočítajú sa ešte predtým, ako sa spustí výpočet pre merítko, kde sú použité
  5. majú vysoký potenciál urýchliť počítanie vzorcov
  6. zjednodušujú komplikované vzorce
  7. dajú sa nimi obchádzať niektoré chyby v DAXe

A nevýhody sú nasledovné:

  1. dajú sa použiť iba vo vzorci pre dané merítko, kde sú zadefinované (viď príklad nižšie)
  2. fungujú iba of PowerPivotu v3, čiže od Excelu 2016, SSAS 2016 alebo v aktuálnom Power BI

A ako sa vôbec používajú?

Základná syntax je takáto (nadýchnite sa, bude sa treba zamyslieť):

Merítko :=

VAR premenná1 = vzorec1

VAR premenná2 = vzorec2

…… VAR premennáN = vzorecN

RETURN

vzorec_pre_výpočet_merítka

Ako ste si asi všimli, premenné sa používajú v rámci vzorca pre výpočet merítka (alebo aj vypočítaného stĺpca), za pôvodným operátorom “:=” resp “=”, a zároveň pred pôvodným vzorcom. Na prvom riadku vzorca zadáte VAR, na druhom riadku zadáte „premenná=vzorec“, kde premenná je názov premennej a vzorec je vzorec, ktorého hodnota sa uloží do premennej. Po zadefinovaní všetkých premenných musí byť uvedené RETURN, a za ním samotný vzorec pre dané merítko/stĺpec, ktorý používa tieto premenné. Premenné nie je nutné použiť vo vzorci, môžete ich tam mať “len tak” – zmysel to potom síce nemá, ale poniektorým komplikovačom a vykazovačom práce to príde ako vhodný nástroj 🙂

Takže teraz príklad. Keď ste predtým chceli robiť napríklad dynamickú segmentáciu produktov do kategórií podľa ich obratu, spravili ste takýto vypočítaný stĺpec:

=CALCULATE(VALUES(Kategorie[Kategoria]); FILTER(Kategorie; EARLIER([Obrat za produkt]) >= Kategorie[Od] && EARLIER([Obrat za produkt]) <= Kategorie[Do]))

Pomocou premenných to ale ide zjednodušiť takto:

Na poslednom riadku vzorca je uvedený samotný vzorec pre daný vypočítaný stĺpec, ktorý 2x používa hodnotu premennej Obrat. Všimnite si aj vyfarbovanie v rámci vzorca, ktoré pomáha s jeho ľahším čítaním a prípadným hľadaním chýb vo vzorci – premenné sú vyfarbené zelenou farbou. A už len kvôli tej zelenej farbe si to musíte vyskúšať, lebo inak nebudete vedieť zaspať 🙂

Každopádne, už takmer 2 roky tam máme túto funkcionalitu (okrem iných noviniek), a najmä pri pokročilej analytike Vám premenné v jazyku DAX neskutočne pomôžu, či už v jednoduchosti, alebo čitateľnosti vzorcov. A takisto sa nimi dajú relatívne jednoducho vyriešiť viaceré chyby v DAXe. Čo oceníte po dlhej prebdenej noci, keď ste si istí, že ten vzorec máte správne napísaný, ale stále to nechce fungovať správne 🙂 Niekedy si myslím, že to tam v Microsofte dali primárne na tento účel, ale ktovie. Tak či tak sa im ale podarilo dať do DAXu veľmi užitočnú funkcionalitu, a dúfam, že ju budete používať aj Vy 🙂 A ak máte s premennými podobné, alebo nebodaj opačné skúsenosti, podeľte sa s nimi do komentárov pod týmto článkom.