Nová syntax funkcie ALL v jazyku DAX

Pred pár dňami pridal Microsoft novú syntax funkcie ALL, ktorá umožňuje v kontexte výpočtu zrušiť všetky filtre naraz. A najmä pri komplikovanejších dátových modeloch príde vhod. Preto sa teraz na ňu pozrieme.

Nasledovné informácie platia v čase písania tohto článku zatiaľ iba v Power BI a Azure Analysis Services. A pravdepodobne v blízkej dobe aj pre SSAS Tabular 2019. Podpora v ostatných verziách PowerPivotu je zatiaľ otázna.

A prečo je potrebá tá nová syntax funkcie ALL?

Keď ste “po starom” chceli zrušiť všetky filtre v kontexte výpočtu, tak ste museli použiť funkciu ALL v CALCULATE, pričom bolo potrebné použiť ju v tejto variante:

ALL(tabuľka)

…kde parameter “tabuľka” musel byť názov centrálnej/faktovej tabuľky z dátového modelu. Čiže ak si zoberieme náš vzorový súbor PowerPivotu, resp. Power BI, a preberieme príklad z jedného staršieho článku o antifiltroch, kde sme chceli vypočítať percento Obratu (merítko Obrat v tabuľke Objednávky) z celkového obratu, tak sme celkový obrat vypočítali takto:

Celkový obrat := CALCULATE([Obrat]; ALL(‘Objednávky’))

To samozrejme funguje doteraz úplne bez problémov. Problém však bol vtedy, keď ste mali v dátovom modeli viacero centrálnych/faktových tabuliek. Vtedy ste do funkcie CALCULATE museli zadať ALL toľkokrát, koľko ste mali tých centrálnych/faktových tabuliek v dátovom modeli. Pri malých modeloch to nevadilo, ale pri väčších modeloch to už bol problém. Pretože niektoré z tých stoviek vzorcov, ktoré ste tam mali, zrazu prestali fungovať. A pri pridávaní ďalších centrálnych/faktových tabuliek bolo potrebné myslieť na to, že treba preveriť všetky vzorce s funkciou ALL, prípadne všetkými funkciami čo začínajú na ALL***, a prípadne ich upraviť. A pretestovať, atď. atď..

Tomu je teraz našťastie koniec. A ak chcete odteraz zrušiť všetky filtre v kontexte výpočtu, aby ste vypočítali daný ukazovateľ na úrovni grand totalu / celkového súčtu, tak po novom stačí použiť túto novú syntax jazyka ALL s prázdnymi zátvorkami:

ALL()

Čiže hore uvedené merítko vieme po novom napísať takto:

Celkový obrat := CALCULATE([Obrat]; ALL())

Výhoda okrem skráteného zápisu je najmä v tom, že po pridaní ďalších tabuliek do dátového modelu nemusíte myslieť na to, že treba do všetkých takýchto CALCULATE-ov pridať ďalšiu funkciu ALL. Jednoducho to raz napíšete, a je to vybavené. A najmä sa k tomu už nemusíte nikdy ďalej vracať.

Takže takáto je nová syntax funkcie ALL v jazyku DAX, a jej výhody. Oceníte to samozrejme až pri väčších a komplikovanejších dátových modeloch. A ušetrený čas môžete venovať príjemnejším veciam 🙂