DAX Weekly Calculations – LuckyTemplates Time Intelligence Issues

I dagens handledning kommer jag att ge några tekniker och tips om hur man hanterar vanliga problem som orsakas av DAX veckovisa granularitet i tidsintelligensberäkningar. Du kan se hela videon av denna handledning längst ner på den här bloggen.

Jag gjorde nyligen en handledning om att få värden för föregående vecka i LuckyTemplates. Sedan dess har jag fått flera frågor relaterade till tidsintelligens och särskilt relaterade till DAX veckovärden. Det är inte förvånande eftersom veckor verkligen är den sämst uppförda granulariteten inom tidsintelligenssfären.

När det gäller månader har du alltid 12 månader på ett år. När det gäller kvarter har du alltid fyra kvarter. Veckor är olika eftersom det är sju dagar på en vecka och 52 veckor på ett år – det är 364 dagar. Så, du har den där extra dagen där ute. Under skottår har du två extra dagar.

Så, det slutar faktiskt i vissa år, baserat på numreringsschemat för ISO-veckonummer, att ibland ha 52 veckor, ibland 53 veckor. Vecka 53 är den som kommer att orsaka flest problem.

Innehållsförteckning

Tidsintelligensfrågor i en DAX-veckoberäkning

I det här exemplet använder jag Total Spot Price. Med totaler är det lättare att visualisera och prata om.

DAX Weekly Calculations – LuckyTemplates Time Intelligence Issues

I det här fallet vill vi för vart och ett av åren visa en linje för vecka 53, oavsett om det fanns en vecka 53 det året eller inte. Så du kan se 2018 och 2019, det finns ingen vecka 53, men 2020 finns det. Vi vill ha det konsekvent så att den 53:e linjen skulle vara i varje år. Men då skulle måttet vara tomt för de år då det inte fanns ett 53:e år.

Ett av de vanligaste sätten vi gör det är att gå Visa objekt utan data och se till att den är påslagen. I det här fallet är det aktiverat, men det kommer inte att hjälpa eftersom det fungerar när du har en fysisk rad, men bara ingen data kopplad till den raden. I det här fallet har vi inte ens raden.

DAX Weekly Calculations – LuckyTemplates Time Intelligence Issues

Tekniker som att användaeller Ta bort filter kommer inte att fungera eftersom det inte finns något att ta bort. Filtret på den raden finns helt enkelt inte. Och så, frågan är hur vi infogar den raden i varje år som den inte existerar? Och då blir detta verkligen ett datamodelleringsproblem.

En av de saker vi potentiellt kan göra är att gå till ett snöflingaschema där vi filtrerar datumtabellen efter något som kommer att tvinga in den 53:e veckan i vår visuella bild varje år. Funktionen som hoppar till minnet för detta är.

DAX Weekly Calculations – LuckyTemplates Time Intelligence Issues

CROSSJOIN används för att matcha två fält som kan ha en relation eller inte. De behöver inte ha ett förhållande till skillnad från de flesta eller, eller andra tabellfunktioner.

I det här fallet tar CROSSJOIN två kolumner och skapar varje kombination av dessa två kolumner, oavsett om det finns i datamängden eller inte. Det är precis vad vi vill.

Vi måste skapa en tabell från kolumnen. CROSSJOIN tar två tabeller och sedan VÄRDEN på ISO-veckans nummer, och vi matchar dem bara. Det kommer att ge oss 53 veckor varje år.

Och sedan lägger vi till en tredje kolumn i tabellen. Vi skulle kunna göra detta i Power Query, men det är bara lättare att visa logiken i DAX. Vad vi gör här är att vi faktiskt tar och sammanfogar året med ett bindestreck och sedan veckonumret, så att vi har ett nyckelfält för att koppla det till datumtabellen.

DAX Weekly Calculations – LuckyTemplates Time Intelligence Issues

Men vi måste göra lite mer arbete här eftersom nyckelfältet fungerar i tabellen Datum är att det är ett fyrsiffrigt år bindestreck och sedan en tvåsiffrig vecka. Så i fall där ISO-veckans nummer är tvåsiffrigt kan vi bara göra den enkla sammanlänkningen. I de fall där det är en siffra måste vi ta årtalet och sedan sammanfoga det med ett bindestreck, sedan en inledande nolla och sedan veckonumret.

När vi väl har det kan vi ta den tabellen i datamodellen och hitta kolumnen Vecka & År. Sedan sammanfogar vi dem i ett en-till-många-förhållande. Jag gillar alltid att aktivera det här alternativet på Pin-relaterade fält till toppen av kortet så att vi kan se det direkt när vi kontrollerar det.

DAX Weekly Calculations – LuckyTemplates Time Intelligence Issues

Om vi ​​går tillbaka till det visuella, måste vi ändra raderna. Istället för år & veckonummer vill vi använda år & veckonummer från CROSSJOIN-tabellen. Och nu har vi den 53:e veckan i 2018 med en tom, och den 53:e veckan i 2019 med en tom. År 2020 har vi ett verkligt antal eftersom det har den 53:e veckan.

DAX Weekly Calculations – LuckyTemplates Time Intelligence Issues

Vi kunde sluta här, förutom det faktum att vi nu har flyttat ut från Star Schema-modellen. Varje gång du går bort från stjärnschemat i LuckyTemplates, rör du dig utanför sfären av vad som allmänt anses vara bästa praxis.

Och så, för Snowflake Schema, är det inte en stor överträdelse. Det finns fall där du kanske definitivt vill använda det, men om du kan undvika det, försök att göra det. Det minskar dubbelarbete, men inte nödvändigtvis storleken. Det låter dig använda raka räkningsmått, men det finns prestandaproblem och potentiella användbarhetsproblem, och definitivt ökar DAX-komplexiteten. Det hindrar dig från att bygga hierarkier över tabeller, och förmodligen det mest problematiska är att det verkligen kan förstöra din förmåga att synkronisera slicers över olika fält.

Så även om detta löser problemet, gör det det på ett sätt som inte är bra. Låt oss se om vi kan göra bättre än så här. Låt oss hoppa in i en annan datamodell. I den här modellen har jag tagit exakt samma data, datumen och spotpriset, men den här gången har jag tagit bort CROSSJOIN-tabellen. Det finns fortfarande, men det är inte kopplat.

DAX Weekly Calculations – LuckyTemplates Time Intelligence Issues

Men om vi tittar på DAX kommer vi att se att det är exakt samma DAX som skapade den tabellen i den andra rapporten. Så istället för att koppla ihop det i en fysisk relation, och sedan bryta mot stjärnschemat och omvandla det till ett snöflingaschema, kan vi underhålla stjärnschemat och bara använda en virtuell relation.

DAX Weekly Calculations – LuckyTemplates Time Intelligence Issues

För att göra det använder vi en funktion som heter. Det skapar den relationen mellan tabeller men gör det virtuellt. Vi gör det med hjälp av eftersom vi kommer att ändra sammanhanget. I det här fallet kommer sammanhanget att vara med avseende på relationen. Så, vi har vårt totala spotpris, och sedan har vi TREATAS. Vi måste förvandla den kolumnen till en tabell.

Och så har vi fältet År och vecka, som är nyckeln som vi skapade. Vi har förenat det på ett virtuellt sätt till Vecka & År i tabellen Datum. Så nu har vi den där Crossjoint-tabellen som filtrerar tabellen Datum på samma sätt som den gjorde när vi hade en fysisk relation, men utan att bryta mot stjärnschemat.

DAX Weekly Calculations – LuckyTemplates Time Intelligence Issues

Vi kan nu ta och släppa det totala spotpriset TREATAS i matrisen och vad vi ser är exakt samma summor. På detta sätt har vi gjort det utan att störa vår datamodell och ådra sig några av de nackdelar som vi pratade om i förhållande till Snowflake Schema.

DAX Weekly Calculations – LuckyTemplates Time Intelligence Issues




Slutsats

I den här handledningen har jag visat dig ett par sätt att ta itu med problemet med DAX-veckoberäkning i LuckyTemplates. En är genom att använda CROSSJOIN, men det har vissa nackdelar. Det andra sättet är att använda TREATAS, skapa en virtuell relation och inte bryta mot Star Schema-metoden.

Det är en teknik som är ganska användbar för att hantera problemet med vecka 53. Jag hoppas att du tyckte att det var användbart. Jag vill veta dina tankar om detta. Låt mig veta i kommentarerna nedan.

Med vänliga hälsningar,


Pipe In R: Anslutningsfunktioner med Dplyr

Pipe In R: Anslutningsfunktioner med Dplyr

I den här handledningen kommer du att lära dig hur du kopplar ihop funktioner med hjälp av dplyr-röroperatorn i programmeringsspråket R.

RANKX Deep Dive: A Lucky Templates DAX-funktion

RANKX Deep Dive: A Lucky Templates DAX-funktion

RANKX från LuckyTemplates låter dig returnera rankningen av ett specifikt nummer i varje tabellrad som utgör en del av en lista med nummer.

Extrahera LuckyTemplates-teman och bilder från PBIX

Extrahera LuckyTemplates-teman och bilder från PBIX

Lär dig hur du tar isär en PBIX-fil för att extrahera LuckyTemplates-teman och bilder från bakgrunden och använda den för att skapa din rapport!

Excel Formler Fuskblad: Mellanvägledning

Excel Formler Fuskblad: Mellanvägledning

Excel Formler Fuskblad: Mellanvägledning

LuckyTemplates Kalendertabell: Vad är det och hur man använder det

LuckyTemplates Kalendertabell: Vad är det och hur man använder det

LuckyTemplates Kalendertabell: Vad är det och hur man använder det

Python i LuckyTemplates: Hur man installerar och ställer in

Python i LuckyTemplates: Hur man installerar och ställer in

Lär dig hur du installerar programmeringsspråket Python i LuckyTemplates och hur du använder dess verktyg för att skriva koder och visa bilder.

Beräkna dynamiska vinstmarginaler – enkel analys av LuckyTemplates med DAX

Beräkna dynamiska vinstmarginaler – enkel analys av LuckyTemplates med DAX

Lär dig hur du beräknar dynamiska vinstmarginaler vid sidan av LuckyTemplates och hur du kan få fler insikter genom att gräva djupare i resultaten.

Sortering av datumtabellkolumner i LuckyTemplates

Sortering av datumtabellkolumner i LuckyTemplates

Lär dig hur du sorterar fälten från en utökad datumtabells kolumner korrekt. Detta är en bra strategi att göra för svåra fält.

Hitta dina bästa produkter för varje region i LuckyTemplates med DAX

Hitta dina bästa produkter för varje region i LuckyTemplates med DAX

I den här artikeln går jag igenom hur du kan hitta dina toppprodukter per region med hjälp av DAX-beräkningar i LuckyTemplates, inklusive TOPN- och CALCULATE-funktionerna.

Skräpdimension: Vad är det och varför det är allt annat än skräp

Skräpdimension: Vad är det och varför det är allt annat än skräp

Lär dig hur du använder en skräpdimension för flaggor med låg kardinalitet som du vill infoga i din datamodell på ett effektivt sätt.