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


Päivämäärätaulukon luominen LuckyTemplatesissa

Päivämäärätaulukon luominen LuckyTemplatesissa

Ota selvää, miksi LuckyTemplatesissa on tärkeää pitää oma päivämäärätaulukko ja opi nopein ja tehokkain tapa tehdä se.

LuckyTemplates mobiiliraportointivinkkejä ja -tekniikoita

LuckyTemplates mobiiliraportointivinkkejä ja -tekniikoita

Tämä lyhyt opetusohjelma korostaa LuckyTemplates-mobiiliraportointiominaisuutta. Näytän sinulle, kuinka voit kehittää raportteja tehokkaasti mobiililaitteille.

Ammattimainen palveluanalyysiraportit LuckyTemplatesissa

Ammattimainen palveluanalyysiraportit LuckyTemplatesissa

Tässä LuckyTemplates Showcase -esittelyssä käymme läpi raportteja, jotka näyttävät ammattitaitoisen palveluanalytiikan yritykseltä, jolla on useita sopimuksia ja asiakkaiden sitoumuksia.

Microsoft Power Platform -päivitykset | Microsoft Ignite 2021

Microsoft Power Platform -päivitykset | Microsoft Ignite 2021

Käy läpi tärkeimmät Power Appsin ja Power Automaten päivitykset sekä niiden edut ja vaikutukset Microsoft Power Platformiin.

Yleiset SQL-funktiot: Yleiskatsaus

Yleiset SQL-funktiot: Yleiskatsaus

Tutustu joihinkin yleisiin SQL-toimintoihin, joita voimme käyttää, kuten merkkijono, päivämäärä ja joitain lisätoimintoja tietojen käsittelyyn tai käsittelyyn.

LuckyTemplates-mallin luominen: opas ja vinkkejä

LuckyTemplates-mallin luominen: opas ja vinkkejä

Tässä opetusohjelmassa opit luomaan täydellisen LuckyTemplates-mallin, joka on määritetty tarpeidesi ja mieltymystesi mukaan.

Kenttäparametrit ja pienet kertoimet LuckyTemplatesissa

Kenttäparametrit ja pienet kertoimet LuckyTemplatesissa

Tässä blogissa esittelemme, kuinka kerrostat kenttäparametreja pienillä kerroilla uskomattoman hyödyllisten näkemysten ja visuaalien luomiseksi.

LuckyTemplates-sijoitus ja mukautettu ryhmittely

LuckyTemplates-sijoitus ja mukautettu ryhmittely

Tässä blogissa opit käyttämään LuckyTemplates-sijoitus- ja mukautettuja ryhmittelyominaisuuksia näytetietojen segmentoimiseen ja luokitteluun kriteerien mukaan.

LuckyTemplatesissa näytetään vain tiettyyn päivämäärään asti kumulatiivinen kokonaissumma

LuckyTemplatesissa näytetään vain tiettyyn päivämäärään asti kumulatiivinen kokonaissumma

Tässä opetusohjelmassa käsittelen tiettyä tekniikkaa, jolla voit näyttää kumulatiivisen kokonaissumman LuckyTemplates-visuaaleissasi vain tiettyyn päivämäärään asti.

Bullet Charts: Kehittyneet mukautetut visuaalit LuckyTemplatesille

Bullet Charts: Kehittyneet mukautetut visuaalit LuckyTemplatesille

Opi luomaan ja mukauttamaan Bullet-kaavioita LuckyTemplatesissa, joita käytetään pääasiassa suorituskyvyn mittaamiseen suhteessa tavoitteeseen tai edellisiin vuosiin.