Handledning för DAX Language LuckyTemplates på omvänd TOPN

I det här blogginlägget kommer vi att ta en titt på en fråga som ställdes på LuckyTemplates-forumet och använda en LuckyTemplates-teknik för DAX-språk för att lösa den. Om du vill följa med och ladda ner filerna, besök bara LuckyTemplates-forumet och gå till . Du kan se hela videon av denna handledning längst ner på den här bloggen.

Handledning för DAX Language LuckyTemplates på omvänd TOPN

För att förklara scenariot som vi ska täcka har vi en enkel tabell som exempel. I den första kolumnen har vi Ekonominivå 1 . I den andra kolumnen har vi ett datum som heter Slutfört. I den sista kolumnen har vi kombinationen av ekonomisk nivå och slutdatum, som vi kommer att döpa till Intäkt .

Handledning för DAX Language LuckyTemplates på omvänd TOPN

Sedan har vi en skivare för datum och kundnamn .

Handledning för DAX Language LuckyTemplates på omvänd TOPN

Vad vi vill göra under en viss tidsperiod är att identifiera de tre bästa datumen som inte är noll. Och sedan i de tre bästa datumen vill vi identifiera den ekonomiska nivån.

I den första versionen av åtgärden listade jag datumen som är mindre än 2021-04-29 där vi har vissa intäkter.

Och på dessa datum vill vi identifiera de finansiella nivåerna som har gjort vissa intäkter. Jag kommer att förklara för dig hur vi kan uppnå den beräkningen.

Handledning för DAX Language LuckyTemplates på omvänd TOPN

Innehållsförteckning

Datamodellering

Innan vi skriver själva DAX, låt oss ta en snabb titt på datamodellen som innehåller flera tabeller. Vi är bara intresserade av datumtabellen , datatabellen , jobbkategoritabellen och kundtabellen .

Observera att kundtabellen inte är riktigt viktig eftersom den bara används inuti en slicer.

Handledning för DAX Language LuckyTemplates på omvänd TOPN

Intäktsmåttet beräknas i datatabellen. Jobbkategorin innehåller den ekonomiska nivå som vi har på matrisen. Sedan använder vi kolumnen Datum från tabellen Datum i vår slicer.

Version 1

Låt oss bli av med allt från matrisen och börja om från början. Jag ska skapa ett nytt mått och kalla det V1 eftersom det här kommer att bli version ett. Vi kommer att ta en titt på två andra varianter också.

Förbereder filterkontexten

Det första vi ska göra är att hämta alla värden för den ekonomiska nivån från filterkontexten. Vi skapar en och namnger den som FinancialLevelInFilterContext .

Handledning för DAX Language LuckyTemplates på omvänd TOPN

För att hämta värdena från filterkontexten kommer vi att använda tabellen Jobbkategori som innehåller kolumnen för finansnivå. Sedan måste vi skapa en annan variabel och namnge den Resultat . Skriv sedan och stäng den också.

I det första argumentet har vi ett urval över datumskäraren. I dessa datum vill vi identifiera de datum som inte har en nolla och som har åtminstone en viss intäkt.

Om du vill komma åt alla datum som är valda i den slicern måste vi använda tabellen över datum.

Handledning för DAX Language LuckyTemplates på omvänd TOPN

Och eftersom vi har den ekonomiska nivån på matrisen måste vi också se till att vi tar bort just det värdet från filterkontexten. Vi kan använda kategorin över jobb och sedan skriva ekonomisk nivå 1.

Handledning för DAX Language LuckyTemplates på omvänd TOPN

Nu när vår filterkontext är förberedd kan vi skriva den innersta beräkningen för BERÄKNA. Först kommer vi att deklarera en variabel, som kommer att vara en kombination av finansiell nivå och datumkolumn som vi har sett i den första tabellen.

Sedan kommer vi att använda och använda tabellen Data för att sammanfatta dessa två tabeller: Arbetskategori och Datumtabell.

Handledning för DAX Language LuckyTemplates på omvänd TOPN

Detta ger kombinationen av den ekonomiska nivån och datumkolumnen som finns i datatabellen. Sedan ska vi skapa en annan variabel där vi kommer att lagra värdet på intäktsraden för den första variabeln som vi har skapat.

Namnet på denna variabel kommer att vara FinancialLevelAndDatesWithRevenue . Koden för denna variabel kommer att vara över den föregående variabeln. Sedan kommer vi att skapa en virtuell kolumn som blir Revenue för att initiera kontextövergången. Så för varje rad i denna variabel har vi tilldelat intäkterna.

Handledning för DAX Language LuckyTemplates på omvänd TOPN

Denna tabell innehåller intäkterna, som också har noll. Vi måste filtrera bort de raderna med noll. För att göra detta kan vi skapa en annan variabel och namnge den som RemoveZeroes .

Vi använder den föregående variabeln och ser sedan till att intäkterna inte blir lika med noll. Den kan vara större än noll eller mindre än noll, men bör inte vara strikt lika med noll.

Handledning för DAX Language LuckyTemplates på omvänd TOPN

Och sedan ska vi hämta datumet från RemoveZeroes-variabeln . För att göra detta kan vi skapa en annan variabel och namnge den KeepOnlyDates .

Handledning för DAX Language LuckyTemplates på omvänd TOPN

Jag kan använda för att bli av med de dubbletter av datum som returneras av .

Handledning för DAX Language LuckyTemplates på omvänd TOPN

Därefter kommer vi att identifiera de tre bästa datumen i fallande ordning. Vi kommer att använda en annan variabel och namnge den Last3Dates och sedan använda .

Handledning för DAX Language LuckyTemplates på omvänd TOPN

Sedan kommer vi att använda de tre senaste datumen i datumkolumnen och sedan använda en avgränsare.

Handledning för DAX Language LuckyTemplates på omvänd TOPN

Låt oss dra och släppa vårt nyskapade mått inuti den matrisen. Resultatet vi får är 31/03/2021, 07/04/2021 och 02/04/2021. Det betyder att vår åtgärd fungerar.

Handledning för DAX Language LuckyTemplates på omvänd TOPN

Låt oss gå tillbaka till editorn och bli av med RETURN CONCATENATEX-delen. För att hämta de tre senaste datumen, vad vi kan göra är att kontrollera vilka rader från RemoveZeroes -variabeln som faktiskt är en del av de tre senaste datumen.

Och för det skapar vi en annan variabel DatesInLast3Dates och använder funktionen FILTER på RemoveZeroes . Detta kommer att returnera en tabell som består av en jobbkategori och ett datum.

Handledning för DAX Language LuckyTemplates på omvänd TOPN

Vi kommer att summera intäktskolumnen som vi har skapat i den tabellen. Låt oss returnera SUMX över DatesInLast3Dates, och sedan sammanfatta intäktskolumnen.

Handledning för DAX Language LuckyTemplates på omvänd TOPN

Med denna beräkning får vi bara ett enda värde för varje rad, eftersom vi har tagit bort kategorin Jobb från filterkontexten.

Handledning för DAX Language LuckyTemplates på omvänd TOPN

Vi kommer att använda variabeln som vi skapade i början för att kontrollera om varje rad i DatesInLast3Dates -variabeln är tillgänglig i filterkontexten. Vi kan skriva en annan variabel och namnge den IsInFilterContext .

Detta kommer att filtrera datumen i variabeln DatesInLast3Dates . Sedan kommer jag att returnera SUMX över IsInFilter-kontexten och sammanfatta intäktskolumnen.

Handledning för DAX Language LuckyTemplates på omvänd TOPN

När vi väl trycker på Enter kan du se att vi får samma resultat som vi hade i början.

Handledning för DAX Language LuckyTemplates på omvänd TOPN

Verifiera resultatet av DAX Language Lucky Templates-beräkning

För att verifiera att vi faktiskt får rätt resultat kan vi skapa en ny CALCULATE-tabell som hjälper oss att felsöka, identifiera och verifiera att koden som vi har skrivit hittills faktiskt ger rätt resultat.

Låt oss skapa en kopia av koden som vi har skrivit hittills. Jag ska helt enkelt kopiera delen som är markerad nedan, gå tillbaka för att skapa en ny tabell och klistra in den markerade koden. Vi tänker inte bry oss om att namnge den här tabellen eftersom den inte är av intresse för oss.

Handledning för DAX Language LuckyTemplates på omvänd TOPN

Och vi kan helt enkelt skriva RETURN DatesInLast3Dates . Om jag klickar på Bekräfta får vi en tabell men vi vet att den faktiskt inte returnerar det korrekta resultatet ännu eftersom vi faktiskt behöver efterlikna skivarens beteende.

Handledning för DAX Language LuckyTemplates på omvänd TOPN

Vi kan slå in den koden i en Kalkyltabell och dra in allt. I den sista delen ska jag skriva att datumet ska vara större än eller lika med 2021-03-15 och att kundnamnet ska vara lika med DHL Supply Chain .

Handledning för DAX Language LuckyTemplates på omvänd TOPN

Tabellen som vi har skapat i det måttet ger praktiskt taget rätt resultat. Vi kan använda en Kalkyltabell för att verifiera den virtuella tabellen som du skapar i din beräkning.

Andra DAX-språk LuckyTemplates-beräkningar

Nu när vi vet att vår beräkning fungerar och förstår vad som faktiskt händer bakom kulisserna, kan vi titta på andra metoder för att beräkna samma problem. Först och främst, låt oss skapa en dubblett av måttet som vi redan har skapat.

Version 2

Den här gången kommer vi inte att förlita oss på funktionerna VÄRDEN och FILTER, så vi blir av med dem. Vi tar bort returresultatet, såväl som den senaste variabeln som vi har skapat i CALCULATE. Sedan konverterar vi CALCULATE till CALCULATETABLE.

Och istället för att returnera ett skalärt värde kommer vi den här gången att returnera DatesInLast3Dates . Detta kommer att returnera samma BERÄKNINGSTABELL som vi gjorde tidigare. Vi kommer att använda funktionen CALCULATE, och i det första argumentet kommer vi att beräkna intäktsmåttet och injicera CALCULATETABLE som filterkontext.

Handledning för DAX Language LuckyTemplates på omvänd TOPN

När jag väl tar med det till matrisen kan du se att vi returnerar samma totala värde för varje cell.

Handledning för DAX Language LuckyTemplates på omvänd TOPN

Använda KEEPFILTERS-funktionen

För tillfället vet vi att beräkningen bakom scenen fungerar korrekt, men hur kan vi säkert veta att vi för varje cell bara rapporterar värdet för den ekonomiska nivån?

Med hjälp av CALCULATETABLE har vi skapat en tabell som innehåller den ekonomiska nivån, datumkolumnen och intäktskolumnen. Vi kan använda nyckelfilterfunktionen för att skapa en skärningspunkt mellan filterkontexten som finns utanför CALCULATETABLE och den som skapas av CALCULATETABLE.

Handledning för DAX Language LuckyTemplates på omvänd TOPN

När vi klickar på Bekräfta kan vi se att vi rapporterar rätt värde för varje cell och att både version 1 och version 2 returnerar rätt värde.

Handledning för DAX Language LuckyTemplates på omvänd TOPN

Så hur fungerar detta? Tabellen BERÄKNA kommer att returnera underhållsnivån , sedan hyra , extern service och reservdelar . Det kommer att skapa en skärningspunkt mellan underhållet och den tabellen.

Uthyrning kommer att skapa den initiala filterkontexten, sedan kommer Kalkyltabellen att returnera alla värden för jobbkategorin. Sedan kommer det att bli en korsning mellan hyran och bordet som returneras av BERÄKNINGSTABELL. Vi kommer bara att returnera tabellerna eller raderna för den hyresdelen.

Och så slutligen, när vi injicerar SUMMARIZE i filterkontexten, kommer funktionen BERÄKNA att beräkna intäkterna endast för uthyrning. Samma process sker för varje rad.

Version 3

Låt oss titta på ett annat sätt att beräkna samma beräkning med DAX-språket LuckyTemplates. Låt oss skapa en kopia av version 2-måttet och skapa ett annat mått. Vi kommer att namnge denna version 3.

Tanken bakom denna beräkning är att eftersom vi beräknar intäkterna med funktionen CALCULATE, behöver vi inte använda ADDCOLUMNS-delen eftersom vi duplicerar samma sak i och utanför CALCULATE. Istället kan vi helt enkelt skriva att intäkterna inte ska vara lika med 0.

Handledning för DAX Language LuckyTemplates på omvänd TOPN

När jag klickar på Bekräfta måste vi se till att koden fungerar så låt oss dra måttet inuti matrisen.

Du kan se att koden faktiskt returnerar samma värde för varje cell.

Handledning för DAX Language LuckyTemplates på omvänd TOPN

Om jag försöker ändra filterkontexten genom att ändra datumet i Date slicer och välja ett par värden från Customer Name, kan du se att alla tre måtten faktiskt returnerar samma värde för varje rad.

Handledning för DAX Language LuckyTemplates på omvänd TOPN

Slutsats

I den här handledningen lärde vi oss hur man använder en komplex logik för att gå tillbaka i tiden från slutdatumet för att identifiera de tre bästa datumen. Baserat på denna DAX-språk LuckyTemplates-teknik kunde vi beräkna intäkterna och visa endast de värden som finns i filterkontexten. Det var allt för nu i denna handledning.


Pipe In R: Anslutningsfunktioner med Dplyr

Pipe In R: Anslutningsfunktioner med Dplyr

I den här handledningen kommer du att lära dig hur du kopplar ihop funktioner med hjälp av dplyr-röroperatorn i programmeringsspråket R.

RANKX Deep Dive: A Lucky Templates DAX-funktion

RANKX Deep Dive: A Lucky Templates DAX-funktion

RANKX från LuckyTemplates låter dig returnera rankningen av ett specifikt nummer i varje tabellrad som utgör en del av en lista med nummer.

Extrahera LuckyTemplates-teman och bilder från PBIX

Extrahera LuckyTemplates-teman och bilder från PBIX

Lär dig hur du tar isär en PBIX-fil för att extrahera LuckyTemplates-teman och bilder från bakgrunden och använda den för att skapa din rapport!

Excel Formler Fuskblad: Mellanvägledning

Excel Formler Fuskblad: Mellanvägledning

Excel Formler Fuskblad: Mellanvägledning

LuckyTemplates Kalendertabell: Vad är det och hur man använder det

LuckyTemplates Kalendertabell: Vad är det och hur man använder det

LuckyTemplates Kalendertabell: Vad är det och hur man använder det

Python i LuckyTemplates: Hur man installerar och ställer in

Python i LuckyTemplates: Hur man installerar och ställer in

Lär dig hur du installerar programmeringsspråket Python i LuckyTemplates och hur du använder dess verktyg för att skriva koder och visa bilder.

Beräkna dynamiska vinstmarginaler – enkel analys av LuckyTemplates med DAX

Beräkna dynamiska vinstmarginaler – enkel analys av LuckyTemplates med DAX

Lär dig hur du beräknar dynamiska vinstmarginaler vid sidan av LuckyTemplates och hur du kan få fler insikter genom att gräva djupare i resultaten.

Sortering av datumtabellkolumner i LuckyTemplates

Sortering av datumtabellkolumner i LuckyTemplates

Lär dig hur du sorterar fälten från en utökad datumtabells kolumner korrekt. Detta är en bra strategi att göra för svåra fält.

Hitta dina bästa produkter för varje region i LuckyTemplates med DAX

Hitta dina bästa produkter för varje region i LuckyTemplates med DAX

I den här artikeln går jag igenom hur du kan hitta dina toppprodukter per region med hjälp av DAX-beräkningar i LuckyTemplates, inklusive TOPN- och CALCULATE-funktionerna.

Skräpdimension: Vad är det och varför det är allt annat än skräp

Skräpdimension: Vad är det och varför det är allt annat än skräp

Lär dig hur du använder en skräpdimension för flaggor med låg kardinalitet som du vill infoga i din datamodell på ett effektivt sätt.