Använda tidsinformationsfunktioner i DAX
DAX innehåller flera tidsinformationsfunktioner som gör det enkelt att ändra datumfilterkontexten. Du kan skriva många av dessa intelligensformler med hjälp av en CALCULATE
funktion som ändrar datumfilter, men det skulle skapa mer arbete.
Anteckning
Många tidsinformationsfunktioner i DAX används för beräkningar med standarddatumperioder, särskilt år, kvartal och månader. Om du arbetar med oregelbundna tidsperioder (t.ex. räkenskapsmånader som börjar mitt i kalendermånaden), eller om du behöver arbeta med veckor eller tidsperioder (timmar, minuter osv.), är DAX-tidsinformationsfunktionerna inte till hjälp. I stället måste du använda CALCULATE
funktionen och skicka in handgjorda datum- eller tidsfilter.
Krav på datumtabell
För att du ska kunna arbeta med tidsinformationsfunktionerna i DAX måste din modell innehålla minst en datumtabell. En datumtabell är en tabell som uppfyller följande krav:
- Den måste ha en kolumn med datatypen Datum (eller datum/tid). Det här är datumkolumnen.
- Datumkolumnen måste innehålla unika värden.
- Datumkolumnen får inte innehålla tomrum.
- Inga datum får saknas i datumkolumnen.
- Datumkolumnen måste omfatta hela år. Ett år är inte nödvändigtvis ett kalenderår (januari–december).
- Datumtabellen måste definieras som en datumtabell.
Mer information finns i avsnittet Skapa datumtabeller i Power BI Desktop.
Summeringar över tid
En grupp med DAX-tidsinformationsfunktioner beräknar summeringar över tid:
-
DATESYTD
– Returnerar en tabell med en kolumn som innehåller datum för hittills i år (YTD) i den aktuella filterkontexten. Den här gruppen innehållerDATESMTD
även DAX-funktionerna ochDATESQTD
för hittills i månaden (MTD) och hittills i kvartalet (QTD). Du kan skicka dessa funktioner som filter tillCALCULATE
DAX-funktionen. -
TOTALYTD
– Utvärderar ett uttryck för YTD i den aktuella filterkontexten. Motsvarande QTD- och MTD DAX-funktionerTOTALQTD
för ochTOTALMTD
ingår också. -
DATESBETWEEN
– Returnerar en tabell som innehåller en kolumn med datum som börjar med ett visst startdatum och fortsätter fram till ett visst slutdatum. -
DATESINPERIOD
– Returnerar en tabell som innehåller en kolumn med datum som börjar med ett visst startdatum och fortsätter under det angivna antalet intervall.
Anteckning
Även om funktionen TOTALYTD
är enkel att använda är du begränsad till att skicka ett filteruttryck. Om du behöver använda flera filteruttryck använder du CALCULATE
funktionen och skickar DATESYTD
sedan in funktionen som ett av filteruttrycken.
I följande exempel ska du skapa din första beräkning med tidsinformation, som ska använda funktionen TOTALYTD. Syntaxen ser ut så här:
TOTALYTD(<expression>, <dates>, [, <filter>][, <year_end_date>])
Funktionen kräver ett uttryck och, som alla tidsinformationsfunktioner, en referens till datumkolumnen i en definierad datumtabell. Alternativt kan ett enskilt filteruttryck eller årets sista datum användas (krävs endast om året inte slutar den 31 december).
Ladda ned och öppna filen Adventure Works DW 2020 M07.pbix. Lägg sedan till följande måttdefinition i tabellen Försäljning som beräknar intäkter hittills i år. Formatera måttet som valuta med två decimaler.
Revenue YTD =
TOTALYTD([Revenue], 'Date'[Date], "6-30")
Värdet för årets slutdatum "6-30"
representerar den 30 juni.
På sida 1 i rapporten lägger du till måttet Revenue YTD (Intäkt hittills i år) till matrisvisualiseringen. Som du ser returneras en summering av intäktsbeloppen från början av året fram till och med den filtrerade månaden.
Jämförelser över tid
En annan grupp med DAX-tidsinformationsfunktioner används för beräkningar med skiftande tidsperioder:
-
DATEADD
– Returnerar en tabell som innehåller en kolumn med datum, flyttad antingen framåt eller bakåt i tiden med det angivna antalet intervall från datumen i den aktuella filterkontexten. -
PARALLELPERIOD
– Returnerar en tabell som innehåller en kolumn med datum som representerar en period som är parallell med datumen i den angivna datumkolumnen, i den aktuella filterkontexten, där datumen har flyttats ett antal intervall framåt eller bakåt i tiden. -
SAMEPERIODLASTYEAR
– Returnerar en tabell som innehåller en kolumn med datum som flyttas ett år bakåt i tiden från datumen i den angivna datumkolumnen i den aktuella filterkontexten. - Många DAX-hjälpfunktioner för navigering framåt eller bakåt i specifika tidsperioder, som alla returnerar en tabell med datum. Dessa hjälpfunktioner omfattar
NEXTDAY
,NEXTMONTH
,NEXTQUARTER
,NEXTYEAR
ochPREVIOUSDAY
,PREVIOUSMONTH
,PREVIOUSQUARTER
ochPREVIOUSYEAR
.
Nu ska du lägga till ett mått i tabellen Försäljning som beräknar intäkter för föregående år med hjälp SAMEPERIODLASTYEAR
av funktionen . Formatera måttet som valuta med två decimaler.
Revenue PY =
VAR RevenuePriorYear = CALCULATE([Revenue], SAMEPERIODLASTYEAR('Date'[Date]))
RETURN
RevenuePriorYear
Lägg till måttet Revenue PY (Intäkt föregående år) i matrisvisualiseringen. Som du ser returneras resultat som liknar föregående års intäktsbelopp.
Därefter ändrar du måttet genom att byta namn på det till Intäkt från år till år i % och sedan uppdatera RETURN
satsen för att beräkna ändringsförhållandet. Glöm inte att ändra formatet till ett procentvärde med två decimaler.
Revenue YoY % =
VAR RevenuePriorYear = CALCULATE([Revenue], SAMEPERIODLASTYEAR('Date'[Date]))
RETURN
DIVIDE(
[Revenue] - RevenuePriorYear,
RevenuePriorYear
)
Som du ser returnerar måttet Revenue YoY % en förändringsfaktor baserat på föregående års månadsintäkt. Exempelvis har intäkterna i juli 2018 ökat med 106,53 % jämfört med det föregående årets månadsintäkter, medan intäkterna i november 2018 har minskat med 24,22 % jämfört med det föregående årets månadsintäkter.
Anteckning
Måttet Revenue YoY % (Intäkt från år till år i %) är ett bra exempel på hur DAX-variabler kan användas. Måttet gör det enklare att läsa formeln och gör att du kan enhetstesta delar av måttlogiken (genom att returnera RevenuePriorYear-variabelvärdet). Dessutom är måttet en optimal formel eftersom den inte behöver hämta föregående års intäktsvärde två gånger. När satsen har lagrat den en gång i en variabel använder den RETURN
till variabelvärdet två gånger.