DAX-debuggauksen uusi aika Power BI -kontekstissa

Analytiikkakehitys

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.

Power BI DAX kuva 1

Mittari on pudotettu normaalisti tuotteen nimen kanssa taulukkovisuaaliin.

Power BI DAX kuva 2

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.

Power BI DAX kuva 3
Power BI DAX kuva 4

Voidaan nimetä Trace ja valitaan Event Selection -sivulla ainakin DAX Evaluation Log. Lopuksi klikataan Run ja logien kirjaus käynnistyy.

Power BI DAX kuva 5
Power BI DAX kuva 6

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.

Power BI DAX kuva 7

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.

Power BI DAX kuva 8

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ä.

Power BI DAX kuva 9

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.

Power BI DAX kuva 10

Kukin osio tulee nyt logattua labelilla nimettynä

Power BI DAX kuva 11

Jos tarkastellaan suodatusta [Clothing, Jerseys, Long-Sleeve Logo Jersey, S], jonka Muutos-% on n. 127%, näemme logeista kyseisellä suodatuksella mittarin muuttujien arvot:

Power BI DAX kuva 12

MyyntiVV

Power BI DAX kuva 13

MyyntiEV

Power BI DAX kuva 14

Muutos

Power BI DAX kuva 15

Muutos%

Power BI DAX kuva 16

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

https://learn.microsoft.com/en-us/sql/ssms/download-sql-server-management-studio-ssms?view=sql-server-ver16

DAXDebugOutput

https://github.com/pbidax/DAXDebugOutput/releases/tag/v0.1.0-beta

Lisää ajankohtaisia julkaisuja:

Mitä tarkoittaa sovellusten suorituskyvyn mittaaminen Azuressa?
Tutustu tarinaan
Azuren palvelut integraatioalustana
Tutustu tarinaan
Mitä on luottoriskien hallinnan data-analytiikka?
Tutustu tarinaan
Dimensiot ja hierarkiat tietomallissa
Tutustu tarinaan
Mitä on riskienhallinnan analytiikka?
Tutustu tarinaan

Lisää ajankohtaisia julkaisuja:

Mitä tarkoittaa sovellusten suorituskyvyn mittaaminen Azuressa?
Tutustu tarinaan
Azuren palvelut integraatioalustana
Tutustu tarinaan
Mitä on luottoriskien hallinnan data-analytiikka?
Tutustu tarinaan
Dimensiot ja hierarkiat tietomallissa
Tutustu tarinaan
Mitä on riskienhallinnan analytiikka?
Tutustu tarinaan