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å.


DAX Studio EVALUATE Nøkkelord: Grunnleggende eksempler

DAX Studio EVALUATE Nøkkelord: Grunnleggende eksempler

Lær å bruke DAX Studio EVALUATE nøkkelordet med grunnleggende eksempler og få en bedre forståelse av hvordan dette kan hjelpe deg med databehandling.

Opprette en datotabell i LuckyTemplates

Opprette en datotabell i LuckyTemplates

Finn ut hvorfor det er viktig å ha en dedikert datotabell i LuckyTemplates, og lær den raskeste og mest effektive måten å gjøre det på.

LuckyTemplates Mobile Reporting Tips og teknikker

LuckyTemplates Mobile Reporting Tips og teknikker

Denne korte opplæringen fremhever LuckyTemplates mobilrapporteringsfunksjon. Jeg skal vise deg hvordan du kan utvikle rapporter effektivt for mobil.

Profesjonelle tjenesteanalyserapporter i LuckyTemplates

Profesjonelle tjenesteanalyserapporter i LuckyTemplates

I denne LuckyTemplates-utstillingen vil vi gå gjennom rapporter som viser profesjonell tjenesteanalyse fra et firma som har flere kontrakter og kundeengasjementer.

Microsoft Power Platform-oppdateringer | Microsoft Ignite 2021

Microsoft Power Platform-oppdateringer | Microsoft Ignite 2021

Gå gjennom de viktigste oppdateringene for Power Apps og Power Automate og deres fordeler og implikasjoner for Microsoft Power Platform.

Vanlige SQL-funksjoner: en oversikt

Vanlige SQL-funksjoner: en oversikt

Oppdag noen vanlige SQL-funksjoner som vi kan bruke som streng, dato og noen avanserte funksjoner for å behandle eller manipulere data.

LuckyTemplates Template Creation: Guide og tips

LuckyTemplates Template Creation: Guide og tips

I denne opplæringen lærer du hvordan du lager din perfekte LuckyTemplates-mal som er konfigurert til dine behov og preferanser.

Feltparametre og små multipler i LuckyTemplates

Feltparametre og små multipler i LuckyTemplates

I denne bloggen vil vi demonstrere hvordan du legger feltparametere sammen med små multipler for å skape utrolig nyttig innsikt og grafikk.

LuckyTemplates-rangering og tilpasset gruppering

LuckyTemplates-rangering og tilpasset gruppering

I denne bloggen vil du lære hvordan du bruker LuckyTemplates rangering og tilpassede grupperingsfunksjoner for å segmentere et eksempeldata og rangere det i henhold til kriterier.

Viser kun kumulativ total opp til en bestemt dato i LuckyTemplates

Viser kun kumulativ total opp til en bestemt dato i LuckyTemplates

I denne opplæringen skal jeg dekke en spesifikk teknikk rundt hvordan du viser kumulativ total kun opp til en bestemt dato i grafikken i LuckyTemplates.