Tidsintelligens i DAX: Hur man dynamiskt väljer startperiod

I det här blogginlägget kommer vi att ta itu med några besvärliga problem med tidsintelligens, särskilt de problem som orsakas av veckas granularitet och de problem som kan orsakas av det oregelbundna antalet veckor på ett år. Vi kommer att använda offset för att komma fram till exakt tidsintelligens i DAX.

Vi har ett intressant scenario för dig idag. Detta kom upp ett par gånger nyligen i LuckyTemplates-forumet. Vad folk ville göra var att ta en bild (som kan vara ett linjediagram eller ett stapeldiagram) och variera det dynamiskt på startdatumet. Du kan se hela videon av denna handledning längst ner på den här bloggen.

Tidsintelligens i DAX: Hur man dynamiskt väljer startperiod

I det här fallet använde vi samma datauppsättning som vi arbetade för det genomsnittliga spotpriset per fat olja . Istället för att bara alltid börja från början i januari ville vi kunna klicka på det visuella, ändra det till ett annat startdatum, men alltid visa ett års data.

Innehållsförteckning

Exempelscenarier av tidsintelligens i DAX

Det finns ett antal anledningar till varför du kanske vill använda den här tekniken. Du kan använda detta om du har ett mått som ständigt justeras i termer av hur det beräknas. Du kanske bara vill visa data från perioden för omjusteringen framåt.

En annan anledning att använda detta är om du vill visualisera detta på ett animerat sätt. Detta kommer i princip att ta din data och visa den dynamiskt när du klickar på spelåtkomsten.

Tidsintelligens i DAX: Hur man dynamiskt väljer startperiod

I den här bilden kan vi ändra startdatumet månad för månad för att visa hur det förändras under en 12-månadersperiod över tid. Detta är en intressant och användbar bild för olika affärsfall, men teoretiskt sett representerar den också ett antal nyckelfrågor relaterade till DAX och datamodellering.

Låt oss gå till LuckyTemplates och titta på vår datamodell först. Detta är en riktigt enkel datamodell med en utökad datumtabell och en spotpristabell kopplad till datumen.

Tidsintelligens i DAX: Hur man dynamiskt väljer startperiod

Använda förskjutningar för tidsintelligens i DAX

En av de saker vi kommer att arbeta med är offset . Offseten i den utökade datumtabellen beräknas dynamiskt. Varje gång rapporten antingen uppdateras eller öppnas går den igenom M-koden. Till exempel i en månadsförskjutning tilldelar den den aktuella månaden med 0, föregående månad med -1 och två månader tillbaka med -2. Ser vi framåt i framtiden tilldelar den nästa månad +1 och för två månader i framtiden +2.

Det här är ett enkelt koncept men otroligt kraftfullt när du arbetar med tidsintelligens i DAX och arbetar med månader , kvartal och veckor . Om du inte använder en offset skapar det en hel del komplexitet ibland i dina beräkningar.

Att använda förskjutningar innebär att man använder en kontinuerlig serie av siffror där att gå tillbaka en månad alltid är -1 och framåt en månad alltid är +1 oavsett var på året man befinner sig.

Implementering av Rubber Duck-strategin för tidsintelligens i DAX

Tidigare har jag pratat om rubber ducking , som är att uttrycka din strategi högt innan du börjar skriva din DAX.

Tidsintelligens i DAX: Hur man dynamiskt väljer startperiod

Jag funderar högt på hur jag ska hantera detta utifrån ett månatligt sammanhang med hjälp av tidsintelligens i DAX. Jag skulle börja något baserat på det år och den valda månaden och välja de som använder en frånkopplad tabell, för om du tänker på det kommer vartannat val att innebära att år korsas (med undantag för januari).

Låt oss säga att vi vill ha 12 månader från mars, vi kommer att ha minst två månader under det efterföljande året. Om vi ​​använder en ansluten slicer kan vi bara filtrera för det året och kommer inte att kunna filtrera till nästa år.

Skörda förskjutningarna från startdatumet

Låt oss göra detta med en sammankopplad tabell för både månaden och året. Först måste vi skörda den första offset som handlar om startdatumet.

Och sedan vill vi flytta fram den offseten med 12 månader, och sedan bara titta på de datum som ligger inom den uppsättningen offset. Låt mig visa dig hur det ser ut i DAX.

Beräknar det månatliga intervallet

Detta är vårt mått för Inom Range Monthly , där vi väljer vårt år (som vi skördade från den frånkopplade årstabellen) och vår månad (som vi skördade från den frånkopplade månadstabellen).

Vi har också den här andra parametern där om det inte görs något val, kommer den som standard till januari. Denna parameter är i första hand endast för felsökningsändamål.

Tidsintelligens i DAX: Hur man dynamiskt väljer startperiod

Beräkna start- och slutmånadsförskjutningar

Låt oss titta på startmånadsoffset genom att beräkna MAX offset. Vi tar bort alla filter i datumtabellen och filtrerar ner till vald månad och valt år. För varje månad ska det bara finnas en förskjutning som motsvarar den månaden och året.

Tidsintelligens i DAX: Hur man dynamiskt väljer startperiod

Från den punkten kan vi ta slutmånadsoffset , som bara är startmånadsoffset + 11 månader.

Tidsintelligens i DAX: Hur man dynamiskt väljer startperiod

Och sedan tittar vi på varje valt datum och avgör om det faller inom den initiala månadskompensationen och slutmånadens offset. om den faller inom den perioden ger vi den en 1 och om inte, ger vi den en 0.

Tidsintelligens i DAX: Hur man dynamiskt väljer startperiod

Om vi ​​går tillbaka till månadsvyn i vår visual kan vi se inom räckviddsvisualen som vi har satt som lika med ett. Så det visar bara de månaderna inom start till slut offset. Om vi ​​till exempel klickar på februari ser vi februari till januari.

Tidsintelligens i DAX: Hur man dynamiskt väljer startperiod

Beräknar veckointervallet

Låt oss se hur det här ser ut ur veckosynpunkt. Det visuella börjar initialt okej och går från vecka 1 till vecka 52. Så långt har det gått bra.

Tidsintelligens i DAX: Hur man dynamiskt väljer startperiod

Men om vi klickar på de andra åren i årskivan kan vi se 52:a veckan medan vissa har en 53:e vecka, vilket ger en hel del problem. Du kan se från detta exempel att problemet börjar visa sig.

Vi har en startperiod år 2020 och vecka 15 , men slutperioden är år 2021 och vecka 13 istället för år 2021 och vecka 14 .

Tidsintelligens i DAX: Hur man dynamiskt väljer startperiod

Om vi ​​går tillbaka till vecka 1 kan vi se att det börjar okej, men slutar vid vecka 52. Om vi ​​tittar på vecka 53 beräkning här så är maxveckantalet för 2020 och 2021 53 veckor. Detta kommer inte att fungera för veckogranularitet.

Tidsintelligens i DAX: Hur man dynamiskt väljer startperiod

Låt oss se vad vi kan göra för att få det här att fungera. Vi måste fixa DAX-beräkningen här i den här delen:

Tidsintelligens i DAX: Hur man dynamiskt väljer startperiod

Detta beror på att i vissa fall är 51 korrekt när det bara är 52 veckor på ett år, men för året där det finns 53 veckor kommer det att avbryta den sista perioden. Detta är precis vad vi såg i den dynamiska visuella bilden i veckor, där beräkningen tog bort den sista perioden år 2020 och 2021.

För att åtgärda detta går vi till Within Range Weekly Wrong -måttet, som faktiskt ser enklare ut än det tidigare måttet. Vi hade ett startoffsetmått och beräknade max offset. Sedan tog vi bort filtret från datum och införde sedan filtret på vald vecka och valt år med antagandet att detta skulle leda till rätt offset.

Tidsintelligens i DAX: Hur man dynamiskt väljer startperiod

Men det här fungerar inte eftersom det inte spelar någon roll om du använder en maxoffset eller en min offset. Allt vi gör är att linda en aggregator så att vi inte lägger en naken kolumn i en CALCULATE-sats.

Men om vi går tillbaka hit till ISO WeekNumber kan vi se att ett år och ett veckonummer inte unikt bestämmer en veckoförskjutning under den första perioden.

Tidsintelligens i DAX: Hur man dynamiskt väljer startperiod

Jag kom på ett skottsäkert sätt att göra detta. Du kan använda MIN, men det är mer meningsfullt att skapa denna vecka 1 offsetmått . För att få vecka 1 offset, har vi att göra med vecka 2 eftersom den aldrig delas. Oavsett om det är 52 eller 53 veckor på året så förblir vecka 2 intakt.

Tidsintelligens i DAX: Hur man dynamiskt väljer startperiod

I den här beräkningen filtrerar vi ner till vecka 2 för att få offset. Och sedan när vi väl får den där vecka 2-offset, subtraherar vi bara en från den. Detta kommer otvetydigt att ge oss vecka 1 offset. Detta slutar med att lösa vårt problem.

Beräknar inom räckvidden varje vecka

Och sedan går vi tillbaka till vårt Inom Range Weekly- mått, och skriver en IF-sats där om skördenumret är för vecka 1, så beräknar vi vecka ett offset. Om det inte är vecka 1, beräknar vi bara startveckans offset som vi gjorde i föregående månadsberäkning.

Tidsintelligens i DAX: Hur man dynamiskt väljer startperiod

Och då blir slutveckans offset startveckans offset + max veckotalet som antingen kan vara 52 eller 53. Sedan subtraherar vi bara 1 för att inte dubbelräkna startoffset.

Tidsintelligens i DAX: Hur man dynamiskt väljer startperiod

Vi kan göra samma konstruktion som vi använde för månadsintervallet för att filtrera veckorna, där allt som faller mellan början och slutförskjutningen får en 1, och allt som inte får en 0.

Sedan ska vi placera måttet inom räckvidd veckovis i filterrutan. Allt checkar ut och ser helt rätt ut.

Tidsintelligens i DAX: Hur man dynamiskt väljer startperiod

Vi kan klicka på spelaxeln och köra veckans granularitet. Vi kan se att det fungerar korrekt precis som det gjorde i månadssammanhang.

Slutsats

Det här är en ganska djupdykning i tidsintelligens i DAX, där vi diskuterade hur vi kan lösa några av problemen kring veckonummer. Jag hoppas att du tyckte att den här handledningen var till hjälp och gav dig några ytterligare verktyg i din verktygslåda när du hanterar en problematisk veckosituation.

Om du gillade innehållet i denna handledning, glöm inte att prenumerera på LuckyTemplates TV-kanal. Vi har en enorm mängd innehåll som kommer ut hela tiden från mig själv och en rad innehållsskapare, alla dedikerade till att förbättra ditt sätt att använda LuckyTemplates och Power Platform.


Skapa en datumtabell i LuckyTemplates

Skapa en datumtabell i LuckyTemplates

Ta reda på varför det är viktigt att ha en dedikerad datumtabell i LuckyTemplates och lär dig det snabbaste och mest effektiva sättet att göra det.

LuckyTemplates mobilrapporteringstips och tekniker

LuckyTemplates mobilrapporteringstips och tekniker

Denna korta handledning belyser LuckyTemplates mobilrapporteringsfunktion. Jag ska visa dig hur du kan utveckla rapporter effektivt för mobila enheter.

Professional Service Analytics-rapporter i LuckyTemplates

Professional Service Analytics-rapporter i LuckyTemplates

I denna LuckyTemplates Showcase går vi igenom rapporter som visar professionell serviceanalys från ett företag som har flera kontrakt och kundengagemang.

Microsoft Power Platform-uppdateringar | Microsoft Ignite 2021

Microsoft Power Platform-uppdateringar | Microsoft Ignite 2021

Gå igenom de viktigaste uppdateringarna för Power Apps och Power Automate och deras fördelar och konsekvenser för Microsoft Power Platform.

Vanliga SQL-funktioner: En översikt

Vanliga SQL-funktioner: En översikt

Upptäck några vanliga SQL-funktioner som vi kan använda som sträng, datum och några avancerade funktioner för att bearbeta eller manipulera data.

LuckyTemplates Skapa mall: Guide och tips

LuckyTemplates Skapa mall: Guide och tips

I den här handledningen kommer du att lära dig hur du skapar din perfekta LuckyTemplates-mall som är konfigurerad efter dina behov och preferenser.

Fältparametrar och små multiplar i LuckyTemplates

Fältparametrar och små multiplar i LuckyTemplates

I den här bloggen kommer vi att visa hur man lager fältparametrar med små multiplar för att skapa otroligt användbara insikter och bilder.

LuckyTemplates Rank och anpassad gruppering

LuckyTemplates Rank och anpassad gruppering

I den här bloggen kommer du att lära dig hur du använder LuckyTemplates ranknings- och anpassade grupperingsfunktioner för att segmentera en exempeldata och rangordna den enligt kriterier.

Visar kumulativ total endast upp till ett visst datum i LuckyTemplates

Visar kumulativ total endast upp till ett visst datum i LuckyTemplates

I den här handledningen kommer jag att täcka en specifik teknik kring hur man visar Kumulativ total endast upp till ett specifikt datum i dina bilder i LuckyTemplates.

Punktdiagram: Avancerade anpassade bilder för LuckyTemplates

Punktdiagram: Avancerade anpassade bilder för LuckyTemplates

Lär dig hur du skapar och anpassar punktdiagram i LuckyTemplates, som huvudsakligen används för att mäta prestanda mot mål eller tidigare år.