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 undersøge min løsning på . Til denne udfordring besøgte vi LuckyTemplates' første ugens problem-udfordring, hvor vi skabte en evig feriekalender ud fra en blanding af specifikke og relative datoer. Men denne gang vil vi kun bruge Power Query . Du kan se den fulde video af denne tutorial nederst på denne blog.
Hvis du sidder fast på selve problemfordelingen, kan du se igen for at se, om der er elementer i nogen af tilgangene, der kan hjælpe dig med denne udfordring.
Mens jeg læste indlæggene, har jeg set en blanding af mennesker, der udnytter brugergrænsefladen og skriver tilpassede funktioner for at skabe en evigvarende kalender. Det har været sjovt at analysere hvert indlæg, og hvis du ønsker at blive inspireret, opfordrer jeg dig til at gøre det samme.
Da jeg selv arbejdede igennem dette scenarie, endte jeg med at skabe flere løsninger. Den, jeg gik med, illustrerer bedst, hvordan du ikke kun kan nedbryde et problem i mindre stykker , men også gøre dem synlige . Dette er meget nyttigt, hvis du støder på en fejl eller uventede resultater.
Indholdsfortegnelse
Udgangspunktet for at skabe en evigvarende kalender
Dette rå feriebord er vores udgangspunkt. For at sammensætte en dato har vi brug for et år, en måned og en dag til bestemte datoer. Det eneste, der mangler, er året.
Men for relative datoer er vi nødt til at gøre lidt mere arbejde. Til at begynde med skal vi opdele den dagkolonne i både tal og ugedag. Lad os gennemgå disse trin.
Henter årene fra datotabellen
For at gøre denne løsning dynamisk, vil jeg hente årene fra datotabellen . I formellinjen kan du se, at jeg har brugt en projektion til at få en enkelt kolonnetabel fra min datotabel. Dette vil selvfølgelig indeholde dubletter. For at fjerne dem har jeg tilføjet Table.Distinct .
Når jeg klikker ud til siden i det hvide felt ved siden af en af disse tabeller, vil du også se en liste med de forskellige årstal, der findes i min datotabelforespørgsel.
Vi fik et månedsnavn , men vi skal faktisk bruge et månedsnummer . Nu, når vi sammenkæder et år til et måneds navn, kan vi bruge Date.From- funktionen til at returnere den første i den måned som en datoværdi.
Ved at tilføje Date.Month , står vi tilbage med kun månedsnummeret for den specifikke dato. For januar returnerer den en 1. For februar returnerer den en 2, og så videre.
Hent tallet fra dagkolonnen
For at få tallet fra dagkolonnen besluttede vi ikke at opdele kolonnen og udtrække værdien i stedet. Som du kan se i formellinjen, brugte vi Text.BeforeDelimiter og brugte det mellemrum til at identificere højre og venstre del af tekststrengen.
Hvis der ikke er plads, vil vi gerne returnere det, der er tilbage i dagkolonnen. Så for den første post returnerer det et 1. For den anden post, der indeholder det mellemrum, returnerer det den første del af tekststrengen, ordet Third .
Vi vil bruge en lignende tilgang til at få datonavnet, men bruge funktionen List.PositionOf . Dette returnerer den nul-baserede forskydning af værdien i listen, der er sendt som første argument, og den returnerer -1, hvis værdien ikke vises på listen.
For den første post passerer den værdien 1, som ikke er til stede på vores liste. Det er derfor, det returnerer værdien af -1. For den anden post returnerer den værdien Monday .
Det overfører det til vores funktion og returnerer et 1, fordi det er det andet punkt på vores liste. Dernæst erstatter vi alle -1 værdier med et null .
På dette tidspunkt har vi oprettet alle de byggeklodser, vi skal bruge for at påberåbe den brugerdefinerede funktion.
Påberåber den brugerdefinerede funktion til den evige feriekalender
I formellinjen kan vi se, at funktionen tager fire argumenter: et år , en måned , et tal og en ugedag .
Men hvordan bestemmer det denne datoværdi? Vi bruger List.PositionOf igen for at få en numerisk værdi for tallet. Vi har en liste, der indeholder første, anden, tredje og fjerde. Når vi sender tallet til List.PositionOf , returnerer det den nul-baserede offset.
Igen, hvis en værdi ikke er til stede, returnerer den en -1. Så for den første post sender vi værdien 1. 1 er ikke til stede på denne liste, hvorfor den returnerer værdien -1. For den anden post sender vi værdien Third, som er det tredje element på vores liste. Dette returnerer værdien af 2.
Oprettelse af en liste over datoer
Lad os nu oprette en liste over datoer. Vi bestemmer startdatoen for den måned, bestemmer antallet af dage i den måned og bruger List.Dates til at oprette en liste, der indeholder alle dagene i den måned.
Dernæst vil vi bruge List.Select til kun at beholde de datoer, der er på en bestemt ugedag.
Når vi klikker ud til siden ved siden af en af disse lister, kan vi se, at den kun indeholder disse fire elementer.
Anvendelse af betinget logik
Til sidst vil vi anvende betinget logik til at konstruere eller hente en dato. Hvis ugedagen er null , hvilket indikerer, at vi har en bestemt dato, kan vi bruge den iboende #dato til at konstruere en datoværdi.
Hvis tallet er lig med sidst, kan vi bruge List.Reverse- funktionen til at vende rækkefølgen i listen og udtrække den første værdi.
Hvis vi ønsker at ændre denne stigende rækkefølge til faldende, kan vi altid udtrække den sidste dato fra dette datointerval. Det er lige meget, om vi har fire eller fem elementer på listen. Ved at vende rækkefølgen og udtrække den første vare har vi altid sidste dato.
Til alle de andre tilfælde bruger vi List.Skip .
Vi kan udtrække værdien baseret på denne position på listen. For Thanksgiving day er tallet fjerde, og fjerde returnerer en 3. Dette vil springe de første tre værdier over på listen og vil altid returnere det fjerde element.
Lad os samle det hele og gå til løsningsforespørgslen. For kildetrinnet kalder vi RAW-feriedatotabellen. Dernæst tilføjer vi en kolonne, der returnerer en liste med datoer.
Gennemgang af M-koden for den evige feriekalender
Lad os tjekke M-koden for kolonnen. For hver række i tabellen indlejrede vi en tabel, der indeholder de adskilte år fra datotabellen. Derefter transformerede vi værdierne i den pågældende årskolonne ved at kalde den tilpassede funktion.
For at kunne påberåbe den brugerdefinerede funktion, skal vi selvfølgelig lave nogle opsætninger først. Vi skal have månedsnummeret , talværdien og selvfølgelig ugedagen . Så fra den indlejrede tabel holdt vi listen med datoer.
Når vi klikker ud til siden i det hvide rum, kan vi se en forhåndsvisning af listen nedenfor.
Det næste trin er at udvide listen og tilføje CelebratedOnDate .
Dette er den logik, vi brugte i denne beregning: Hvis datoen er på en lørdag, så trækker vi en dag fra, så vi lander på en fredag. Hvis det er en søndag, så vil vi tilføje en dag for at lande på en mandag. Hvis det ikke er en lørdag eller søndag, så vil vi have et nul.
Til sidst er det sidste trin at ændre typerne.
Konklusion
Bare en hurtig påmindelse om deter en igangværende serie, der finder sted hver 1. og 3. onsdag på LuckyTemplates forum. Problemet opslået den 1. uge kræver en DAX-baseret løsning, mens 3. uges problem beder om en Power Query-baseret.
Hvis du kunne lide indholdet i denne POTW, bedes du abonnere på LuckyTemplates tv-kanal for mere. Vi har en enorm mængde indhold, der kommer ud hele tiden fra mig selv og en række indholdsskabere, alle dedikeret til at forbedre den måde, du bruger LuckyTemplates og Power Platform på.
Melissa
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.