Funktionen BEREGNET DAX: Problemer og løsninger

I dagens blog vil vi undersøge, hvorfor du ikke bør bruge DAX-funktionen til at opnå Gennemsnit pr. kategori og give nogle alternative løsninger for at få de samme resultater, som du ønsker. Du kan se den fulde video af denne tutorial nederst på denne blog .

At få et gennemsnit pr. kategori i DAX er underligt kompliceret. Ved at bruge CALCUATE-funktionen til at løse disse beregninger, kan nye DAX-brugere finde DAX-koden sværere at forstå, end den burde være. Den gode nyhed er, at der er enklere løsninger på dette problem. 

Indholdsfortegnelse

Oversigt over FUNKTION BEREGNET DAX

For et par måneder siden præsenterede jeg for LuckyTemplates. Det blev kaldt DAX-modkulturen, hvor jeg gav nogle alternative syn på DAX. 

En af de vigtigste vedrører brugen af ​​funktionen CALCUATE. Jeg talte om, hvorfor du ikke bør bruge CALCULATE, især hvis du er ny til DAX. 

CALCUATE er en virkelig kompleks funktion at forstå og bruge. Det gør visse antagelser om din datamodel og kan få dig i en masse problemer. 

Jeg har også gravet i Microsofts for Running Total, fordi det ikke virker i enkelttabelsituationer, og det har brug for et stjerneskema for at fungere korrekt.

Så jeg viste et lettere alternativ, der virker, uanset om det er et stjerneskema eller en enkelt tabelmodel uden behov for CALCUATE. 

BEREGNET DAX Formel

Denne blog vil dykke ned i et hurtigt mål kaldet Gennemsnit pr. kategori . Hvis du er i LuckyTemplates-skrivebordet, skal du starte med at gå til felter-ruden og oprette en ny hurtig måling .

Funktionen BEREGNET DAX: Problemer og løsninger

I vinduet Hurtig måling, der vises, skal du vælge Gennemsnit pr. kategori i rullemenuen Beregning . Så træk ? Værdi i tekstfeltet Basisværdi og Måned i feltet Kategori .

Funktionen BEREGNET DAX: Problemer og løsninger

Klik derefter på OK , og du får et billede, der ser sådan ud. 

Funktionen BEREGNET DAX: Problemer og løsninger

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

Og det, du vil gøre, er at opsummere værdierne for hver måned vist nedenfor og derefter tage gennemsnittet på tværs af disse værdier. Kort sagt, gennemsnittet pr. kategori, som er emnet for vores blog. 

Funktionen BEREGNET DAX: Problemer og løsninger

Vores datamodel for dette er meget enkel. Vi har en tabel med Datoer , Værdier , der er tilfældigt genereret, og Måned , Månedssortering og Kvarter i separate kolonner. 

Funktionen BEREGNET DAX: Problemer og løsninger

Og vi har det samme i vores med kalendertabellen, måned, månedssortering og kvartal. Det betyder, at vi kan vælge Kvartal eller Måned fra enten datotabellen eller den første tabel. 

Funktionen BEREGNET DAX: Problemer og løsninger

Den gode nyhed med Average Per Category er, at det faktisk fungerer, uanset om du har en enkelt tabelmodel eller et stjerneskema.

I disse billeder bruger vi kvartalet fra det første bord...

Funktionen BEREGNET DAX: Problemer og løsninger

 …mens denne bruger kvartalet fra vores datotabel. Det virker begge veje. 

Funktionen BEREGNET DAX: Problemer og løsninger

Men problemet med Average Per Category er simpelthen DAX-koden. 

Funktionen BEREGNET DAX: Problemer og løsninger

Denne DAX-kode er underlig, for selvom du er DAX-ekspert, vil den sandsynligvis forvirre dig ved første øjekast. Det er mærkeligt konstrueret med en CALCULATE-sætning uden filtersætning og ombryder blot en sumsætning. 

Faktisk er det en af ​​mine kæledyr, når jeg ser folk ude på foraene, der bruger CALCULATE, der bare pakker en sum uden grund. Men i dette tilfælde har det faktisk en grund.

Det forvirrer mit sind, når jeg ser dem, fordi det blot er en umiddelbar indikation af, at de ikke aner, hvad de laver med funktionen CALCUATE. Så jeg anbefaler bare at holde sig fra det i stedet. 

DAX-kode for gennemsnit pr. kategori

DAX-koden vist ovenfor bruger . Denne funktion er ikke i et CALCUATE-segment, hvilket igen gør det mærkeligt. Angiveligt er denne funktion bygget til brug i CALCULATE-sætninger baseret på dens dokumentation.

Koden bruger også , hvilket jeg ikke er enig i. De bør aldrig bruge VALUES, fordi distinkte værdier har en tendens til at returnere en tom række, hvis der er en ikke-matchende række. Det kan få dig i en masse problemer, men det er et emne for en anden video.

Grundlæggende er det, der foregår her, at de bruger en VALUES-funktion til at få alle vores kategorier. For eksempel i kvartal 1, det er januar, februar og marts. VALUES returnerer også en tabel, men de bruger en KEEPFILTER-sætning til at gøre den gyldig som en første parameter i . 

De beholder også CALCULATE-funktionen til at udføre inden for konteksten af ​​KEEPFILTERS. På grund af måden AVERAGEX fungerer på, tager det det andet udtryk og udfører det inden for konteksten af ​​det første udtryk. 

Hvad er så problemet?

Alt i alt fungerer det okay, men ikke for nogen, der er nye til DAX. Jeg tror, ​​at Microsoft virkelig savnede båden, da de skabte denne hurtige foranstaltning, fordi hurtige tiltag angiveligt er for folk, der er nye til DAX.

Hurtige mål er en god idé, som "Lad os skrive nogle almindelige mål med forskellige beregninger til dig, fordi du er ny i DAX, og du ikke ved alt, hvad der er at vide om DAX." Men hvorfor skulle de konstruere dem på så underlige, komplicerede måder? 

Hvordan er det meningen, at nogen, der er ny i DAX, skal tage et kig på dette og finde ud af, hvad der sker, når endda sandsynligvis DAX-professionelle klør sig lidt i hovedet over denne? 

Så for mig gik de glip af en gylden mulighed for at hjælpe folk med at lære DAX med deres hurtige foranstaltninger ved at insistere på, at de inkluderede CALCUATE og skulle springe gennem bøjler for at få CALCUATE derind. 

Den nemmere løsning

Brug af SUMMARIZE-funktionen

Som jeg har nævnt tidligere, er der en bedre og enklere måde at gøre det på.

Først skal du oprette en tabelvariabel ved hjælp af VAR_Table . Derefter bruger vi til at tage tabellen, opsummere den efter måned, oprette en værdi-kolonne og opsummere vores værdier.

Til sidst tager vi gennemsnittet af vores værdier ved hjælp af AVERAGEX- funktionen. 

Funktionen BEREGNET DAX: Problemer og løsninger

Denne kode er enklere og så meget mere logisk. Det inkluderer ikke CALCUATE, som du alligevel ikke behøver. 

Du kan støde på en blogartikel derude, der kritiserer SUMMARIZE. Bloggen siger, at den måde SUMMARIZE fungerer internt på er ret kompliceret.

Det antyder også, at du kan få dig selv i problemer i et specifikt tilfælde, men du vil aldrig løbe ind i det. Det ville kun ske, hvis din beregning involverer en meget kompleks beregning og en meget stor tabel. Først da vil SUMMARIZE give dig skæve resultater. 

Det er i hvert fald, hvad blogartiklen hævder. Og det er fint, hvis du gerne vil vige tilbage fra SUMMARIZE. Brug i så fald funktionen i stedet for.

Brug af GROUPBY-funktionen

Ingen har problemer med at bruge GROUPBY-funktionen, så lad os også lære at bruge den. Igen, opret en tabelvariabel ved hjælp af VAR_Table. Derefter GROUPBY måned og opretter en værdi-kolonne.

Dernæst anvender vi ved hjælp af CURRENTGROUP , som er sådan GROUPBY fungerer. Lad os summere vores værdi og igen tage AVERAGEX på tværs af det. 

Vores kode skulle se sådan ud.

Funktionen BEREGNET DAX: Problemer og løsninger

Sammenligning af resultaterne: SUMMARIZE vs GROUPBY vs CALCUATE DAX-funktioner

Lad os nu se, om de genveje, vi gjorde, gav de samme resultater. 

Som du kan se på billederne nedenfor, returnerer både SUMMARIZE mærket som Better Average Per Category og GROUPBY mærket som Better Average Per Category 2 de samme tal. 

Funktionen BEREGNET DAX: Problemer og løsninger

Begge vores formler returnerer 3,4K for Q1, 3,6K for Q2, 3,4K for Q3 og 3,5K for Q4. Og igen, de arbejder i en enkelt tabeldatamodel ved hjælp af Quarters til vores tabel.

De fungerer også i et stjerneskema, hvor vi bruger Quarters i vores datotabel. 

Funktionen BEREGNET DAX: Problemer og løsninger




Konklusion

Vi behøver ikke at tvinge os selv ind i en forskruet kontekstlogik bare for at få CALCULATE ind i vores formler. Bare brug simple standard DAX-funktioner, og du kan opnå de samme ting. 

Faktisk er der sandsynligvis i 80% – 90% af tilfældene absolut ingen grund til at besvære med at bruge CALCUATE til noget som helst. I stedet kan du bruge SUMMARIZE og GROUPBY funktionerne, som er enklere og mere logiske.

Hvis du vil udforske denne PBIX-fil, har jeg allerede udgivet den til Quick Measures Gallery og navngivet filen Better Average Per Category . Bare scroll hele vejen ned på siden for at finde PBIX-filen, som du kan downloade, og du leger med dig selv. 

Alt det bedste,

Greg Deckler


Oplev unik indsigt ved hjælp af LuckyTemplates TOPN-funktion

Oplev unik indsigt ved hjælp af LuckyTemplates TOPN-funktion

Denne blog indeholder LuckyTemplates TOPN DAX-funktionen, som giver dig mulighed for at få unik indsigt fra dine data, hvilket hjælper dig med at træffe bedre markedsføringsbeslutninger.

Datamodellering i LuckyTemplates ved hjælp af understøttende tabeller

Datamodellering i LuckyTemplates ved hjælp af understøttende tabeller

Lær nogle fantastiske analytiske teknikker, som vi kan gøre til datamodellering i LuckyTemplates ved hjælp af DAX-understøttende tabeller.

Avanceret DAX til LuckyTemplates: Implementering af rangeringslogik på tværs af unikke indsigter

Avanceret DAX til LuckyTemplates: Implementering af rangeringslogik på tværs af unikke indsigter

Her dykker vi ned i LuckyTemplates Advanced DAX og implementerer rangeringslogik for at få en meget unik indsigt. Jeg viser også måleforgrening i dette eksempel.

LuckyTemplates What-If-parameterfunktion

LuckyTemplates What-If-parameterfunktion

Denne blog introducerer den nye funktion i LuckyTemplates, What-If-analyseparameteren. Du vil se, hvordan det gør alt hurtigt og nemt til din scenarieanalyse.

Brug LuckyTemplates Mål forgrening for at kontrollere, om dine avancer udvides, efterhånden som omsætningen vokser

Brug LuckyTemplates Mål forgrening for at kontrollere, om dine avancer udvides, efterhånden som omsætningen vokser

Lær, hvordan du afgør, om din omsætningsvækst er god ved at kontrollere, om dine avancer er udvidet ved hjælp af LuckyTemplates, der måler forgrening.

LuckyTemplates-parametre via forespørgselseditor

LuckyTemplates-parametre via forespørgselseditor

Lær og forstå, hvordan du kan oprette og bruge LuckyTemplates Parameters, som er en kraftfuld funktion i Query Editor.

Rundt søjlediagram – en visualisering til dit dashboard

Rundt søjlediagram – en visualisering til dit dashboard

Denne vejledning vil diskutere om oprettelse af et rundt søjlediagram ved hjælp af Charticulator. Du lærer, hvordan du designer dem til din LuckyTemplates-rapport.

PowerApps funktioner og formler | En introduktion

PowerApps funktioner og formler | En introduktion

Lær, hvordan du bruger PowerApps-funktioner og -formler til at forbedre funktionaliteten og ændre adfærd i vores Power Apps-lærredsapp.

Pipe In R: Tilslutningsfunktioner med Dplyr

Pipe In R: Tilslutningsfunktioner med Dplyr

I denne øvelse lærer du, hvordan du kæder funktioner sammen ved hjælp af dplyr-røroperatoren i programmeringssproget R.

RANKX Deep Dive: A Lucky Templates DAX-funktion

RANKX Deep Dive: A Lucky Templates DAX-funktion

RANKX fra LuckyTemplates giver dig mulighed for at returnere rangeringen af ​​et specifikt tal i hver tabelrække, der udgør en del af en liste over tal.