Tidsinformasjon i DAX: Hvordan velge startperiode dynamisk

I dette blogginnlegget vil vi ta for oss noen plagsomme problemer med tidsintelligens, spesielt de problemene forårsaket av ukegranularitet og problemene som kan forårsakes av det uregelmessige antallet uker i et år. Vi vil bruke forskyvninger for å komme opp med nøyaktig tidsintelligens i DAX.

Vi har et interessant scenario for deg i dag. Dette kom opp et par ganger nylig i LuckyTemplates-forumet. Det folk ønsket å gjøre var å ta en visuell (som kan være en linjegraf eller et stolpediagram) og variere den dynamisk på startdatoen. Du kan se hele videoen av denne opplæringen nederst på denne bloggen.

Tidsinformasjon i DAX: Hvordan velge startperiode dynamisk

I dette tilfellet brukte vi det samme datasettet som vi jobbet for den gjennomsnittlige spotprisen per fat olje . I stedet for alltid å starte i begynnelsen av januar, ønsket vi å kunne klikke på det visuelle, endre det til en annen startdato, men alltid vise ett års data.

Innholdsfortegnelse

Eksempelscenarier av tidsintelligens i DAX

Det er flere grunner til at du kanskje vil gjøre denne teknikken. Du kan bruke dette hvis du har en beregning som stadig blir justert i forhold til hvordan den beregnes. Du vil kanskje bare vise dataene fra perioden med omjusteringen og fremover.

En annen grunn til å bruke dette er hvis du ønsker å visualisere dette på en animert måte. Dette vil i utgangspunktet ta dataene dine og vise dem dynamisk når du klikker på avspillingstilgangen.

Tidsinformasjon i DAX: Hvordan velge startperiode dynamisk

I denne visualiseringen kan vi endre startdatoen måned for måned for å vise hvordan den endres i en 12-måneders periode over tid. Dette er et interessant og nyttig bilde for ulike forretningscases, men teoretisk sett representerer det også en rekke sentrale problemstillinger knyttet til DAX og datamodellering.

La oss gå til LuckyTemplates og se på datamodellen vår først. Dette er en veldig enkel datamodell med en utvidet datotabell og en spotpristabell knyttet til datoene.

Tidsinformasjon i DAX: Hvordan velge startperiode dynamisk

Bruke forskyvninger for tidsinformasjon i DAX

En av tingene vi skal jobbe med er forskyvninger . Forskyvningene i den utvidede datotabellen beregnes dynamisk. Hver gang rapporten enten oppdateres eller åpnes, går den gjennom M-koden. For eksempel i en månedlig forskyvning, tildeler den gjeldende måned 0, forrige måned med -1, og to måneder tilbake med -2. Ser frem i fremtiden, tildeler den neste måned +1, og for to måneder i fremtiden +2.

Dette er et enkelt konsept, men utrolig kraftig når du arbeider med tidsintelligens i DAX og jobber med måneder , kvartaler og uker . Hvis du ikke bruker en offset, skaper det en del kompleksitet noen ganger i beregningene dine.

Å bruke forskyvninger betyr å bruke en kontinuerlig serie med tall der det å gå tilbake en måned alltid er -1 og en måned fremover alltid er +1 uavhengig av hvor i året du måtte være.

Implementering av Rubber Duck-strategien for tidsintelligens i DAX

Tidligere har jeg snakket om rubber ducking , som er å verbalisere strategien din høyt før du begynner å skrive DAX.

Tidsinformasjon i DAX: Hvordan velge startperiode dynamisk

Jeg tenker høyt på hvordan jeg skal håndtere dette fra en månedlig kontekst ved å bruke tidsintelligens i DAX. Jeg vil starte noe basert på året og måneden som er valgt, og velge de som bruker en frakoblet tabell, for hvis du tenker på det, vil hvert annet valg innebære kryssing av år (med unntak av januar).

La oss si at vi ønsker 12 måneder med start i mars, vi ender opp med minst to måneder i det påfølgende året. Hvis vi bruker en tilkoblet slicer, kan vi bare filtrere for det året og vil ikke kunne filtrere inn i neste år.

Høsting av forskyvninger fra startdatoen

La oss gjøre dette med en tilkoblet tabell for både måneden og året. Først må vi høste den første offset som omhandler startdatoen.

Og så ønsker vi å flytte den forskyvningen fremover med 12 måneder, og så bare se på datoene som er innenfor det settet med forskyvninger. La meg vise deg hvordan det ser ut i DAX.

Beregning av månedlig rekkevidde

Dette er vårt mål for Innenfor rekkevidde månedlig , der vi velger vårt år (som vi høstet fra den frakoblede årstabellen) og vår måned (som vi høstet fra den frakoblede månedstabellen).

Vi har også denne andre parameteren der hvis det ikke er gjort noe valg, vil den som standard være januar. Denne parameteren er først og fremst kun for feilsøkingsformål.

Tidsinformasjon i DAX: Hvordan velge startperiode dynamisk

Beregning av start- og sluttmånedsforskyvninger

La oss se på startmånedsforskyvningen ved å beregne MAX offset. Vi fjerner alle filtrene på datotabellen, og filtrerer ned til valgt måned og valgt år. For hver måned skal det kun være én forskyvning som tilsvarer den måneden og året.

Tidsinformasjon i DAX: Hvordan velge startperiode dynamisk

Fra det tidspunktet kan vi ta sluttmånedsforskyvningen , som bare er startmånedsforskyvningen + 11 måneder.

Tidsinformasjon i DAX: Hvordan velge startperiode dynamisk

Og så ser vi på hver valgte dato og bestemmer om den faller innenfor den første månedsforskyvningen og sluttmånedsforskyvningen. hvis den faller innenfor denne perioden, gir vi den en 1 og hvis ikke, gir vi den en 0.

Tidsinformasjon i DAX: Hvordan velge startperiode dynamisk

Hvis vi går tilbake til månedsvisningen i visualiseringen vår, kan vi se Visualiseringen innen rekkevidde som vi har satt som lik én. Så det viser bare de månedene innen start til slutt offset. Hvis vi for eksempel klikker på februar, ser vi februar til januar.

Tidsinformasjon i DAX: Hvordan velge startperiode dynamisk

Beregner ukeområdet

La oss se hvordan dette ser ut fra et ukentlig ståsted. Det visuelle starter i utgangspunktet greit og går fra uke 1 til uke 52. Så langt har det gått bra.

Tidsinformasjon i DAX: Hvordan velge startperiode dynamisk

Men hvis vi klikker på de andre årene i årskiveren, kan vi se 52. uke mens noen har en 53. uke, noe som byr på mange problemer. Du kan se fra dette eksemplet at problemet begynner å manifestere seg.

Vi har en startperiode for år 2020 og uke 15 , men sluttperioden er år 2021 og uke 13 i stedet for år 2021 og uke 14 .

Tidsinformasjon i DAX: Hvordan velge startperiode dynamisk

Går vi tilbake til uke 1 kan vi se at den starter greit, men slutter i uke 52. Ser vi på uke 53 beregning her er maks ukenummer for 2020 og 2021 53 uker. Dette kommer ikke til å fungere for ukentlig granularitet.

Tidsinformasjon i DAX: Hvordan velge startperiode dynamisk

La oss se hva vi kan gjøre for å få dette til å fungere. Vi må fikse DAX-beregningen her i denne delen:

Tidsinformasjon i DAX: Hvordan velge startperiode dynamisk

Dette er fordi for noen tilfeller er 51 riktig når det bare er 52 uker i et år, men for året der det er 53 uker, vil det forlate den siste perioden. Dette er nøyaktig hva vi så i den dynamiske visualiseringen i flere uker, der beregningen fjernet den siste perioden i årene 2020 og 2021.

For å fikse dette går vi til Within Range Weekly Wrong -målet, som faktisk ser enklere ut enn det tidligere målet. Vi hadde et startoffsetmål og regnet ut maks offset. Deretter fjernet vi filteret for datoer, og påførte deretter filteret på valgt uke og valgt år med antagelse om at dette ville føre til riktig forskyvning.

Tidsinformasjon i DAX: Hvordan velge startperiode dynamisk

Men dette fungerer ikke fordi det ikke spiller noen rolle om du bruker en maks offset eller en min offset. Alt vi gjør er å pakke en aggregator rundt slik at vi ikke legger en naken kolonne i en CALCUATE-setning.

Men hvis vi går tilbake hit til ISO WeekNumber , kan vi se at et år og et ukenummer ikke entydig bestemmer en ukentlig forskyvning i den første perioden.

Tidsinformasjon i DAX: Hvordan velge startperiode dynamisk

Jeg kom opp med en skuddsikker måte å gjøre dette på. Du kan bruke MIN, men det er mer fornuftig å lage dette Week1 Offset- målet. For å få uke 1 offset, har vi å gjøre med uke 2 fordi den aldri blir delt. Uavhengig av om det er 52 eller 53 uker i året, forblir uke 2 intakt.

Tidsinformasjon i DAX: Hvordan velge startperiode dynamisk

I dette regnestykket filtrerer vi ned til uke 2 for å få offset. Og så når vi får den uke 2-forskyvningen, trekker vi bare en fra den. Dette vil entydig gi oss uke 1 offset. Dette ender opp med å løse problemet vårt.

Beregner innen rekkevidde ukentlig

Og så går vi tilbake til vårt Innenfor rekkevidde Ukentlig mål, og skriver en IF-setning der hvis innhøstingstallet er for uke 1, beregner vi uke en offset. Hvis det ikke er uke 1, beregner vi bare startukeforskyvningen slik vi gjorde i forrige månedsberegning.

Tidsinformasjon i DAX: Hvordan velge startperiode dynamisk

Og så vil sluttukeforskyvningen være startukeforskyvningen + maks ukenummer som enten kan være 52 eller 53. Da trekker vi bare 1 for ikke å dobbelttelle startforskyvningen.

Tidsinformasjon i DAX: Hvordan velge startperiode dynamisk

Vi kan gjøre den samme konstruksjonen som vi brukte for det månedlige området for å filtrere ukene, der alt som faller mellom start- og sluttforskyvningen får 1, og alt som ikke får 0.

Deretter skal vi plassere innen rekkevidde ukentlig mål i filterruten. Alt sjekkes ut og ser helt riktig ut.

Tidsinformasjon i DAX: Hvordan velge startperiode dynamisk

Vi kan klikke på avspillingsaksen og kjøre uken granularitet. Vi kan se at det fungerer som det gjorde i månedssammenheng.

Konklusjon

Dette er et ganske dypt dykk i tidsintelligens i DAX, der vi diskuterte hvordan vi kan løse noen av problemene rundt ukenummer. Jeg håper du fant denne veiledningen nyttig og ga deg noen ekstra verktøy i verktøykassen når du har å gjøre med en problematisk ukesituasjon.

Hvis du likte innholdet som dekkes i denne spesielle opplæringen, ikke glem å abonnere på LuckyTemplates TV-kanal. Vi har en enorm mengde innhold som kommer ut hele tiden fra meg selv og en rekke innholdsskapere, alle dedikert til å forbedre måten du bruker LuckyTemplates og Power Platform på.


Pipe In R: Koblingsfunksjoner med Dplyr

Pipe In R: Koblingsfunksjoner med Dplyr

I denne opplæringen lærer du hvordan du kobler funksjoner sammen ved å bruke dplyr-røroperatøren i programmeringsspråket R.

RANKX Deep Dive: A LuckyTemplates DAX-funksjon

RANKX Deep Dive: A LuckyTemplates DAX-funksjon

RANKX fra LuckyTemplates lar deg returnere rangeringen til et spesifikt tall i hver tabellrad som utgjør en del av en liste med tall.

Trekker ut LuckyTemplates-temaer og bilder fra PBIX

Trekker ut LuckyTemplates-temaer og bilder fra PBIX

Lær hvordan du demonterer en PBIX-fil for å trekke ut LuckyTemplates-temaer og bilder fra bakgrunnen og bruke den til å lage rapporten din!

Excel Formulas Cheat Sheet: Mellomveiledning

Excel Formulas Cheat Sheet: Mellomveiledning

Excel Formulas Cheat Sheet: Mellomveiledning

LuckyTemplates-kalendertabell: Hva er det og hvordan du bruker det

LuckyTemplates-kalendertabell: Hva er det og hvordan du bruker det

LuckyTemplates-kalendertabell: Hva er det og hvordan du bruker det

Python i LuckyTemplates: Hvordan installere og sette opp

Python i LuckyTemplates: Hvordan installere og sette opp

Lær hvordan du installerer programmeringsspråket Python i LuckyTemplates og hvordan du bruker verktøyene til å skrive koder og vise visuelle elementer.

Beregning av dynamiske fortjenestemarginer – enkel analyse av LuckyTemplates med DAX

Beregning av dynamiske fortjenestemarginer – enkel analyse av LuckyTemplates med DAX

Lær hvordan du beregner dynamiske fortjenestemarginer ved siden av LuckyTemplates og hvordan du kan få mer innsikt ved å grave dypere inn i resultatene.

Sortering av datotabellkolonner i LuckyTemplates

Sortering av datotabellkolonner i LuckyTemplates

Lær hvordan du sorterer feltene fra kolonner med utvidet datotabell på riktig måte. Dette er en god strategi å gjøre for vanskelige felt.

Finn dine beste produkter for hver region i LuckyTemplates ved å bruke DAX

Finn dine beste produkter for hver region i LuckyTemplates ved å bruke DAX

I denne artikkelen går jeg gjennom hvordan du kan finne de beste produktene dine per region ved å bruke DAX-beregninger i LuckyTemplates, inkludert TOPN- og CALCUATE-funksjonene.

Søppeldimensjon: Hva er det og hvorfor det er alt annet enn søppel

Søppeldimensjon: Hva er det og hvorfor det er alt annet enn søppel

Lær hvordan du bruker en søppeldimensjon for flagg med lav kardinalitet som du ønsker å inkludere i datamodellen din på en effektiv måte.