Hva er Power Query & M Language: En detaljert oversikt
Denne opplæringen gir en oversikt over Power Query Editor og M-språket på LuckyTemplates-skrivebordet.
I dette blogginnlegget skal vi ta en titt på et spørsmål som ble stilt på LuckyTemplates-forumet og bruke en DAX-språklig LuckyTemplates-teknikk for å løse det. I tilfelle du vil følge med og laste ned filene, besøk LuckyTemplates-forumet og gå til . Du kan se hele videoen av denne opplæringen nederst på denne bloggen.
For å forklare scenariet som vi skal dekke, har vi en enkel tabell som eksempel. I den første kolonnen har vi Økonominivå 1 . I den andre kolonnen har vi en dato som heter Fullført. I den siste kolonnen har vi kombinasjonen av økonominivå og fullført dato, som vi vil gi navnet Inntekt .
Så har vi en slicer for dato og kundenavn .
Det vi ønsker å gjøre for en bestemt tidsperiode er å identifisere de tre beste datoene som ikke er null. Og så i de tre beste datoene ønsker vi å identifisere det økonomiske nivået.
I den første versjonen av tiltaket listet jeg opp datoene som er mindre enn 29.4.2021 der vi har noen inntekter.
Og på disse datoene ønsker vi å identifisere de økonomiske nivåene som har gitt noen inntekter. Jeg vil forklare deg hvordan vi kan oppnå den beregningen.
Innholdsfortegnelse
Datamodellering
Før du skriver selve DAX, la oss ta en rask titt på datamodellen som inneholder flere tabeller. Vi er kun interessert i datotabellen , datatabellen , jobbkategoritabellen og kundetabellen .
Vær oppmerksom på at kundetabellen egentlig ikke er viktig fordi den bare brukes inne i en slicer.
Inntektsmålet blir beregnet i datatabellen. Jobbkategorien inneholder det økonomiske nivået som vi har på matrisen. Da bruker vi Dato-kolonnen fra Dato-tabellen i sliceren vår.
Versjon 1
La oss kvitte oss med alt fra matrisen og starte fra bunnen av. Jeg skal lage et nytt mål og kalle det V1 fordi dette kommer til å bli versjon én. Vi skal også ta en titt på to andre varianter.
Forbereder filterkonteksten
Det første vi skal gjøre er å hente alle verdiene til det økonomiske nivået fra filterkonteksten. Vi oppretter en og gir den navnet FinancialLevelInFilterContext .
For å hente verdiene fra filterkonteksten, skal vi bruke tabellen på jobbkategorien som inneholder kolonnen finansnivå. Deretter må vi lage en annen variabel og gi den navnet Resultat . Så skriv , og lukk den også.
I det første argumentet har vi et utvalg over datokutteren. I disse datoene ønsker vi å identifisere datoene som ikke har en 0 og har minst en viss inntekt.
Hvis du vil ha tilgang til alle datoene som er valgt i den sliceren, må vi bruke tabellen over dato.
Og siden vi har det økonomiske nivået på matrisen, må vi også sørge for at vi fjerner den spesielle verdien fra filterkonteksten. Vi kan bruke kategorien over jobb og deretter skrive finansnivå 1.
Nå som vår filterkontekst er forberedt, kan vi skrive den innerste beregningen for CALCUATE. Først deklarerer vi en variabel, som vil være en kombinasjon av finansnivå og datokolonnen som vi har sett i den første tabellen.
Deretter bruker vi og datatabellen til å oppsummere disse to tabellene: Jobbkategori og Datotabell.
Dette vil gi kombinasjonen av det økonomiske nivået og datokolonnen som finnes i datatabellen. Deretter skal vi lage en annen variabel der vi lagrer verdien av inntektsraden for den første variabelen vi har laget.
Navnet på denne variabelen vil være FinancialLevelAndDatesWithRevenue . Koden til denne variabelen vil være over den forrige variabelen. Deretter vil vi lage en virtuell kolonne som vil være Inntekt for å starte kontekstovergangen. Så for hver rad i denne variabelen har vi tildelt inntektene.
Denne tabellen inneholder inntektene, som også har null. Vi må filtrere ut disse radene med null. For å gjøre dette kan vi lage en annen variabel og navngi den som RemoveZeroes .
Vi bruker den forrige variabelen, og sørg for at inntekten ikke er lik null. Den kan være større enn null eller mindre enn null, men bør ikke være strengt tatt lik null.
Og så skal vi hente datoen fra RemoveZeroes-variabelen . For å gjøre dette kan vi lage en annen variabel og gi den navnet KeepOnlyDates .
Jeg kan bruke for å bli kvitt duplikatdatoene som blir returnert av .
Deretter skal vi identifisere de tre beste datoene i synkende rekkefølge. Vi bruker en annen variabel og gir den navnet Last3Dates , og bruker deretter .
Deretter bruker vi de tre siste datoene i datokolonnen, og bruker deretter et delimeter.
La oss dra og slippe vårt nyopprettede mål inne i den matrisen. Resultatet vi får er 31/03/2021, 07/04/2021 og 02/04/2021. Dette betyr at tiltaket vårt fungerer.
La oss gå tilbake til redaktøren og bli kvitt RETURN CONCATENATEX-delen. For å hente de tre siste datoene, er det vi kan gjøre å sjekke hvilke rader fra RemoveZeroes -variabelen som faktisk er en del av de tre siste datoene.
Og for det vil vi lage en annen variabel DatesInLast3Dates , og bruke FILTER-funksjonen på RemoveZeroes . Dette kommer til å returnere en tabell som består av en jobbkategori og dato.
Vi vil oppsummere inntektskolonnen som vi har opprettet i den tabellen. La oss returnere SUMX over DatesInLast3Dates, og deretter oppsummere inntektskolonnen.
Med denne beregningen får vi kun én enkelt verdi for hver rad, fordi vi har fjernet kategorien Job fra filterkonteksten.
Vi bruker variabelen som vi har opprettet i starten for å sjekke om hver rad i DatesInLast3Dates -variabelen er tilgjengelig i filterkonteksten. Vi kan skrive en annen variabel og gi den navnet IsInFilterContext .
Dette vil filtrere datoene i DatesInLast3Dates- variabelen. Deretter vil jeg returnere SUMX over IsInFilter-konteksten og oppsummere inntektskolonnen.
Når vi trykker på Enter kan du se at vi får samme resultat som vi hadde i begynnelsen.
Bekrefte resultatet av beregningen av DAX Language LuckyTemplates
For å verifisere at vi faktisk får det riktige resultatet, kan vi lage en ny CALCULATE-tabell som vil hjelpe oss med å feilsøke, identifisere og verifisere at koden vi har skrevet så langt faktisk returnerer det riktige resultatet.
La oss lage en kopi av koden vi har skrevet så langt. Jeg skal ganske enkelt kopiere delen som er uthevet nedenfor, gå tilbake for å lage en ny tabell og lime inn den uthevede koden. Vi skal ikke gidde å navngi denne tabellen fordi den ikke er av interesse for oss.
Og vi kan ganske enkelt skrive RETURN DatesInLast3Dates . Hvis jeg klikker på Bekreft , får vi en tabell, men vi vet at den faktisk ikke returnerer riktig resultat ennå fordi vi faktisk trenger å etterligne oppførselen til sliceren.
Vi kan pakke den koden inn i en CALCUATETABLE og rykke inn alt. I den siste delen skal jeg skrive at datoen skal være større enn eller lik 2021-03-15 og at kundenavnet skal være lik DHL Supply Chain .
Tabellen som vi har laget inne i det målet gir praktisk talt det riktige resultatet. Vi kan bruke en CALCUATETABLE for å bekrefte den virtuelle tabellen du oppretter i beregningen.
Andre DAX Language LuckyTemplates-beregninger
Nå som vi vet at beregningen vår fungerer og forstår hva som faktisk skjer bak kulissene, kan vi se på andre metoder for å beregne det samme problemet. Først av alt, la oss lage et duplikat av tiltaket som vi allerede har opprettet.
Versjon 2
Denne gangen skal vi ikke stole på funksjonene VERDIER og FILTER, så vi blir kvitt dem. Vi fjerner returresultatet, i tillegg til den siste variabelen vi har opprettet i CALCUATE. Deretter konverterer vi CALCULATE til CALCULATETABLE.
Og i stedet for å returnere en skalarverdi, skal vi denne gangen returnere DatesInLast3Dates . Dette vil returnere den samme Kalkyletabellen som vi laget tidligere. Vi skal bruke CALCULATE-funksjonen, og i det første argumentet skal vi beregne inntektsmålet og injisere CALCULATETABLE som filterkontekst.
Når jeg tar det til matrisen, kan du se at vi returnerer den samme totalverdien for hver celle.
Bruke KEEPFILTERS-funksjonen
For øyeblikket vet vi at beregningen bak scenen fungerer som den skal, men hvordan kan vi vite sikkert at for hver celle rapporterer vi kun verdien for det økonomiske nivået?
Ved hjelp av CALCULATETABLE har vi laget en tabell som inneholder økonominivået, datokolonnen og inntektskolonnen. Vi kan bruke nøkkelfilterfunksjonen til å lage et skjæringspunkt mellom filterkonteksten som eksisterer utenfor CALCULATETABLE og den som blir opprettet av CALCULATETABLE.
Når vi klikker på Bekreft, kan vi se at vi rapporterer riktig verdi for hver celle, og at både versjon 1 og versjon 2 returnerer riktig verdi.
Så hvordan fungerer dette? Tabellen CALCULATE kommer til å returnere vedlikeholdsnivået , deretter Utleie , Service Ekstern og Reservedeler . Den kommer til å skape et skjæringspunkt mellom vedlikeholdet og den tabellen.
Utleie kommer til å lage den innledende filterkonteksten, så vil KALKULATABELL returnere alle verdiene i jobbkategorien. Da kommer det til å være et skjæringspunkt mellom Utleiet og bordet som returneres av KALKULATABELL. Vi kommer kun til å returnere tabellene eller radene for den utleiedelen.
Og så til slutt, når vi setter SUMMARIZE inn i filterkonteksten, kommer CALCUATE-funksjonen til å beregne inntektene kun for Rental. Den samme prosessen skjer for hver rad.
Versjon 3
La oss se på en annen måte å beregne den samme beregningen ved å bruke DAX-språklige LuckyTemplates. La oss lage en kopi av versjon 2-målet og lage et nytt mål. Vi skal navngi denne versjon 3.
Tanken bak denne beregningen er at siden vi beregner inntektene ved å bruke CALCUATE-funksjonen, trenger vi ikke å bruke ADDCOLUMNS-delen fordi vi dupliserer det samme i og utenfor CALCULATE. I stedet kan vi ganske enkelt skrive at inntekten ikke skal være lik 0.
Når jeg klikker på Bekreft, må vi sørge for at koden fungerer, så la oss dra målingen inne i matrisen.
Du kan se at koden faktisk returnerer samme verdi for hver celle.
Hvis jeg prøver å endre filterkonteksten ved å endre datoen i Dato-sliceren og velge et par verdier fra kundenavnet, kan du se at alle tre målene faktisk returnerer samme verdi for hver rad.
Konklusjon
I denne opplæringen lærte vi å bruke en kompleks logikk for å gå tilbake i tid fra sluttdatoen for å identifisere de tre beste datoene. Basert på denne DAX-språklige LuckyTemplates-teknikken, var vi i stand til å beregne inntektene og vise bare de verdiene som eksisterer i filterkonteksten. Det var alt for nå i denne opplæringen.
Denne opplæringen gir en oversikt over Power Query Editor og M-språket på LuckyTemplates-skrivebordet.
Lær hvordan du lager en paginert rapport, legger til tekster og bilder og deretter eksporterer rapporten til ulike dokumentformater.
Lær hvordan du bruker SharePoint-automatiseringsfunksjonen til å lage arbeidsflyter og hjelpe deg med å mikroadministrere SharePoint-brukere, -biblioteker og -lister.
Utvid rapportutviklingsferdighetene dine ved å bli med i en dataanalyseutfordring. Akseleratoren kan hjelpe deg å bli en LuckyTemplates-superbruker!
Lær hvordan du beregner løpende totaler i LuckyTemplates ved hjelp av DAX. Løpende totaler lar deg ikke bli fanget opp i et individuelt resultat.
Forstå konseptet med variabler i DAX i LuckyTemplates og implikasjonene av variabler for hvordan målene dine beregnes.
Lær mer om det tilpassede visuelle bildet kalt LuckyTemplates Slope-diagram, som brukes til å vise økning/reduksjon for en enkelt eller flere beregninger.
Oppdag fargetemaene i LuckyTemplates. Disse er avgjørende for at rapportene og visualiseringene dine skal se ut og fungere sømløst.
Å beregne et gjennomsnitt i LuckyTemplates kan gjøres på mange måter for å gi deg nøyaktig informasjon for bedriftsrapportene dine.
La oss fordype oss i Standard LuckyTemplates-tema, og gjennomgå noen av funksjonene som er innebygd i selve LuckyTemplates Desktop-applikasjonen.