Funksjonen BEREGN DAX: Problemer og løsninger

I dagens blogg vil vi utforske hvorfor du ikke bør bruke DAX-funksjonen for å få Average Per Category og gi noen alternative løsninger for å få de samme resultatene du ønsker. Du kan se hele videoen av denne opplæringen nederst på denne bloggen .

Å få et gjennomsnitt per kategori i DAX er merkelig komplisert. Ved å bruke CALCUATE-funksjonen for å løse disse beregningene, kan nye DAX-brukere finne DAX-koden vanskeligere å forstå enn den burde være. Den gode nyheten er at det finnes enklere løsninger på dette problemet. 

Innholdsfortegnelse

Oversikt over CALCUATE DAX-funksjonen

For noen måneder siden presenterte jeg for LuckyTemplates. Det ble kalt DAX-motkulturen hvor jeg ga noen alternative syn på DAX. 

En av de viktigste gjelder bruken av CALCUATE-funksjonen. Jeg snakket om hvorfor du ikke bør bruke CALCULATE, spesielt hvis du er ny på DAX. 

CALCUATE er en veldig kompleks funksjon å forstå og bruke. Det gjør visse antakelser om datamodellen din og kan få deg i mye trøbbel. 

Jeg har også gravd i Microsofts for Running Total fordi det ikke fungerer i enkelttabellsituasjoner og det trenger et stjerneskjema for å fungere ordentlig.

Så jeg viste et enklere alternativ som fungerer enten det er et stjerneskjema eller en enkelt tabellmodell uten behov for CALCUATE. 

BEREGN DAX-formelen

Denne bloggen vil fordype seg i et raskt mål som heter Average Per Category . Hvis du er i LuckyTemplates-skrivebordet, start med å gå til feltruten og opprette et nytt hurtigmål .

Funksjonen BEREGN DAX: Problemer og løsninger

I hurtigmålingsvinduet som vises, velg Gjennomsnitt per kategori i rullegardinmenyen Beregning . Så, dra ? Verdi i tekstfeltet Grunnverdi og Måned i Kategori- feltet.

Funksjonen BEREGN DAX: Problemer og løsninger

Klikk deretter OK og du får opp et bilde som ser slik ut. 

Funksjonen BEREGN DAX: Problemer og løsninger

I x-aksen er kvartalene – kvartal 1, 2, 3 og 4. 

Og det du vil gjøre er å summere verdiene for hver måned vist nedenfor og deretter ta gjennomsnittet over disse verdiene. Kort sagt, gjennomsnittet per kategori, som er temaet for bloggen vår. 

Funksjonen BEREGN DAX: Problemer og løsninger

Vår datamodell for dette er veldig enkel. Vi har en tabell med Datoer , Verdier som genereres tilfeldig, og Måned , Månedssortering og Kvartal i separate kolonner. 

Funksjonen BEREGN DAX: Problemer og løsninger

Og vi har det samme i vår med kalendertabellen, måned, månedssortering og kvartal. Dette betyr at vi kan velge kvartal eller måned fra enten datotabellen eller den første tabellen. 

Funksjonen BEREGN DAX: Problemer og løsninger

Den gode nyheten med Average Per Category er at det faktisk fungerer uavhengig av om du har en enkelt tabellmodell eller et stjerneskjema.

I disse bildene bruker vi kvartalet fra det første bordet...

Funksjonen BEREGN DAX: Problemer og løsninger

 … mens denne bruker kvartalet fra datotabellen vår. Det fungerer uansett. 

Funksjonen BEREGN DAX: Problemer og løsninger

Men problemet med Average Per Category er ganske enkelt DAX-koden. 

Funksjonen BEREGN DAX: Problemer og løsninger

Denne DAX-koden er rar, for selv om du er en DAX-ekspert, vil den sannsynligvis forvirre deg ved første øyekast. Den er merkelig nok konstruert med en CALCULATE-setning uten filterklausul og omslutter bare en sumsetning. 

Faktisk er det en av de kjæledyrene mine når jeg ser folk ute på forumene som bruker CALCULATE som bare pakker inn en sum uten grunn. Men i dette tilfellet har det faktisk en grunn.

Det forvirrer meg hver gang jeg ser dem fordi det bare er en umiddelbar indikasjon på at de ikke aner hva de gjør med CALCUATE-funksjonen. Så jeg anbefaler å bare holde seg unna det i stedet. 

DAX-kode for gjennomsnitt per kategori

DAX-koden vist ovenfor bruker . Denne funksjonen er ikke i et CALCUATE-segment, noe som igjen gjør det rart. Denne funksjonen er visstnok bygget for bruk i CALCULATE-setninger basert på dokumentasjonen.

Koden bruker også , som jeg ikke er enig i. De bør aldri bruke VERDIER fordi distinkte verdier har en tendens til å returnere en tom rad hvis det er en rad som ikke samsvarer. Det kan få deg i mye trøbbel, men det er et emne for en annen video.

I hovedsak, det som skjer her er at de bruker en VERDI-funksjon for å få alle kategoriene våre. For eksempel i kvartal 1, det er januar, februar og mars. VALUES returnerer også en tabell, men de bruker en KEEPFILTER-setning for å gjøre den gyldig som en første parameter i . 

De beholder også CALCULATE-funksjonen for å kjøre innenfor konteksten av KEEPFILTERS. På grunn av måten AVERAGEX fungerer på, tar den det andre uttrykket og kjører det innenfor konteksten til det første uttrykket. 

Hva er problemet, da?

Totalt sett fungerer det greit, men ikke for noen nye til DAX. Jeg tror Microsoft virkelig savnet båten da de opprettet dette raske tiltaket fordi raske tiltak visstnok er for folk som er nye til DAX.

Raske mål er en god idé, som "La oss skrive noen vanlige mål med forskjellige beregninger for deg fordi du er ny på DAX og ikke vet alt som er å vite om DAX." Men hvorfor skulle de konstruere dem på så rare, kompliserte måter? 

Hvordan skal noen nye til DAX ta en titt på dette og finne ut hva som skjer når til og med sannsynligvis DAX-profesjonelle klør seg litt i hodet over denne? 

Så for meg gikk de glipp av en gylden mulighet til å hjelpe folk å lære DAX med sine raske tiltak ved å insistere på at de inkluderer CALCUATE og måtte hoppe gjennom bøyler for å få CALCUATE der. 

Den enklere løsningen

Bruke SUMMARIZE-funksjonen

Som jeg har nevnt tidligere, er det en bedre og enklere måte å gjøre det på.

Først oppretter du en tabellvariabel ved å bruke VAR_Table . Deretter bruker vi til å ta tabellen, oppsummere den etter måned, lage en verdikolonne og oppsummere verdiene våre.

Til slutt tar vi gjennomsnittet av verdiene våre ved å bruke AVERAGEX- funksjonen. 

Funksjonen BEREGN DAX: Problemer og løsninger

Denne koden er enklere og så mye mer logisk. Den inkluderer ikke CALCUATE, som du uansett ikke trenger. 

Du kan komme over en bloggartikkel der ute som kritiserer SUMMARIZE. Bloggen sier at måten SUMMARIZE fungerer internt på er ganske komplisert.

Det antyder også at du kan få deg selv i trøbbel i ett spesifikt tilfelle, men du vil aldri støte på det. Det ville bare skje hvis beregningen din involverer en veldig kompleks beregning og en veldig stor tabell. Først da vil SUMMARIZE gi deg vanvittige resultater. 

Det er i hvert fall det bloggartikkelen hevder. Og det er greit hvis du vil vike unna SUMMARIZE. Bruk i så fall funksjonen i stedet.

Bruk av GROUPBY-funksjonen

Ingen har problemer med å bruke GROUPBY-funksjonen, så la oss lære hvordan du bruker den også. Igjen, opprett en tabellvariabel ved å bruke VAR_Table. Deretter grupperer vi måneden og oppretter en verdikolonne.

Deretter bruker vi CURRENTGROUP , som er hvordan GROUPBY fungerer. La oss summere verdien vår og igjen ta AVERAGEX over den. 

Koden vår skal se slik ut.

Funksjonen BEREGN DAX: Problemer og løsninger

Sammenligning av resultatene: SUMMARIZE vs GROUPBY vs CALCUATE DAX-funksjoner

La oss nå se om snarveiene vi gjorde, gir de samme resultatene. 

Som du kan se på bildene nedenfor, returnerer både SUMMARIZE merket som Better Average Per Category og GROUPBY merket som Better Average Per Category 2 de samme tallene. 

Funksjonen BEREGN DAX: Problemer og løsninger

Begge formlene våre gir 3,4K for Q1, 3,6K for Q2, 3,4K for Q3 og 3,5K for Q4. Og igjen, de jobber i en enkelt tabelldatamodell ved å bruke Quarters for tabellen vår.

De fungerer også i et stjerneskjema der vi bruker Quarters i datotabellen vår. 

Funksjonen BEREGN DAX: Problemer og løsninger




Konklusjon

Vi trenger ikke å tvinge oss selv inn i en vridd kontekstlogikk bare for å få CALCULATE inn i formlene våre. Bare bruk enkle standard DAX-funksjoner og du kan oppnå de samme tingene. 

Faktisk, sannsynligvis i 80 % – 90 % av tilfellene, er det absolutt ingen grunn til å bry seg med å bruke CALCUATE for noe. I stedet kan du bruke SUMMARIZE- og GROUPBY-funksjonene som er enklere og mer logiske.

Hvis du vil utforske denne PBIX-filen, har jeg allerede publisert den til Quick Measures Gallery og kalt filen Better Average Per Category . Bare scroll hele veien ned på siden for å finne PBIX-filen som du kan laste ned og du leker med deg selv. 

Beste ønsker,

Greg Deckler


PowerApps-søkefelt: Slik legger du til og tilpasser

PowerApps-søkefelt: Slik legger du til og tilpasser

Lær hvordan du oppretter et PowerApps-søkefelt fra bunnen av og tilpasser det til å matche det overordnede temaet for appen din.

SELECTEDVALUE DAX-eksempel- Valg av høsteskive

SELECTEDVALUE DAX-eksempel- Valg av høsteskive

Høst eller fang en verdi inne i et mål for å gjenbruke i et annet mål for dynamiske beregninger ved å bruke SELECTEDVALUE DAX i LuckyTemplates.

Versjonshistorikk i SharePoint-lister

Versjonshistorikk i SharePoint-lister

Oppdag hvordan versjonshistorikk i SharePoint kan hjelpe deg med å se utviklingen av bestemte data, og hvor mange endringer den har gjennomgått.

Hex-fargekodevelger for Lucky Templates-rapporter

Hex-fargekodevelger for Lucky Templates-rapporter

Her er et verktøy for å lage rapporter og grafikk, en sekskantkodevelger for farger som du kan bruke for enkelt å få fargene til LuckyTemplates-rapportene dine.

Dynamisk datoskjærer i Lucky-maler ved hjelp av en periodetabell

Dynamisk datoskjærer i Lucky-maler ved hjelp av en periodetabell

Du kan enkelt vise en datoperiode som en slicer i rapporten ved hjelp av en periodetabell. Bruk en M-kode for å lage den dynamiske datoskjæreren i LuckyTemplates.

Proporsjons- og frekvenstabeller i Excel

Proporsjons- og frekvenstabeller i Excel

Skulle dykke ned i frekvenstabeller i Excel samt proporsjonstabeller. Se nærmere på hva de er og når du skal bruke dem.

Slik installerer du DAX Studio & Tabular Editor i LuckyTemplates

Slik installerer du DAX Studio & Tabular Editor i LuckyTemplates

Lær hvordan du laster ned og installerer DAX Studio og Tabular Editor 3 og hvordan du konfigurerer dem for bruk i LuckyTemplates og i Excel.

LuckyTemplates Shape Map Visualization for romlig analyse

LuckyTemplates Shape Map Visualization for romlig analyse

Denne bloggen inneholder Shape Map-visualiseringen for romlig analyse i LuckyTemplates. Jeg viser deg hvordan du kan bruke denne visualiseringen effektivt med dens funksjoner og elementer.

LuckyTemplates finansiell rapportering: Allokering av resultater til maler på hver enkelt rad

LuckyTemplates finansiell rapportering: Allokering av resultater til maler på hver enkelt rad

I denne opplæringen viser jeg frem en unik idé rundt finansiell rapportering, som tildeler resultater for å forhåndsbestemme tabellmaler inne i LuckyTemplates.

DAX-mål i LuckyTemplates ved hjelp av måleforgrening

DAX-mål i LuckyTemplates ved hjelp av måleforgrening

Opprett DAX-mål i LuckyTemplates ved å bruke eksisterende mål eller formler. Dette er det jeg kaller tiltaket forgreningsteknikk.