Freigeben über


DATESINPERIOD

Gilt für:Berechnete SpalteBerechnete TabelleMeasurevisuelle Berechnung

Anmerkung

Diese Funktion wird für die Verwendung in visuellen Berechnungen abgeraten, da sie wahrscheinlich sinnlose Ergebnisse zurückgibt.

Gibt für die Datumsspalteneingabe eine Tabelle zurück, die eine Spalte mit Datumsangaben enthält, die mit einem angegebenen Startdatum beginnt und für die angegebene Zahl und den angegebenen Typ von Datumsintervallen fortgesetzt wird.

Gibt für die Kalendereingabe eine Tabelle zurück, die mit einem angegebenen Startdatum beginnt und für die angegebene Anzahl und den Typ der Datumsintervalle fortgesetzt wird. Die Tabelle enthält alle primären markierten Spalten und alle zeitbezogenen Spalten.

Diese Funktion eignet sich zum Übergeben als Filter an die CALCULATE-Funktion. Verwenden Sie ihn, um einen Ausdruck nach Standarddatumsintervallen wie Tagen, Monaten, Quartalen oder Jahren zu filtern.

Syntax

DATESINPERIOD(<dates> or <calendar>, <start_date>, <number_of_intervals>, <interval>[, <endbehavior>])

Parameter

Ausdruck Definition
dates or calendar Eine Spalte, die Datumsangaben oder einen Kalenderverweis enthält
start_date Ein Datumsausdruck. Wenn die Kalendersyntax verwendet wird, verwenden Sie denselben Datentyp wie die primäre Spalte, die in der Kategorie "Tag" markiert ist.
number_of_intervals Eine ganze Zahl, die die Anzahl der Intervalle angibt, die zu den Datumsangaben addiert oder subtrahiert werden sollen.
interval Das Intervall, nach dem die Datumsangaben verschoben werden sollen. Der Wert für das Intervall kann eine der folgenden Sein: DAY, WEEK, , MONTH, , QUARTERund YEAR. Die Woche konnte nur mit dem Kalender verwendet werden.
endbehavior Gilt nur, wenn ein Kalenderverweis angegeben wird. Wahlfrei. Steuert, wie das Enddatum ausgerichtet wird, wenn das Zielintervall länger als die Quellspanne ist. Gültige Werte sind: GENAU (Standard) und ENDALIGNED.

Rückgabewert

Bei der Eingabe von Datumsspalten enthält eine Tabelle, die eine einzelne Spalte mit Datumswerten enthält.
Bei Kalendereingaben enthält eine Tabelle, die alle primären markierten Spalten und alle zeitbezogenen Spalten enthält.

Bemerkungen

  • Im am häufigsten verwendeten Anwendungsfall ist dates ein Verweis auf die Datumsspalte einer markierten Datumstabelle.

  • Wenn die für number_of_intervals angegebene Zahl positiv ist, werden die Datumsangaben in der Zeit nach vorne verschoben; Wenn die Zahl negativ ist, werden Datumsangaben in der Zeit rückwärts verschoben.

  • Der interval-Parameter ist eine Enumeration. Gültige Werte sind DAY, WEEK, MONTH, QUARTER und YEAR. Da es sich um eine Enumeration handelt, werden Werte nicht als Zeichenfolgen übergeben. Schließen Sie sie also nicht in Anführungszeichen ein.

  • Wenn endbehavior angegeben wird (nur Kalenderzeitintelligenz), DATESINPERIOD wird der Wert an DATEADDden Parameter weitergeleitet Extension . Ausführliche Beispiele finden Sie unter "Understanding endbehavior ".

  • Bei der Datumsspalteneingabe kann die zurückgegebene Tabelle nur Datumsangaben enthalten, die in der dates Spalte gespeichert sind. Wenn beispielsweise die spalte "dates" ab dem 1. Juli 2017 beginnt und der start_date Wert 1. Juli 2016 ist, beginnt die zurückgegebene Tabelle vom 1. Juli 2017.

  • Wenn für die Kalendereingabe das Eingabedatum in der Spalte "Tag" nicht gefunden wird, wird das Ergebnis nicht definiert. Bitte geben Sie gültige Datumseingaben an.

  • Verwenden Sie für die Kalendereingabe denselben Datentyp und dasselbe Format wie die markierte Tagesspalte für das Startdatum. Wenn die Spalte beispielsweise das Format YYYY-Sn-Qn-Mnn-Wnn-Dnn verwendet (z. B. "2014-S2-Q4-M11-W45-D03"), muss das Startdatum demselben Format folgen (z. B. "2015-S2-Q4-M11-W45-D03"). Andernfalls ist das Verhalten nicht definiert.

  • Diese Funktion wird für die Verwendung im DirectQuery-Modus nicht unterstützt, wenn sie in berechneten Spalten oder Sicherheitsregeln auf Zeilenebene (RLS) verwendet wird.

Beispiel

In der folgenden Definition von "Sales table measure" wird die DATESINPERIOD-Funktion verwendet, um den Umsatz für das Vorjahr (PY) zu berechnen.

Beachten Sie, dass die Formel die funktion MAX verwendet. Diese Funktion gibt das neueste Datum zurück, das sich im Filterkontext befindet. Die funktion DATESINPERIOD gibt also eine Tabelle mit Datumsangaben zurück, die vom letzten Datum für das letzte Jahr beginnen.

Beispiele in diesem Artikel können mit dem Beispielmodell Adventure Works DW 2020 Power BI Desktop verwendet werden. Informationen zum Abrufen des Modells finden Sie unter DAX Beispielmodell.

Revenue PY =
CALCULATE (
    SUM ( Sales[Sales Amount] ),
    DATESINPERIOD ( 'Date'[Date], MAX ( 'Date'[Date] ), -1, YEAR )
)

Beachten Sie, dass der Bericht nach dem Monat Juni 2020 gefiltert wird. Die funktion MAX gibt den 30. Juni 2020 zurück. Die funktion DATESINPERIOD gibt dann einen Datumsbereich vom 1. Juli 2019 bis zum 30. Juni 2020 zurück. Es ist ein Jahr von Datumswerten ab dem 30. Juni 2020 für das letzte Jahr.

Beispiel für kalenderbasierte Zeitintelligenz

In der folgenden Definition von "Sales table measure" wird die DATESINPERIOD-Funktion verwendet, um den Umsatz für das Vorjahr (PY) zu berechnen.

Beachten Sie, dass die Formel die funktion MAX verwendet. Diese Funktion gibt das neueste Datum zurück, das sich im Filterkontext befindet. Daher gibt die DATESINPERIOD Funktion primäre Spalten zurück, die vom spätesten Datum für das letzte Jahr beginnen. DateKey wird als Beispiel verwendet, um anzuzeigen, dass die Kategorie "Tag" mit einer Spalte markiert werden kann, die nicht datumstypiert ist.

Beispiele in diesem Artikel können mit dem Beispielmodell Adventure Works DW 2020 Power BI Desktop verwendet werden. Informationen zum Abrufen des Modells finden Sie unter DAX Beispielmodell.

Revenue PY =
CALCULATE (
    SUM ( Sales[Sales Amount] ),
    DATESINPERIOD ( FiscalCalendar, MAX ( 'Date'[DateKey] ), -1, YEAR )
)

Beachten Sie, dass der Bericht nach dem Monat Juni 2020 gefiltert wird. Die funktion MAX gibt den 30. Juni 2020 zurück. Die DATESINPERIOD Funktion gibt dann einen Bereich vom 1. Juli 2019 bis zum 30. Juni 2020 zurück. Es ist ein Jahr ab dem 30. Juni 2020 für das letzte Jahr.

Grundlegendes zum Endbehavior-Parameter für die Kalenderzeitintelligenz

Berechnet intern die Endgrenze, DATESINPERIOD indem DATEADD sie mit demselben Intervall, der Anzahl der Intervalle und endbehavior der übergebenen Intervalle aufruft DATESINPERIOD. Wenn number_of_intervals es sich um ein negatives (häufiges Rollieren eines Fensters nach hinten) handelt, gibt die Funktion den Bereich (endDate, startDate]zurück. Dabei handelt es sich um das Datum, endDate das nach DATEADD dem Verschieben des Kalenderkontexts zurückgegeben wird, der mit <number_of_intervals><interval> der Verwendung <endbehavior>endetstartDate. Bei positiven Werten lautet [startDate, endDate)das zurückgegebene Intervall .

  • PRECISE behält den exakten Wert bei, der von DATEADD.
  • ENDALIGNED folgt der DATEADDEndAligned Semantik, wobei die Grenze an das Ende des Zielzeitraums verschoben wird, wenn die Quellauswahl bereits ein eigenes Ende erreicht hat. Dies ist nützlich, wenn der Filterkontext bereits am letzten Tag eines Punkts endet und Sie möchten, dass ein rückwärts gerichtetes Fenster (z. B. sechs Monate) den letzten Tag des verschobenen Zeitraums als Grenze verwendet.

Beispiel mit EndAligned

EndAlignedTest =
    CALCULATE (
        COUNTROWS ( SUMMARIZE ( Sales, 'Date'[MonthName] ) ),
        DATESINPERIOD ( 'Gregorian Calendar', MAX ( 'Date'[Date] ), -6, MONTH, EndAligned )
    )

Dieses Measure zählt die eindeutigen Monatsnamen in den letzten sechs Monaten relativ zum aktuellen Kontext. Mit EndAligned, das Fenster behält die Grenze am Ende des verschobenen Monats bei, wenn der Kontext bereits auf einer Monatsgrenze endet, und verhindert, dass Precise die zusätzlichen nachgestellten Datumsangaben eingeschlossen werden (z Feb 28 . B. verschieben Aug 28, ziehen Aug 29–31 und effektiv die Spanne auf sieben Monate erweitern). Die EndAligned Einstellung behält die Anzahl bei sechs in diesem Szenario bei.

Im folgenden Vergleich wird davon ausgegangen, dass der aktuelle Filterkontext am 28. Februar 2023 endet und der Ausdruck aufruft DATESINPERIOD(..., -6, MONTH, <endbehavior>). Der Funktionsbereich ist (endDate, startDate], sodass die endDate rückgabe von DATEADD ausgeschlossen wird, während startDate sie enthalten ist.

endbehavior DATEADD endDate DATESINPERIOD Bereich Monatsnamen, die vom Measure zurückgegeben werden
Precise 2022-08-28 (2022-08-28, 2023-02-28] → 29. August 2022 – 28. Februar 2023 Aug, Sep, Okt, Nov, Dez, Jan, Februar (7)
EndAligned 2022-08-31 (2022-08-31, 2023-02-28] → 1. September 2022 – 28. Februar 2023 Sep, Okt, Nov, Dez, Jan, Februar (6)

Unterschiede im Verhalten zwischen klassischer und Kalenderzeitintelligenz

DATESINPERIOD Intern verwendet die gleiche Logik wie DATEADD zum Bestimmen des Enddatums vom Startdatum und dann die Berechnung des Bereichs. Einige Szenarien können beim Vergleichen der klassischen und kalenderzeitintelligenz unterschiedliche Ergebnisse erzielen. Beispielsweise erzeugt in einem Mondjahr DATEADD unterschiedliche Ergebnisse an der Granularität des Datums, sodass auch das Ergebnis DATESINPERIOD unterschiedlich sein wird. In kalenderbasierten Zeitintelligenz führt die Verschiebung vom 29. Februar 2008 zurück zu einem Jahr zum 1. März 2007, da es als 60. Tag des Jahres behandelt wird. In der klassischen Zeitintelligenz gibt die gleiche Schicht den 28. Februar 2007 zurück. Da sich das Enddatum unterscheidet, unterscheidet sich die Ausgabe ebenfalls DATESINPERIOD . Die Problemumgehung besteht darin, das Enddatum zu berechnen DATEADD(Kalender, -<Zahl eines Jahres>, Monats). Wenn ein Jahr beispielsweise 13 Monate im Kalender hat, verwenden Sie DATEADD(Kalender, -13, Monat). Dieser Ansatz wird sich nach Monat verschieben, sodass Februar 2008 auf Februar 2007 verschoben wird. Schreiben Sie dann basierend auf dem neuen Enddatum ein benutzerdefiniertes DateInPeriod.

Zeitintelligenzfunktionen (DAX)Datums- und Uhrzeitfunktionen (DAX)DATESBETWEEN Funktion (DAX)