DAX-sprog LuckyTemplates Tutorial på omvendt TOPN

I dette blogindlæg vil vi tage et kig på et spørgsmål, der blev stillet på LuckyTemplates forum og bruge en LuckyTemplates-teknik i DAX-sproget til at løse det. Hvis du vil følge med og downloade filerne, skal du blot besøge LuckyTemplates forum og gå til . Du kan se den fulde video af denne tutorial nederst på denne blog.

DAX-sprog LuckyTemplates Tutorial på omvendt TOPN

For at forklare det scenarie, vi skal dække, har vi en simpel tabel som eksempel. I den første kolonne har vi Økonominiveau 1 . I den anden kolonne har vi en dato, der hedder Fuldført. I den sidste kolonne har vi kombinationen af ​​økonominiveau og afsluttet dato, som vi vil navngive Omsætning .

DAX-sprog LuckyTemplates Tutorial på omvendt TOPN

Så har vi en udstikker til dato og kundenavn .

DAX-sprog LuckyTemplates Tutorial på omvendt TOPN

Det, vi ønsker at gøre i en bestemt tidsperiode, er at identificere de tre bedste datoer, der ikke er nul. Og så vil vi på de tre bedste datoer identificere det økonomiske niveau.

I den første version af foranstaltningen listede jeg de datoer, der er mindre end den 29/4/2021, hvor vi har en vis indtægt.

Og på disse datoer ønsker vi at identificere de økonomiske niveauer, der har givet nogle indtægter. Jeg vil forklare dig, hvordan vi kan opnå den beregning.

DAX-sprog LuckyTemplates Tutorial på omvendt TOPN

Indholdsfortegnelse

Datamodellering

Før du skriver den faktiske DAX, lad os tage et hurtigt kig på datamodellen, som indeholder flere tabeller. Vi er kun interesserede i datotabellen , datatabellen , jobkategoritabellen og kundetabellen .

Bemærk, at kundetabellen ikke er rigtig vigtig, fordi den kun bruges inde i en skæremaskine.

DAX-sprog LuckyTemplates Tutorial på omvendt TOPN

Indtægtsmålet bliver beregnet i datatabellen. Jobkategorien indeholder det økonomiske niveau, som vi har på matricen. Så bruger vi Dato-kolonnen fra Dato-tabellen i vores slicer.

Version 1

Lad os slippe af med alt fra matrixen og starte fra bunden. Jeg vil oprette en ny foranstaltning og kalde den V1, fordi dette bliver version 1. Vi vil også se på to andre varianter.

Forberedelse af filterkonteksten

Den første ting, vi skal gøre, er at hente alle værdierne af det økonomiske niveau fra filterkonteksten. Vi opretter en og navngiver den som FinancialLevelInFilterContext .

DAX-sprog LuckyTemplates Tutorial på omvendt TOPN

For at hente værdierne fra filterkonteksten skal vi bruge tabellen på Jobkategorien, der indeholder kolonnen finansniveau. Så skal vi oprette en anden variabel og navngive den Resultat . Så skriv , og luk den også.

I det første argument har vi et udvalg over datoudsnitteren. På disse datoer ønsker vi at identificere de datoer, der ikke har et 0 og i det mindste har en vis omsætning.

Hvis du vil have adgang til alle de datoer, der er valgt i den slicer, skal vi bruge tabellen over Dato.

DAX-sprog LuckyTemplates Tutorial på omvendt TOPN

Og da vi har det økonomiske niveau på matrixen, skal vi også sikre os, at vi fjerner den særlige værdi fra filterkonteksten. Vi kan bruge kategorien over Job og derefter skrive Økonominiveau 1.

DAX-sprog LuckyTemplates Tutorial på omvendt TOPN

Nu hvor vores filterkontekst er forberedt, kan vi skrive den inderste beregning for BEREGN. Først erklærer vi en variabel, som vil være en kombination af finansniveauet og datokolonnen, som vi har set i den første tabel.

Derefter vil vi bruge og bruge tabellen Data til at opsummere disse to tabeller: Jobkategori og Dato-tabellen.

DAX-sprog LuckyTemplates Tutorial på omvendt TOPN

Dette vil give kombinationen af ​​det økonomiske niveau og datokolonnen, der findes i datatabellen. Så skal vi oprette en anden variabel, hvor vi gemmer værdien af ​​indtægtsrækken for den første variabel, vi har oprettet.

Navnet på denne variabel vil være FinancialLevelAndDatesWithRevenue . Koden for denne variabel vil være over den forrige variabel. Derefter vil vi oprette en virtuel kolonne, der vil være Indtægt for at starte kontekstovergangen. Så for hver række af denne variabel har vi tildelt omsætningen.

DAX-sprog LuckyTemplates Tutorial på omvendt TOPN

Denne tabel indeholder omsætningen, som også har nul. Vi skal filtrere de rækker fra med nul. For at gøre dette kan vi oprette en anden variabel og navngive den som RemoveZeroes .

Vi bruger på den forrige variabel, og sørg derefter for, at omsætningen ikke er lig med nul. Den kan være større end nul eller mindre end nul, men bør ikke være strengt lig nul.

DAX-sprog LuckyTemplates Tutorial på omvendt TOPN

Og så skal vi hente datoen fra RemoveZeroes-variablen . For at gøre dette kan vi oprette en anden variabel og navngive den KeepOnlyDates .

DAX-sprog LuckyTemplates Tutorial på omvendt TOPN

Jeg kan bruge til at slippe af med de duplikerede datoer, der bliver returneret af .

DAX-sprog LuckyTemplates Tutorial på omvendt TOPN

Dernæst skal vi identificere de tre øverste datoer i faldende rækkefølge. Vi bruger en anden variabel og navngiver den Last3Dates , og bruger derefter .

DAX-sprog LuckyTemplates Tutorial på omvendt TOPN

Så vil vi bruge over de sidste tre datoer i datokolonnen, og derefter bruge et skillemåler.

DAX-sprog LuckyTemplates Tutorial på omvendt TOPN

Lad os trække og slippe vores nyoprettede mål inde i den matrix. Resultatet, vi får, er 31/03/2021, 07/04/2021 og 02/04/2021. Det betyder, at vores foranstaltning virker.

DAX-sprog LuckyTemplates Tutorial på omvendt TOPN

Lad os gå tilbage til editoren og slippe af med RETURN CONCATENATEX-delen. For at hente de sidste tre datoer, hvad vi kan gøre, er at kontrollere, hvilke rækker fra RemoveZeroes -variablen faktisk er en del af de sidste tre datoer.

Og til det, vil vi oprette en anden variabel DatesInLast3Dates og bruge FILTER-funktionen på RemoveZeroes . Dette vil returnere en tabel, der består af en jobkategori og en dato.

DAX-sprog LuckyTemplates Tutorial på omvendt TOPN

Vi vil opsummere indtægtskolonnen, som vi har oprettet i den tabel. Lad os returnere SUMX over DatesInLast3Dates, og opsummere derefter indtægtskolonnen.

DAX-sprog LuckyTemplates Tutorial på omvendt TOPN

Med denne beregning får vi kun én enkelt værdi for hver række, fordi vi har fjernet Jobkategorien fra filterkonteksten.

DAX-sprog LuckyTemplates Tutorial på omvendt TOPN

Vi bruger den variabel, vi har oprettet i starten, til at kontrollere, om hver række af DatesInLast3Dates -variablen er tilgængelig i filterkonteksten. Vi kan skrive en anden variabel og navngive den IsInFilterContext .

Dette vil filtrere datoerne i DatesInLast3Dates- variablen. Så vil jeg returnere SUMX over IsInFilter-konteksten og opsummere indtægtskolonnen.

DAX-sprog LuckyTemplates Tutorial på omvendt TOPN

Når vi trykker på Enter , kan du se, at vi får det samme resultat, som vi havde i begyndelsen.

DAX-sprog LuckyTemplates Tutorial på omvendt TOPN

Bekræftelse af resultatet af beregningen af ​​DAX Language Lucky Templates

For at verificere, at vi rent faktisk får det korrekte resultat, kan vi oprette en ny CALCULATE-tabel, der vil hjælpe os med at fejlsøge, identificere og verificere, at den kode, vi har skrevet indtil videre, faktisk returnerer det korrekte resultat.

Lad os lave en kopi af koden, som vi har skrevet indtil videre. Jeg vil simpelthen kopiere den del, der er fremhævet nedenfor, gå tilbage for at oprette en ny tabel og indsætte den fremhævede kode. Vi har ikke tænkt os at gider at navngive dette bord, fordi det ikke er interessant for os.

DAX-sprog LuckyTemplates Tutorial på omvendt TOPN

Og vi kan simpelthen skrive RETURN DatesInLast3Dates . Hvis jeg klikker på Bekræft , får vi en tabel, men vi ved, at den faktisk ikke returnerer det korrekte resultat endnu, fordi vi faktisk skal efterligne udsnitsmaskinens opførsel.

DAX-sprog LuckyTemplates Tutorial på omvendt TOPN

Vi kan pakke den kode ind i en CALCUATETABLE og indrykke alt. I den sidste del vil jeg skrive, at datoen skal være større end eller lig med 2021-03-15, og at kundenavnet skal være lig med DHL Supply Chain .

DAX-sprog LuckyTemplates Tutorial på omvendt TOPN

Tabellen, som vi har lavet inde i det mål, returnerer stort set det korrekte resultat. Vi kan bruge en CALCULATETABLE til at verificere den virtuelle tabel, som du opretter i din beregning.

Andre DAX-sprog LuckyTemplates-beregninger

Nu hvor vi ved, at vores beregning virker og forstår, hvad der faktisk sker bag kulisserne, kan vi se på andre metoder til at beregne det samme problem. Først og fremmest, lad os oprette en duplikat af det mål, som vi allerede har oprettet.

Version 2

Denne gang vil vi ikke stole på funktionerne VÆRDIER og FILTER, så vi slipper af med dem. Vi fjerner returneringsresultatet samt den sidste variabel, som vi har oprettet inde i CALCULATE. Derefter konverterer vi CALCULATE til CALCULATETABLE.

Og i stedet for at returnere en skalarværdi, skal vi denne gang returnere DatesInLast3Dates . Dette vil returnere den samme CALCUATETABLE, som vi lavede tidligere. Vi skal bruge funktionen CALCULATE, og i det første argument skal vi beregne indtægtsmålet og injicere CALCULATETABLE som filterkontekst.

DAX-sprog LuckyTemplates Tutorial på omvendt TOPN

Når jeg først har bragt det til matrixen, kan du se, at vi returnerer den samme samlede værdi for hver celle.

DAX-sprog LuckyTemplates Tutorial på omvendt TOPN

Brug af KEEPFILTERS-funktionen

I øjeblikket ved vi, at regnestykket bagved fungerer korrekt, men hvordan kan vi med sikkerhed vide, at vi for hver celle kun rapporterer værdien for det økonomiske niveau?

Ved hjælp af CALCULATETABLE har vi lavet en tabel, der indeholder det økonomiske niveau, datokolonnen og indtægtskolonnen. Vi kan bruge nøglefilterfunktionen til at skabe et skæringspunkt mellem filterkonteksten, der eksisterer uden for CALCULATETABLE, og den, der oprettes af CALCULATETABLE.

DAX-sprog LuckyTemplates Tutorial på omvendt TOPN

Når vi klikker på Bekræft, kan vi se, at vi rapporterer den korrekte værdi for hver celle, og at både version 1 og version 2 returnerer den korrekte værdi.

DAX-sprog LuckyTemplates Tutorial på omvendt TOPN

Så hvordan virker dette? Tabellen CALCUATE returnerer vedligeholdelsesniveauet , derefter Leje , Service Ekstern og Reservedele . Det kommer til at skabe et skæringspunkt mellem vedligeholdelsen og det bord.

Udlejning vil skabe den indledende filterkontekst, derefter returnerer KALKULATTABELLEN alle værdierne i jobkategorien. Så vil der være et skæringspunkt mellem lejemålet og bordet returneret af BEREGNETABELLEN. Vi returnerer kun tabellerne eller rækkerne for den lejedel.

Og så endelig, når vi indsætter SUMMARIZE i filterkonteksten, beregner funktionen CALCUATE kun omsætningen for udlejning. Den samme proces sker for hver række.

Version 3

Lad os se på en anden måde at beregne den samme beregning ved hjælp af DAX-sproget LuckyTemplates. Lad os lave en kopi af Version 2-målet og oprette endnu et mål. Vi skal navngive denne version 3.

Ideen bag denne beregning er, at da vi beregner omsætningen ved hjælp af funktionen CALCULATE, behøver vi ikke bruge ADDCOLUMNS-delen, fordi vi dublerer det samme i og uden for CALCULATE. I stedet kan vi blot skrive, at omsætningen ikke skal være lig med 0.

DAX-sprog LuckyTemplates Tutorial på omvendt TOPN

Når jeg klikker på Bekræft, skal vi sikre os, at koden fungerer, så lad os trække målingen ind i matrixen.

Du kan se, at koden faktisk returnerer den samme værdi for hver celle.

DAX-sprog LuckyTemplates Tutorial på omvendt TOPN

Hvis jeg forsøger at ændre filterkonteksten ved at ændre datoen i Date slicer og vælge et par værdier fra Customer Name, kan du se, at alle tre mål faktisk returnerer den samme værdi for hver række.

DAX-sprog LuckyTemplates Tutorial på omvendt TOPN

Konklusion

I denne tutorial lærte vi, hvordan man bruger en kompleks logik med at gå tilbage i tiden fra slutdatoen til at identificere de tre bedste datoer. Baseret på denne DAX-sprog LuckyTemplates-teknik var vi i stand til at beregne omsætningen og kun vise de værdier, der findes i filterkonteksten. Det var alt for nu i denne tutorial.


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.

Udpakning af LuckyTemplates-temaer og -billeder fra PBIX

Udpakning af LuckyTemplates-temaer og -billeder fra PBIX

Lær, hvordan du adskiller en PBIX-fil for at udtrække LuckyTemplates-temaer og -billeder fra baggrunden og bruge den til at oprette din rapport!

Excel Formler Snydeark: Mellemvejledning

Excel Formler Snydeark: Mellemvejledning

Excel Formler Snydeark: Mellemvejledning

LuckyTemplates kalendertabel: Hvad er det, og hvordan man bruger det

LuckyTemplates kalendertabel: Hvad er det, og hvordan man bruger det

LuckyTemplates kalendertabel: Hvad er det, og hvordan man bruger det

Python i LuckyTemplates: Sådan installeres og konfigureres

Python i LuckyTemplates: Sådan installeres og konfigureres

Lær, hvordan du installerer programmeringssproget Python i LuckyTemplates, og hvordan du bruger dets værktøjer til at skrive koder og vise billeder.

Beregning af dynamiske fortjenestemargener – nem analyse af LuckyTemplates med DAX

Beregning af dynamiske fortjenestemargener – nem analyse af LuckyTemplates med DAX

Lær, hvordan du beregner dynamiske fortjenstmargener ved siden af ​​LuckyTemplates, og hvordan du kan få mere indsigt ved at grave dybere ned i resultaterne.

Sortering af datotabelkolonner i LuckyTemplates

Sortering af datotabelkolonner i LuckyTemplates

Lær, hvordan du sorterer felterne fra kolonner med udvidet datotabel korrekt. Dette er en god strategi at gøre for vanskelige felter.

Find dine topprodukter for hver region i LuckyTemplates ved hjælp af DAX

Find dine topprodukter for hver region i LuckyTemplates ved hjælp af DAX

I denne artikel gennemgår jeg, hvordan du kan finde dine topprodukter pr. region ved hjælp af DAX-beregninger i LuckyTemplates, herunder funktionerne TOPN og CALCUATE.

Junk Dimension: Hvad er det, og hvorfor det er alt andet end junk

Junk Dimension: Hvad er det, og hvorfor det er alt andet end junk

Lær, hvordan du bruger en uønsket dimension til flag med lav kardinalitet, som du ønsker at inkorporere i din datamodel på en effektiv måde.