Včera som si úplnou náhodou všimol u klienta na SSAS Tabulare 2019 niečo, čo takmer naisto znamená, že sa chystá podpora vlastných funkcií do jazyka DAX v blízkej budúcnosti do SSAS Tabularu a Power BI. A tým niečím je indikácia DAX extension functions v sledovaní aktivity SSAS Tabularu cez Extended Events. Keď som po tom pátral viac, tak som v Power BI našiel aj prvú lastovičku, ktorá túto funkcionalitu využíva – zatiaľ nedokumentovanú funkciu TOPNPERLEVEL. Takže to vyzerá, že máme konečne dlho očakávanú funkcionalitu na spadnutie.
Možnosť vlastných funkcií v jazyku DAX v ňom už dlhodobo chýbala ako soľ. Snáď každý jeden analytický nástroj má túto možnosť, dokonca aj obyčajný Excel, a to hneď v niekoľkých variantách. V jazyku DAX však táto možnosť chýbala, a buď ste museli kvôli tomu použiť MDX a iný neoficiálny hack pre vlastné funkcie v SSAS Tabulare, alebo vymyslieť rôzne náhradné riešenia, ako napr. v tomto článku.
Teraz už konečne vyzerá, že je tomu koniec, a po 10 rokoch sa niekomu podarilo pretlačiť, že príde podpora vlastných funkcií aj v DAX-e. Ktorá bude pravdepodobne nazvaná „DAX Extension Functions“ – čiže rozširujúce funkcie jazyka DAX, resp. podpora funkcií v jazyku DAX cez rozšírenia. Takto je to už dlhší čas spravené napr. v SQL Serveri, kde je pridaná podpora pre Python, R skript, Javu a pod.. Prípadne aj v Exceli, kde je tiež podpora pre vlastné funkcie v Javascripte či R skripte. Pretože keď Microsoft pomenuje niečo „extension“ a vzťahuje sa to na nejaký jazyk, tak doteraz vždy išlo o rozšírenie daného jazyka cez externé rozhrania alebo moduly. Takže „DAX Extension Functions“ by mohli byť nové funkcie, ktoré sa v DAX-e objavia po nainštalovaní/rozbehaní nejakých vlastných rozšírení. Lebo tak to zvyčajne funguje v inom softvéri od MS.
Kde sa skrýva podpora vlastných funkcií
Prvá indikácia, že sa chystajú takéto rozšírenia, sa dá nájsť po pripojení k SSAS Tabularu 2019 cez SQL Server Management Studio, pri konfigurácii novej session pre Extended Events. Extended Events je rozhranie, ktoré sa používa v SSAS Tabulare na odchytávanie interných udalostí, ktoré sa dejú „pod kapotou“. Iste, máme aj DAX Studio či SQL Server Profiler, ale v Extended Events toho bolo vždy o trochu viac. Ale najmä to je oveľa náročnejšie na použitie.
Keď vytvoríme novú session pre Extended Events v SSAS Tabulare 2019, tak v konfiguračnom okne pre odchytávané udalosti nájdeme tieto nové udalosti:
Ide o udalosti s týmito názvami:
- DAXExtensionExecutionBegin
- DAXExtensionExecutionEnd
- DAXExtensionTraceError
- DAXExtensionTraceInfo
- DAXExtensionTraceVerbose
Keď si niektoré z nich rozkliknete, tak v okne s popisom udalosti a popisom jej polí nájdete zaujímavé informácie. Napr. hneď pri prvej udalosti DAXExtensionExecutionBegin nájdete toto:
Je to udalosť, ktorá sa vyskytne na začiatku vykonávania „DAX extension function“ – čiže funkcie z nejakého rozšírenia. Plus v zozname vlastností na obrázku vpravo dole uvidíte pre vlastnosť „FunctionName“ napísané „Name of the DAX extension function being executed“. Čiže názov danej funkcie, ktorá sa vykonáva.
Pri udalosti DAXExtensionTraceError nájdete tiež celkom zaujímavý popis udalosti:
A z tohto popisu už priamo vyplýva, že sa bude jednať o niečo externé voči DAX-u. Pretože tento popisok hovorí o tom, že táto udalosť sa sleduje priamo autormi daného rozšírenia. Čo už takmer na betón potvrdzuje novú fičúru. Jedine že by nás inženýři z MS prekvapili ešte niečím ďalším.
Prvá lastovička v Power BI Desktope
Keď som začal pátrať po internete po tejto novej funkcionalite, tak som zistil, že táto funkcionalita je už použitá v Power BI Desktope od novembrového vydania. Samozrejme – nedokumentovane, ako kopec ďalších, ešte nedokončených vecí, ktoré sa v Power BI objavujú „na tajnáša“ už od začiatku. A tou lastovičkou je nedokumentovaná funkcia TOPNPERLEVEL, ktorá sa spomína iba v neoficiálnej dokumentácii DAX Guide od talianskeho dua. V nej sa spomína, že ide o nedokumentovanú rozširujúcu funkciu pre Power BI. A na inej stránke je uvedené, že ju využíva ešte nedokončený vizuál dekompozičného stromu v Power BI Desktope, ktorý je tam v režime preview od minulého mesiaca.
Tak som teda otvoril najnovší Power BI Desktop, zapol preview verziu dekompozičného stromu, a skúsil začať písať vzorec skúšobného merítka, do ktorého som zadal funkciu TOPNPERLEVEL a dvoma prvými parametrami:
Ako vidíte, tak editor vzorca sa tvári, že tú funkciu nepozná, a ani autocomplete vám ju neponúkne. Ale po odklepnutí (aj keď neúplného) vzorca, to vypíše chybovú hlášku, že „funkcia TopNPerLevel vyžaduje argument 3“. Čiže tá funkcia tam je.
Keď som skúšal následne vykresliť dekompozičný strom, tak samozrejme fungoval:
Ale nefungovalo odchytávanie DAX-ových dotazov na dátový model cez Analyzátor výkonu. Jednoducho sa to tvárilo, že to na dátový model neposiela žiadne dotazy. A že to počíta asi telepatiou. Pustil som však na to DAX Studio, tak ako to poznáte poniektorí z môjho optimalizačného workshopu, a tam sa už podarilo odchytiť daný dotaz, kde už nádherne zasvietila funkcia TOPNPERLEVEL:
Takže toto je prvá lastovička, a predpokladám, že vo veľmi blízkej dobe sa už dočkáme prvých rozširujúcich funkcií v DAX-e. Podpora vlastných funkcií v ňom totiž už dávno chýbala ako soľ, a určite to pomôže v riešení mnohých pokročilých analytických aj reportingových problémov. Nejaký čas to však asi ešte potrvá, lebo asi ešte riešia, ako sa takéto veci budú nasadzovať napr. do cloudu, aké nové požiadavky budú z toho vyplývať na bezpečnosť, a podobne. Každopádne, vyzerá to sľubne, a niečo mi hovorí, že nepotrvá dlho, a niekedy začiatkom budúceho roka by sme sa mohli už konečne dočkať aj oficiálneho ohlásenia. Čím Microsoft elegantne vyrieši rozšíriteľnosť DAX-u, a aj to, aby si zákazníci mohli hneď sami pridávať nové funkcie. A aby sa nezapratával DAX novými funkciami každý mesiac, keď nie sú univerzálne použiteľné. Po 10 rokoch existencie DAX-u by sa už podpora vlastných funkcií naozaj zišla 🙂
Autor, tréner a expert na PowerPivot, Power BI a jazyk DAX. Založil som tento web, aby som pomohol dostať PowerPivot a Power BI do širšieho povedomia, a aby som ľuďom ukázal, že aj komplexné analytické problémy idú riešiť jednoducho. Po nociach vzývam Majstra Yodu a tajne plánujem ovládnutie vesmíru.