Vad är Power Query & M Language: En detaljerad översikt
Denna handledning ger en översikt över Power Query Editor och M-språket på LuckyTemplates-skrivbordet.
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.
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 .
Sedan har vi en skivare för datum och kundnamn .
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.
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.
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 .
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.
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.
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.
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.
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.
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 .
Jag kan använda för att bli av med de dubbletter av datum som returneras av .
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 .
Sedan kommer vi att använda de tre senaste datumen i datumkolumnen och sedan använda en avgränsare.
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.
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.
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.
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.
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.
När vi väl trycker på Enter kan du se att vi får samma resultat som vi hade i början.
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.
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.
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 .
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.
När jag väl tar med det till matrisen kan du se att vi returnerar samma totala värde för varje cell.
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.
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.
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.
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.
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.
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.
Denna handledning ger en översikt över Power Query Editor och M-språket på LuckyTemplates-skrivbordet.
Lär dig hur du skapar en sidnumrerad rapport, lägger till texter och bilder och sedan exporterar din rapport till olika dokumentformat.
Lär dig hur du använder SharePoint-automatiseringsfunktionen för att skapa arbetsflöden och hjälpa dig att mikrohantera SharePoint-användare, bibliotek och listor.
Finslipa dina färdigheter i rapportutveckling genom att gå med i en dataanalysutmaning. Acceleratorn kan hjälpa dig att bli en LuckyTemplates superanvändare!
Lär dig hur du beräknar löpande summor i LuckyTemplates med DAX. Löpande summor låter dig inte fastna i ett individuellt resultat.
Förstå konceptet med variabler i DAX inom LuckyTemplates och konsekvenserna av variabler för hur dina mått beräknas.
Lär dig mer om den anpassade visual som kallas LuckyTemplates Slope-diagram, som används för att visa ökning/minskning för en enstaka eller flera mätvärden.
Upptäck färgteman i LuckyTemplates. Dessa är viktiga för att dina rapporter och visualiseringar ska se ut och fungera sömlöst.
Att beräkna ett genomsnitt i LuckyTemplates kan göras på många sätt för att ge dig exakt information för dina affärsrapporter.
Låt oss fördjupa oss i Standard LuckyTemplates-teman och granska några av funktionerna som är inbyggda i själva LuckyTemplates Desktop-applikationen.