CLCULATE DAX -funktio: Ongelmia ja ratkaisuja

Tämänpäiväisessä blogissa tutkimme, miksi sinun ei pitäisi käyttää DAX-toimintoa luokkakohtaisen keskiarvon saamiseksi ja tarjota vaihtoehtoisia ratkaisuja saadaksesi samat tulokset kuin haluat. Voit katsoa tämän opetusohjelman koko videon tämän blogin alaosasta .

Luokkakohtaisen keskiarvon saaminen DAXissa on oudon monimutkaista. Käyttämällä CLCULATE-toimintoa näiden laskelmien ratkaisemiseen uusien DAX-käyttäjien DAX-koodi voi olla vaikeampi ymmärtää kuin sen pitäisi olla. Hyvä uutinen on, että tähän ongelmaan on olemassa yksinkertaisempia ratkaisuja. 

Sisällysluettelo

Yleiskatsaus CLCULATE DAX -funktiosta

Muutama kuukausi sitten esittelin LuckyTemplatesissa. Sitä kutsuttiin DAX-vastakulttuuriksi, jossa esitin joitain vaihtoehtoisia näkemyksiä DAXista. 

Yksi tärkeimmistä liittyy CLCULATE-funktion käyttöön. Puhuin siitä, miksi sinun ei pitäisi käyttää CLCULATEa, varsinkin jos olet uusi DAX-käyttäjä. 

CLCULATE on todella monimutkainen funktio, joka on ymmärrettävä ja käytettävä. Se tekee tiettyjä oletuksia tietomallistasi ja voi aiheuttaa sinulle paljon ongelmia. 

Kaivoin myös Microsoftin Running Total -ohjelmaan, koska se ei toimi yhden taulukon tilanteissa ja se tarvitsee tähtiskeeman toimiakseen kunnolla.

Niinpä näytin helpomman vaihtoehdon, joka toimii riippumatta siitä, onko se tähtimalli tai yksitaulukkomalli ilman CLCULATE-toimintoa. 

LASKE DAX-kaava

Tässä blogissa tarkastellaan nopeaa mittaria nimeltä Keskiarvo kategorioittain . Jos olet LuckyTemplates-työpöydällä, aloita menemällä Kentät-ruutuun ja luomalla Uusi pikamitta .

CLCULATE DAX -funktio: Ongelmia ja ratkaisuja

Valitse avautuvassa Pikamittaus-ikkunassa avattavasta Laskenta- valikosta Keskiarvo luokkaa kohti . Vedä sitten ? Arvo Perusarvo- tekstikentässä ja kuukausi Luokka- kentässä .

CLCULATE DAX -funktio: Ongelmia ja ratkaisuja

Napsauta sitten OK ja saat visuaalisen kuvan, joka näyttää tältä. 

CLCULATE DAX -funktio: Ongelmia ja ratkaisuja

X-akselilla ovat neljännekset – neljännes 1, 2, 3 ja 4. 

Ja mitä haluat tehdä, on summata jokaisen alla näkyvän kuukauden arvot ja ottaa sitten näiden arvojen keskiarvo. Lyhyesti sanottuna keskiarvo luokkaa kohti, joka on blogimme aihe. 

CLCULATE DAX -funktio: Ongelmia ja ratkaisuja

Tietomallimme tätä varten on hyvin yksinkertainen. Meillä on taulukko, jossa on erillisissä sarakkeissa päivämäärät , satunnaisesti luodut arvot ja kuukausi , kuukausilajittelu ja neljännekset

CLCULATE DAX -funktio: Ongelmia ja ratkaisuja

Ja meillä on sama asia kalenteritaulukon, kuukauden, kuukauden lajittelun ja vuosineljänneksen kanssa. Tämä tarkoittaa, että voimme valita vuosineljänneksen tai kuukauden joko päivämäärätaulukosta tai ensimmäisestä taulukosta. 

CLCULATE DAX -funktio: Ongelmia ja ratkaisuja

Hyvä uutinen Average per Category -sovelluksessa on, että se todella toimii riippumatta siitä, onko sinulla yksi taulukkomalli vai tähtiskeema.

Näissä kuvissa käytämme neljännestä ensimmäisestä taulukosta…

CLCULATE DAX -funktio: Ongelmia ja ratkaisuja

 …vaikka tämä käyttää vuosineljännestä päivämäärätaulukostamme. Se toimii kummallakin tavalla. 

CLCULATE DAX -funktio: Ongelmia ja ratkaisuja

Mutta keskimääräisen kategorian ongelma on yksinkertaisesti DAX-koodi. 

CLCULATE DAX -funktio: Ongelmia ja ratkaisuja

Tämä DAX-koodi on outo, koska vaikka olisit DAX-asiantuntija, se todennäköisesti hämmentää sinut ensi silmäyksellä. Se on oudolla tavalla rakennettu CALCULATE-käskyllä, jossa ei ole suodatinlausetta, ja se vain käärii summalausekkeen. 

Itse asiassa, se on yksi niistä lemmikkipiivoistani, kun näen foorumeilla ihmisiä, jotka käyttävät CLCULATE-ohjelmaa, joka vain käärii summan ilman syytä. Mutta tässä tapauksessa siihen on itse asiassa syy.

Mieleni hämmentää aina kun näen ne, koska se on vain välitön osoitus siitä, että heillä ei ole aavistustakaan siitä, mitä he tekevät CLCULATE-toiminnolla. Joten suosittelen vain pysymään erossa siitä. 

DAX-koodi keskiarvolle luokkaa kohden

Yllä näkyvä DAX-koodi käyttää . Tämä toiminto ei ole CLCULATE-segmentissä, mikä taas tekee siitä outoa. Oletettavasti tämä funktio on rakennettu käytettäväksi CALCULATE-käskyissä sen dokumentaation perusteella.

Koodi käyttää myös , jota en hyväksy. Heidän ei tulisi koskaan käyttää ARVOJA, koska erillisillä arvoilla on taipumus palauttaa tyhjä rivi, jos rivi ei täsmää. Siitä voi tulla paljon ongelmia, mutta se on toisen videon aihe.

Pohjimmiltaan tässä tapahtuu se, että he käyttävät ARVOT-funktiota saadakseen kaikki luokkamme. Esimerkiksi 1. vuosineljänneksellä se on tammikuu, helmikuu ja maaliskuu. VALUES palauttaa myös taulukon, mutta ne käyttävät KEEPFILTER-käskyä tehdäkseen siitä kelvollisen ensimmäisenä parametrina . 

Ne myös pitävät CLCULATE-toiminnon suoritettavana KEEPFILTERS-kontekstissa. AVERAGEXin toimintatavan vuoksi se ottaa toisen lausekkeen ja suorittaa sen ensimmäisen lausekkeen yhteydessä. 

Mikä sitten on ongelma?

Kaiken kaikkiaan se toimii hyvin, mutta ei jollekin uudelle DAX-käyttäjälle. Uskon, että Microsoft todella kaipasi venettä, kun he loivat tämän nopean toimenpiteen, koska nopeat toimenpiteet on oletettavasti tarkoitettu DAX:n uusille käyttäjille.

Pikamitat ovat hyvä idea, kuten "Kirjoitetaan sinulle joitain yleisiä mittareita erilaisilla laskelmilla, koska olet uusi DAX:ssa etkä tiedä kaikkea DAXista." Mutta miksi he rakentaisivat ne niin oudoilla, monimutkaisilla tavoilla? 

Miten jonkun uuden DAX-käyttäjän pitäisi katsoa tätä ja selvittää, mitä tapahtuu, kun jopa luultavasti DAX-ammattilaiset raaputtavat hieman päätään tästä? 

Joten minusta he menettivät loistavan tilaisuuden auttaa ihmisiä oppimaan DAX:ia nopeilla toimenpiteillään vaatimalla, että ne sisältävät CLCULATE:n ja joutuivat hyppäämään vanteiden läpi saadakseen CLCULATE:n sisään. 

Helpompi Ratkaisu

SUMMARIZE-toiminnon käyttäminen

Kuten aiemmin mainitsin, on olemassa parempi ja yksinkertaisempi tapa tehdä se.

Luo ensin taulukkomuuttuja käyttämällä VAR_Tablea . Otamme sitten taulukon, teemme sen yhteenvedon kuukausittain, luomme Arvo-sarakkeen ja laskemme arvomme yhteen.

Lopuksi otamme arvojen keskiarvon käyttämällä AVERAGEX- funktiota. 

CLCULATE DAX -funktio: Ongelmia ja ratkaisuja

Tämä koodi on yksinkertaisempi ja paljon loogisempi. Se ei sisällä CLCULATE, jota et kuitenkaan tarvitse. 

Saatat törmätä blogiartikkeliin, jossa kritisoidaan SUMMARIZEa. Blogin mukaan tapa, jolla SUMMARIZE toimii sisäisesti, on melko monimutkainen.

Se viittaa myös siihen, että voit joutua vaikeuksiin yhdessä tietyssä tapauksessa, mutta et koskaan törmää siihen. Näin tapahtuisi vain, jos laskentaan sisältyy erittäin monimutkainen laskelma ja erittäin suuri taulukko. Vasta sitten SUMMARIZE antaa hämäriä tuloksia. 

Näin ainakin blogikirjoituksessa väitetään. Ja se on hienoa, jos haluat ujostella SUMMARIZEa. Käytä siinä tapauksessa toimintoa sen sijaan.

GROUPBY-funktion käyttäminen

Kenelläkään ei ole ongelmia GROUPBY-toiminnon käytössä, joten opetellaan käyttämään sitäkin. Luo taas taulukkomuuttuja käyttämällä VAR_Tablea. Sitten GROUPBY Month ja luomme Arvo-sarakkeen.

Seuraavaksi hakemus tehdään käyttämällä CURRENTGROUPa , jolla GROUPBY toimii. Summataan arvomme ja otetaan jälleen AVERAGEX sen yli. 

Koodimme pitäisi näyttää tältä.

CLCULATE DAX -funktio: Ongelmia ja ratkaisuja

Tulosten vertailu: SUMMARIZE vs GROUPBY vs LASKE DAX-funktiot

Katsotaan nyt, tuottivatko tekemämme pikanäppäimet samat tulokset. 

Kuten alla olevista kuvista näet, sekä SUMMARIZE, joka on merkitty Parempi keskiarvo luokkaa kohti, että GROUPBY, joka on merkitty Parempi keskiarvo luokkaa kohti, palauttavat samat luvut. 

CLCULATE DAX -funktio: Ongelmia ja ratkaisuja

Molemmat kaavamme palauttavat 3,4 t Q1:lle, 3,6 000 Q2:lle, 3,4 000 Q3:lle ja 3,5 000 Q4:lle. Ja jälleen, ne toimivat yhden taulukon tietomallissa käyttämällä Quartersia taulukossamme.

Ne toimivat myös tähtiskeemassa, jossa käytämme päivämäärätaulukossamme Quartersia. 

CLCULATE DAX -funktio: Ongelmia ja ratkaisuja




Johtopäätös

Meidän ei tarvitse pakottaa itseämme kierrettyyn kontekstilogiikkaan vain saadaksemme LASKENTAA kaavoihimme. Käytä vain yksinkertaisia ​​DAX-standarditoimintoja ja voit saavuttaa samat asiat. 

Itse asiassa, luultavasti 80–90 prosentissa tapauksista, ei ole mitään syytä vaivautua käyttämään CALCULATEa mihinkään. Sen sijaan voit käyttää SUMMARIZE- ja GROUPBY-funktioita, jotka ovat yksinkertaisempia ja loogisempia.

Jos haluat tutustua tähän PBIX-tiedostoon, olen jo julkaissut sen Quick Measures Galleryssä ja nimennyt tiedoston Better Average per Category . Vieritä sivua alaspäin löytääksesi PBIX-tiedoston, jonka voit ladata ja pelata itsesi kanssa. 

Kaikki parhaat,

Greg Deckler


Suhde- ja taajuustaulukot Excelissä

Suhde- ja taajuustaulukot Excelissä

Aioin sukeltaa Excelin taajuustaulukoihin sekä suhteellisiin taulukoihin. Selvitä, mitä ne ovat ja milloin niitä käytetään.

Kuinka asentaa DAX Studio & Tabular Editor LuckyTemplatesissa

Kuinka asentaa DAX Studio & Tabular Editor LuckyTemplatesissa

Opi lataamaan ja asentamaan DAX Studio ja Tabular Editor 3 ja miten ne määritetään käytettäväksi LuckyTemplatesissa ja Excelissä.

LuckyTemplates -muotokartan visualisointi tilaanalyysiin

LuckyTemplates -muotokartan visualisointi tilaanalyysiin

Tämä blogi sisältää Shape Map -visualisoinnin tilaanalyysiä varten LuckyTemplatesissa. Näytän sinulle, kuinka voit käyttää tätä visualisointia tehokkaasti sen ominaisuuksien ja elementtien kanssa.

LuckyTemplatesin talousraportointi: tulosten kohdentaminen malleihin jokaisella rivillä

LuckyTemplatesin talousraportointi: tulosten kohdentaminen malleihin jokaisella rivillä

Tässä opetusohjelmassa esittelen ainutlaatuisen idean talousraportoinnista, joka allokoi tulokset LuckyTemplatesin sisällä olevien taulukkopohjien ennalta määrittämiseen.

DAX-mittaukset LuckyTemplatesissa käyttämällä mittahaaroitusta

DAX-mittaukset LuckyTemplatesissa käyttämällä mittahaaroitusta

Luo DAX-suureita LuckyTemplatesissa käyttämällä olemassa olevia suureita tai kaavoja. Tätä kutsun mittahaaroitustekniikaksi.

Tehokkain toimintopuhelu LuckyTemplatesissa

Tehokkain toimintopuhelu LuckyTemplatesissa

Tässä blogissa tutustu LuckyTemplates-tietojoukkoon, tehokkaimpaan funktiokutsuun, joka tuo tuhansia M- ja DAX-funktioita sormiesi ulottuville.

Datamallinnustekniikat DAX-mittausten järjestämiseen

Datamallinnustekniikat DAX-mittausten järjestämiseen

Tämän päivän opetusohjelmassa jaan muutamia datamallinnustekniikoita DAX-mittausten järjestämiseksi paremmin tehokkaamman työnkulun aikaansaamiseksi.

LuckyTemplates Financial Dashboard: Täydelliset taulukon mukautusvinkit

LuckyTemplates Financial Dashboard: Täydelliset taulukon mukautusvinkit

LuckyTemplates on loistava työkalu talousraportointiin. Tässä on opetusohjelma räätälöityjen taulukoiden luomisesta LuckyTemplates-talouden hallintapaneelillesi.

Power Queryn kielivirran parhaat käytännöt

Power Queryn kielivirran parhaat käytännöt

Tässä opetusohjelmassa keskustellaan Power Query Language Flowsta ja siitä, kuinka se voi auttaa luomaan sujuvan ja tehokkaan dataraportin.

LuckyTemplates mukautetut kuvakkeet | PBI-visualisointitekniikka

LuckyTemplates mukautetut kuvakkeet | PBI-visualisointitekniikka

Keskustelen yhdestä suosikkitekniikoistani mukautettujen LuckyTemplates-kuvakkeiden ympärillä, joka käyttää mukautettuja kuvakkeita dynaamisella tavalla LuckyTemplates-visuaaleissa.