DAX-debuggauksen uusi aika Power BI -kontekstissa
DAX:n maailmaan on elokuussa 2022 hiipinyt kaikessa hiljaisuudessa kaavojen debuggaukseen käytettävä funktio EVALUATEANDLOG. Funktiota ei ole vielä esitelty kuukausittaisessa uusien Power BI-ominaisuuksien julkaisussa. Myöskään Power BI Desktopin intellisense ei funktiota käyttäjille vielä ehdota. Funktio on kuitenkin olemassa ja kaavoja pääsee debuggaamaan vaikka heti.
Aiemmin DAX:n debuggauksessa on saanut käyttää luovuutta määrittäessään raportoinnin kannalta sopivia virtuaalitauluja ja tilannekohtaisia suodatuksia. Apuna on voinut käyttää esimerkiksi DAXStudiota, joka on kuitenkin ollut verrattain kömpelö työkalu juuri edellä mainituista syistä, kun raportoinnissa käytetyt kaavat eivät ole olleet sellaiseen valmiita testattaviksi. Toinen vaihtoehto on ollut pilkkoa DAX-lausekkeet sopivan pieniin osiin. On voitu esimerkiksi muodostaa omat mittarinsa jakolaskun osoittajalle ja nimittäjälle, jotka on sitten pudotettu visuaalille erikseen. Näin on nähty saavatko osaset odotettuja arvoja suodatinkontekstissa. EVALUATEANDLOG tuo tähän erinomaisen ratkaisun ja tarjoaa mahdollisuuden kirjoittaa debug-logiikan DAX-kaavan sekaan. EVALUATEANDLOG tulostaa sitten määrityksen perusteella välituloksia logiin. DAX-lausekkeen eri osia voidaan näin testata yhdellä kertaa suoraan kaavaeditorilla.
Power BI Desktop ei natiivisti kykene (ainakaan tämän blogikirjoituksen aikaan) esittämään EVALUATEANDLOG:n tuottamia tulosteita DAX-kaavojen arvoista. Vaihtoehtoina esittämisalustaksi on tällä hetkellä tarjolla Microsoftin oma SQL Server Profiler, jota on tavallisesti hyödynnetty Power BI:n kanssa hitaasti vastaavien kyselyiden tunnistamiseen. Toinen vaihtoehto on kolmannen osapuolen DAXDebugOutput -sovellus. Linkit näiden lataamiseen löytyvät kirjoituksen lopusta.
Sitten asiaan!
Miten tätä ihmekaavaa sitten käytetään? Syntaksi on muotoa:
EVALUATEANDLOG(<Table or scalar expression> [, <Label>] [,<max rows>])
Table or scalar expression: Lauseke, joka palauttaa taulukon tai skalaariarvon
Label: Voidaan nimetä kunkin kaavan osan debuggaukseen käytetty EVALUATEANDLOG. Label tulee näkyviin omana sarakkeenaan SQL Server Profilerin tulosteessa.
Max rows: Taulukkoja palauttavan lausekkeen tapauksessa tulostettava rivien maksimimäärä. Oletusarvo on 10 riviä.
Otetaan esimerkiksi yksinkertainen tilanne, jossa summataan tuotteiden myyntiä tuotteittain käyttäen SUMX-funktiota, jonka ympärille EVALUATEANDLOG on nyt kääritty. Huom! Vaikka Intellisense esittää syntaksivirhettä, EVALUATEANDLOG kuitenkin toimii.
Mittari on pudotettu normaalisti tuotteen nimen kanssa taulukkovisuaaliin.
Seuraavaksi voimme avata SQL Server Profilerin, jolla luodaan File-valikosta New trace. Valitaan palvelimen tyypiksi Analysis Services, kun tabulaarimalli raportin alla pyörii ja haetaan palvelimen nimeksi portti esimerkiksi DAXStudiolla, liitetään Server Profileriin ja klikataan connect.
Voidaan nimetä Trace ja valitaan Event Selection -sivulla ainakin DAX Evaluation Log. Lopuksi klikataan Run ja logien kirjaus käynnistyy.
Kokeillaan tiputtaa mittari uudelleen taulukkovisuaaliin Power BI Desktopissa ja seurataan logeja profilerista. Profilerin puolelle on syntynyt kaksi log-eventiä, joiden Label-sarakkeessa näkyy antamamme nimi.
Klikkaamalla log-eventiä nähdään alaikkunassa EVALUATEANDLOG:n palauttama json-muotoinen vastaus DAX-kyselyn vaiheista. Tässä tapauksessa ”input”-kenttä näyttää voimassa olevan suodatuksen ja ”output”-kenttä mittarin arvon kyseisessä kontekstissa. Näemme samat arvot alkuperäisessä taulukossa.
Muutetaan tilannetta nyt niin, että lisätään taulukkovisuaaliin myös tuotteen kategoria ja alakategoria. Huomataan, että päivitykset raportilla tuottavat log-eventejä. Sekä kategoria, että alakategoria näkyvät nyt tuotteen rinnalla suodattimena ”input”-kentässä.
Näissä yksinkertaisissa tilanteissa nähdään toki vastaavat tiedot suoraan taulukosta Power BI Desktopilla, mutta entä jos DAX-kaavassa olisi enemmän elementtejä, joiden arvoja meidän tulisi seurata eri suodatuksilla?
Muodostetaan seuraavanlainen DAX-kaava, joka laskee myynnin muutosprosentin edelliseen vuoteen verrattuna ja kääritään lausekkeen sisältämiä DAX-muuttujia EVALUATEANDLOG:n sisään.
Kukin osio tulee nyt logattua labelilla nimettynä
Jos tarkastellaan suodatusta [Clothing, Jerseys, Long-Sleeve Logo Jersey, S], jonka Muutos-% on n. 127%, näemme logeista kyseisellä suodatuksella mittarin muuttujien arvot:
MyyntiVV
MyyntiEV
Muutos
Muutos%
Uskon että EVALUATEANDLOG tulee viemään DAX-kaavojen debuggauksen uudelle tasolle, kun työkalut logien tulostamiseen kehittyvät. Lievästä kankeudesta huolimatta SQL Server Profilerilla saa pienten alkuvalmisteluiden jälkeen verrattain helposti kaavojen osien tuloksia tulostettuna kehittäjän nähtäville. DAXDebugOutput on huomattavasti kevyempi vaihtoehto erityisesti EVALUATEANDLOG:n logien esittämiseen ja ehdottomasti kokeilemisen arvoinen työkalu. Toivottavasti Power BI:hin kehitetään lähitulevaisuudessa valmiudet esittää natiivisti EVALUATEANDLOG:n tuottamia tulosteita. Kehittäjäystävällisyys lisääntyisi ja työskentelyflow parantuisi roimasti.
Linkit työkaluihin:
SQL Server Profiler toimitetaan esimerkiksi SQL Server Management studion mukana
DAXDebugOutput
https://github.com/pbidax/DAXDebugOutput/releases/tag/v0.1.0-beta