Merk
Tilgang til denne siden krever autorisasjon. Du kan prøve å logge på eller endre kataloger.
Tilgang til denne siden krever autorisasjon. Du kan prøve å endre kataloger.
gjelder:
beregnet kolonne
beregnet tabell
måle
visualobjektberegning
Notat
Denne funksjonen frarådes for bruk i visuelle beregninger da den sannsynligvis returnerer meningsløse resultater.
For datokolonneinndata returnerer du en tabell som inneholder en kolonne med datoer som begynner med en angitt startdato og fortsetter for det angitte antallet og typen datointervaller.
For kalenderinndata returnerer du en tabell som begynner med en angitt startdato og fortsetter for det angitte antallet og typen datointervaller. Tabellen inneholder alle primære merkede kolonner og alle tidsrelaterte kolonner.
Denne funksjonen er egnet til å overføres som et filter til CALCULATE-funksjonen. Bruk det til å filtrere et uttrykk etter standard datointervaller, for eksempel dager, måneder, kvartaler eller år.
Syntaks
DATESINPERIOD(<dates> or <calendar>, <start_date>, <number_of_intervals>, <interval>[, <endbehavior>])
Parametere
| Vilkår | Definisjon |
|---|---|
dates or calendar |
En kolonne som inneholder datoer eller en kalenderreferanse |
start_date |
Et datouttrykk. Hvis kalendersyntaks brukes, kan du bruke samme datatype som primærkolonnen som er merket til Dag-kategorien. |
number_of_intervals |
Et heltall som angir antall intervaller som skal legges til, eller trekkes fra, datoene. |
interval |
Intervallet for å forskyve datoene. Verdien for intervallet kan være ett av følgende: DAY, , WEEKMONTH, QUARTERog YEAR. Uken kan bare brukes med kalenderen. |
endbehavior |
Gjelder bare når en kalenderreferanse er angitt. Valgfritt. Styrer hvordan sluttdatoen justeres når målintervallet er lengre enn kildeintervallet. Gyldige verdier er: PRESIS (standard) og ENDALIGNED. |
Returverdi
For inndata for datokolonne, en tabell som inneholder én kolonne med datoverdier.
For kalenderinndata, en tabell som inneholder alle primærkodede kolonner og alle tidsrelaterte kolonner.
Merknader
I det vanligste brukstilfellet er
datesen referanse til datokolonnen i en merket datotabell.Hvis tallet som er angitt for
number_of_intervalser positivt, flyttes datoer fremover i tid. Hvis tallet er negativt, flyttes datoer bakover i tid.Parameteren
intervaler en opplisting. Gyldige verdier erDAY,WEEK,MONTH,QUARTERogYEAR. Fordi det er en opplisting, sendes ikke verdier inn som strenger. Så ikke omslutte dem i anførselstegn.Når
endbehaviorer angitt (bare kalendertidsintelligens), DATESINPERIOD videresender verdien til DATEADD'sExtensionparameter. Se Forstå endbehavior for detaljerte eksempler.For datokolonneinndata kan den returnerte tabellen bare inneholde datoer som er lagret i
dateskolonnen. Så hvis for eksempel dendateskolonnen starter fra 1. juli 2017 og denstart_dateverdien er 1. juli 2016, starter den returnerte tabellen fra 1. juli 2017.Hvis inndatadatoen ikke finnes i den kodede dagkolonnen for kalenderinndata, blir resultatet ikke definert. Angi gyldige datoinndata.
Bruk samme datatype og format som den kodede dagkolonnen for startdatoen for kalenderinndata. Hvis kolonnen for eksempel bruker formatet YYYY-Sn-Qn-Mnn-Wnn-Dnn (f.eks. "2014-S2-Q4-M11-W45-D03"), må startdatoen følge samme format (for eksempel "2015-S2-Q4-M11-W45-D03"). Ellers er virkemåten udefinert.
-
Denne funksjonen støttes ikke for bruk i DirectQuery-modus når den brukes i beregnede kolonner eller regler for sikkerhet på radnivå (RLS).
Eksempel
Følgende Måldefinisjon for salg tabell bruker DATESINPERIOD-funksjonen til å beregne omsetning for foregående år (PY).
Legg merke til at formelen bruker MAX-funksjonen. Denne funksjonen returnerer den siste datoen som er i filterkonteksten. Så DATESINPERIOD-funksjonen returnerer en tabell med datoer som begynner fra den siste datoen for det siste året.
Eksempler i denne artikkelen kan brukes med eksempelmodellen Adventure Works DW 2020 Power BI Desktop. Hvis du vil ha modellen, kan du se DAX eksempelmodell.
Revenue PY =
CALCULATE (
SUM ( Sales[Sales Amount] ),
DATESINPERIOD ( 'Date'[Date], MAX ( 'Date'[Date] ), -1, YEAR )
)
Vurder at rapporten filtreres etter juni måned 2020. Funksjonen MAX returnerer 30. juni 2020. Funksjonen DATESINPERIOD returnerer deretter et datointervall fra 1. juli 2019 til 30. juni 2020. Det er et år med datoverdier fra og med 30. juni 2020 for det siste året.
Eksempel på kalenderbasert tidsintelligens
Følgende Måldefinisjon for salg tabell bruker DATESINPERIOD-funksjonen til å beregne omsetning for foregående år (PY).
Legg merke til at formelen bruker MAX-funksjonen. Denne funksjonen returnerer den siste datoen som er i filterkonteksten. DATESINPERIOD Så funksjonen returnerer primærkolonner fra siste dato for det siste året. DateKey brukes som et eksempel for å vise at «Dag»-kategorien kan merkes med en kolonne som ikke er datoskrevet.
Eksempler i denne artikkelen kan brukes med eksempelmodellen Adventure Works DW 2020 Power BI Desktop. Hvis du vil ha modellen, kan du se DAX eksempelmodell.
Revenue PY =
CALCULATE (
SUM ( Sales[Sales Amount] ),
DATESINPERIOD ( FiscalCalendar, MAX ( 'Date'[DateKey] ), -1, YEAR )
)
Vurder at rapporten filtreres etter juni måned 2020. Funksjonen MAX returnerer 30. juni 2020. Funksjonen DATESINPERIOD returnerer deretter et område fra 1. juli 2019 til 30. juni 2020. Det er et år fra 30 juni 2020 for det siste året.
Forstå endbehavior-parameter for kalendertidsintelligens
DATESINPERIOD Internt beregner du sluttgrensen ved å ringe DATEADD med samme intervall, antall intervaller og endbehavior som ble sendt til DATESINPERIOD. Når number_of_intervals er negativ (vanlig når du ruller et vindu bakover), returnerer funksjonen området (endDate, startDate], hvor endDate er datoen som returneres etter DATEADD at den flytter kalenderkonteksten som slutter på startDate ved hjelp <endbehavior>av <number_of_intervals><interval> . For positive verdier er [startDate, endDate)det returnerte intervallet .
-
PRECISEbeholder den nøyaktige verdien som returneres av DATEADD. -
ENDALIGNEDfølger semantikken DATEADDEndAligned, og flytter grensen til slutten av målperioden når kildevalget allerede har nådd sin egen slutt. Dette er nyttig når filterkonteksten allerede slutter på den siste dagen i en periode, og du vil at et bakovervendt vindu (for eksempel seks måneder) skal bruke den siste dagen i den forskjøvet perioden som grense.
Eksempel med EndAligned
EndAlignedTest =
CALCULATE (
COUNTROWS ( SUMMARIZE ( Sales, 'Date'[MonthName] ) ),
DATESINPERIOD ( 'Gregorian Calendar', MAX ( 'Date'[Date] ), -6, MONTH, EndAligned )
)
Dette målet teller de distinkte månedsnavnene i de siste seks månedene i forhold til gjeldende kontekst. Med EndAlignedbeholder vinduet grensen på slutten av den forskjøvet måneden når konteksten allerede slutter på en månedsgrense, og forhindrer de ekstra etterfølgende datoene som Precise vil inkludere (for eksempel Feb 28 ville ellers skiftet til Aug 28, trekke inn Aug 29–31 og effektivt utvide perioden til syv måneder). Innstillingen EndAligned beholder antallet på seks i det scenariet.
Sammenligningen nedenfor forutsetter at gjeldende filterkontekst avsluttes 28. februar 2023 og uttrykket kaller .DATESINPERIOD(..., -6, MONTH, <endbehavior>) Funksjonsområdet er (endDate, startDate], slik at det endDate som returneres, DATEADD utelates mens startDate det er inkludert.
| endbehavior |
DATEADD endDate |
DATESINPERIOD rekkevidde | Månedsnavn returnert av målet |
|---|---|---|---|
Precise |
2022-08-28 |
(2022-08-28, 2023-02-28] → 29. august 2022 – 28. februar 2023 |
August, september, oktober, nov, des, jan, februar (7) |
EndAligned |
2022-08-31 |
(2022-08-31, 2023-02-28] → 1. september 2022 – 28. februar 2023 |
September, okt, nov, desember, jan, februar (6) |
Forskjeller i virkemåte mellom klassisk og tidsintelligens i kalenderen
DATESINPERIOD Internt bruker du samme logikk som DATEADD å bestemme sluttdatoen fra startdatoen, og deretter beregner du området. Noen scenarioer kan gi ulike resultater når du sammenligner klassisk tidsintelligens og kalendertidsintelligens. For eksempel, i et måneår, DATEADD produserer forskjellige resultater på datoen granularity, så resultatet av DATESINPERIOD vil variere også. I kalenderbasert tidsintelligens, skiftende 29 februar 2008 tilbake ett år resulterer i mars 1 2007, fordi det behandles som den 60. I klassisk tidsintelligens returnerer det samme skiftet 28. februar 2007. Siden sluttdatoen er forskjellig, vil utdataene DATESINPERIOD også variere. Løsningen er å bruke DATEADD(Kalender, -<antall et år>, måned) til å beregne sluttdatoen. Hvis for eksempel et år har 13 måneder i kalenderen, bruker DATEADDdu (Kalender, -13, måned). Denne tilnærmingen vil skifte etter måned, så februar 2008 vil gå til februar 2007. Skriv deretter inn en egendefinert datesInPeriod basert på den nye sluttdatoen.
Relatert innhold
Tidsintelligensfunksjoner (DAX)funksjoner for dato og klokkeslett (DAX)DATESBETWEEN (DAX)