Hvad er Power Query & M Language: En detaljeret oversigt
Denne vejledning giver et overblik over Power Query Editor og M-sproget inde på LuckyTemplates-skrivebordet.
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.
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 .
Så har vi en udstikker til dato og kundenavn .
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.
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.
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 .
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.
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.
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.
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.
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.
Og så skal vi hente datoen fra RemoveZeroes-variablen . For at gøre dette kan vi oprette en anden variabel og navngive den KeepOnlyDates .
Jeg kan bruge til at slippe af med de duplikerede datoer, der bliver returneret af .
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 .
Så vil vi bruge over de sidste tre datoer i datokolonnen, og derefter bruge et skillemåler.
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.
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.
Vi vil opsummere indtægtskolonnen, som vi har oprettet i den tabel. Lad os returnere SUMX over DatesInLast3Dates, og opsummere derefter indtægtskolonnen.
Med denne beregning får vi kun én enkelt værdi for hver række, fordi vi har fjernet Jobkategorien fra filterkonteksten.
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.
Når vi trykker på Enter , kan du se, at vi får det samme resultat, som vi havde i begyndelsen.
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.
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.
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 .
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.
Når jeg først har bragt det til matrixen, kan du se, at vi returnerer den samme samlede værdi for hver celle.
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.
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.
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.
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.
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.
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.
Denne vejledning giver et overblik over Power Query Editor og M-sproget inde på LuckyTemplates-skrivebordet.
Lær, hvordan du opretter en sideinddelt rapport, tilføjer tekster og billeder og derefter eksporterer din rapport til forskellige dokumentformater.
Lær, hvordan du bruger SharePoint-automatiseringsfunktionen til at skabe arbejdsgange og hjælpe dig med at mikrostyre SharePoint-brugere, -biblioteker og -lister.
Udvid dine rapportudviklingsevner ved at deltage i en dataanalyseudfordring. Acceleratoren kan hjælpe dig med at blive LuckyTemplates-superbruger!
Lær, hvordan du beregner løbende totaler i LuckyTemplates ved hjælp af DAX. Løbende totaler giver dig mulighed for ikke at blive fanget af et individuelt resultat.
Forstå konceptet med variabler i DAX i LuckyTemplates og betydningen af variabler for, hvordan dine mål beregnes.
Lær mere om det brugerdefinerede visuelle kaldet LuckyTemplates Slope-diagrammet, som bruges til at vise stigning/fald for en enkelt eller flere metrics.
Opdag farvetemaerne i LuckyTemplates. Disse er afgørende for, at dine rapporter og visualiseringer kan se ud og fungere problemfrit.
Beregning af et gennemsnit i LuckyTemplates kan gøres på mange måder for at give dig præcise oplysninger til dine virksomhedsrapporter.
Lad os dykke ned i Standard LuckyTemplates-temaer og gennemgå nogle af de funktioner, der er indbygget i selve LuckyTemplates Desktop-applikationen.