DAX und Datenmodelle

Time Intelligence in Power BI mit DAX-Beispielen

TOTALYTD, SAMEPERIODLASTYEAR und DATEADD berechnen YTD- und Vorperiodenwerte in Power BI. So funktionieren sie und welche Datumstabelle sie brauchen.

Sajagan Thirugnanam

·

Aktualisiert

Time Intelligence in Power BI ist eine Gruppe von DAX-Funktionen wie TOTALYTD, SAMEPERIODLASTYEAR und DATEADD, die einen Wert über einen bestimmten Zeitraum berechnen, etwa das laufende Jahr bis heute oder denselben Monat ein Jahr zuvor. Diese Funktionen liefern nur dann verlässliche Ergebnisse, wenn eine vollständige Datumstabelle mit einer Zeile pro Tag vorliegt, die mit Ihren Faktentabellen verknüpft und als Datumstabelle markiert ist. Dieser Leitfaden behandelt die wichtigsten Funktionen, die Datumstabelle, von der sie abhängen, und wie CALCULATE sie zum Laufen bringt.

Was Time Intelligence leistet

Time-Intelligence-Funktionen berechnen ein Measure über einen zeitbasierten Bereich statt über den Bereich, auf den ein Visual gerade gefiltert ist. Gängige Bereiche sind:

  • Month-to-Date (MTD)

  • Quarter-to-Date (QTD)

  • Year-to-Date (YTD)

  • Vormonat oder Vorjahr

  • Gleitende Summen, etwa die letzten 30 Tage oder die letzten 12 Monate

  • Wachstum gegenüber dem Vorjahr (Year-over-Year, YoY)

Jeder dieser Bereiche passt sich automatisch an, wenn ein Leser Slicer und Filter ändert, weil die Funktionen den Filterkontext verändern und keinen Datumsbereich fest vorgeben.

Die Voraussetzung: eine eigene Datumstabelle

Time-Intelligence-Funktionen brauchen eine durchgehende Datumsspalte ohne fehlende Tage. Ihr Modell braucht:

  • Eine Kalendertabelle mit einer Zeile pro Datum, ohne Lücken

  • Eine Beziehung zwischen der Kalendertabelle und Ihrer Faktentabelle

  • Eine Datumsspalte, die unter Tabellentools > Als Datumstabelle markieren als Datumstabelle markiert ist, mit ausgewählter Datumsspalte

Ein häufiger Fehler ist, Visuals direkt auf die Datumsspalte einer Faktentabelle zu filtern, etwa Sales[OrderDate], statt auf die Kalendertabelle. Für einfaches Filtern funktioniert das. Time Intelligence bricht damit aber, sobald Daten fehlen oder eine Tabelle nur Transaktionsdaten enthält und nicht jeden Kalendertag. Bauen Sie die Kalendertabelle mit DAX und geben Sie ihr nützliche Spalten:

DateTable =
ADDCOLUMNS(
    CALENDAR(DATE(2020,1,1), DATE(2030,12,31)),
    "Year", YEAR([Date]),
    "Month", FORMAT([Date], "MMM"),
    "Month Number", MONTH([Date]),
    "Quarter", "Q" & FORMAT([Date], "Q"),
    "Year-Month", FORMAT([Date], "YYYY-MM")
)

Unser Leitfaden zum Erstellen von Datumstabellen in Power BI behandelt die vollständige Einrichtung, einschließlich Geschäftsjahr-Kalendern.

Die wichtigsten Time-Intelligence-Funktionen

Für diese Beispiele gehen wir von einem Basis-Measure aus:

Total Sales = SUM(Sales[SalesAmount])

Time Intelligence arbeitet mit Measures, nicht mit berechneten Spalten, weil sie einen Filterkontext braucht, der sich verschieben lässt.

Year-to-Date (YTD)

Sales YTD = TOTALYTD([Total Sales], DateTable[Date])

TOTALYTD nimmt den Ausdruck, der summiert werden soll, die Datumsspalte, einen optionalen Filter und ein optionales Jahresende für einen Geschäftsjahr-Kalender. Für ein Geschäftsjahr, das am letzten Tag des sechsten Monats endet, übergeben Sie als drittes Argument einen Filter wie ALL(DateTable) und als viertes das Jahresende, in der Form, die Microsoft dokumentiert:

Sales Fiscal YTD = TOTALYTD([Total Sales], DateTable[Date], ALL(DateTable), "6/30")

Die Zeichenfolge für das Jahresende wird im Gebietsschema der Datei gelesen, daher passt „6/30“ zu einer Datei mit US-Gebietsschema. Schreiben Sie ein Jahr hinein, ignoriert Power BI es.

Unser Leitfaden zu YTD-Berechnungen in Power BI geht tiefer auf YTD ein, einschließlich Vergleichen mit dem Vorjahres-YTD.

Month-to-Date und Quarter-to-Date

Sales MTD = TOTALMTD([Total Sales], DateTable[Date])
Sales QTD = TOTALQTD([Total Sales], DateTable[Date])

Vorjahr und Wachstum gegenüber dem Vorjahr

Sales Previous Year = CALCULATE([Total Sales], SAMEPERIODLASTYEAR(DateTable[Date]))

Sales YoY % = DIVIDE([Total Sales] - [Sales Previous Year], [Sales Previous Year])

SAMEPERIODLASTYEAR liefert dieselbe Menge an Daten ein Jahr früher, verschoben ausgehend vom aktuellen Filterkontext. DIVIDE liefert einen leeren Wert statt eines Fehlers, wenn es im Vorjahr keinen Umsatz gab. Setzen Sie das Format des Measures auf Prozent, damit Sales YoY % korrekt angezeigt wird.

Vormonat

Sales Previous Month = CALCULATE([Total Sales], PREVIOUSMONTH(DateTable[Date]))

Gleitende Summen

Sales Rolling 12M =
CALCULATE(
    [Total Sales],
    DATESINPERIOD(DateTable[Date], MAX(DateTable[Date]), -12, MONTH)
)

Sales Last 30 Days =
CALCULATE(
    [Total Sales],
    DATESINPERIOD(DateTable[Date], MAX(DateTable[Date]), -30, DAY)
)

DATESINPERIOD nimmt die Datumsspalte, ein Startdatum, eine Anzahl von Perioden und den Periodentyp. Eine negative Zahl geht vom Startdatum aus rückwärts, daher liefert -12, MONTH die 12 Monate, die am letzten Datum im aktuellen Filterkontext enden.

Derselbe Monat ein Jahr zuvor

Sales Same Month One Year Ago = CALCULATE([Total Sales], DATEADD(DateTable[Date], -1, YEAR))

DATEADD verschiebt den aktuellen Datumsbereich um eine Anzahl von Intervallen, hier um ein Jahr zurück. Die Funktion ist flexibler als SAMEPERIODLASTYEAR, weil Intervall und Einheit beide Argumente sind. Dasselbe Muster verschiebt also genauso um einen Monat oder ein Quartal.

Warum CALCULATE die Funktion hinter allem ist

Jedes Time-Intelligence-Beispiel oben umschließt ein Basis-Measure mit CALCULATE. CALCULATE ändert den Filterkontext, in dem ein Measure ausgewertet wird. SAMEPERIODLASTYEAR(DateTable[Date]), PREVIOUSMONTH(DateTable[Date]) und DATEADD(DateTable[Date], -1, YEAR) sind alles Filterargumente, die CALCULATE anweisen, den aktuellen Datumsfilter durch einen verschobenen zu ersetzen. Das ist der ganze Mechanismus: Time-Intelligence-Funktionen bauen eine neue Menge an Daten, und CALCULATE tauscht diese Menge gegen die aktuelle aus.

Eigene und Geschäftsjahr-Kalender

Nicht jedes Unternehmen arbeitet mit einem Kalenderjahr als Geschäftsjahr. Bei Geschäftsjahren, die mitten im Jahr beginnen, Handels-Kalendern nach dem 4-4-5-Muster oder anderen eigenen Perioden erweitern Sie die Datumstabelle um Spalten wie Fiscal Year, Fiscal Month und Week Start Date. Nutzen Sie diese Spalten dann in CALCULATE und FILTER statt der integrierten Funktionen. Die integrierten Funktionen gehen von einem Standardkalender aus, es sei denn, Sie übergeben wie oben bei TOTALYTD ein Geschäftsjahresende.

Ergebnisse prüfen

Liefert ein YTD- oder gleitendes Measure einen leeren Wert oder eine unerwartete Summe, prüfen Sie der Reihe nach drei Dinge:

  1. Die Datumstabelle hat keine Lücken und ist als Datumstabelle markiert.

  2. Die Beziehung zwischen der Datumstabelle und der Faktentabelle ist aktiv und eine 1:n-Beziehung.

  3. Kein anderer Filter (ein Slicer, ein Seitenfilter, eine getrennte Tabelle) schränkt den Datumsbereich ein.

REMOVEFILTERS() innerhalb von CALCULATE kann beim Debuggen einen verirrten Filter ausschließen.

FAQs

Was ist Time Intelligence in Power BI?

Eine Gruppe von DAX-Funktionen wie TOTALYTD, SAMEPERIODLASTYEAR und DATEADD, die ein Measure über einen zeitbasierten Bereich berechnen, etwa das Jahr bis heute, die gleitenden 12 Monate oder denselben Zeitraum ein Jahr zuvor.

Warum braucht Time Intelligence eine Datumstabelle?

Time-Intelligence-Funktionen brauchen einen durchgehenden, lückenlosen Datumsbereich, über den sie verschieben können. Wird stattdessen auf die eigene Datumsspalte einer Faktentabelle gefiltert statt auf eine markierte Datumstabelle, fehlen Perioden oder kommen doppelt vor, und die Ergebnisse sind falsch oder leer.

Quellen

Time Intelligence in Power BI ist eine Gruppe von DAX-Funktionen wie TOTALYTD, SAMEPERIODLASTYEAR und DATEADD, die einen Wert über einen bestimmten Zeitraum berechnen, etwa das laufende Jahr bis heute oder denselben Monat ein Jahr zuvor. Diese Funktionen liefern nur dann verlässliche Ergebnisse, wenn eine vollständige Datumstabelle mit einer Zeile pro Tag vorliegt, die mit Ihren Faktentabellen verknüpft und als Datumstabelle markiert ist. Dieser Leitfaden behandelt die wichtigsten Funktionen, die Datumstabelle, von der sie abhängen, und wie CALCULATE sie zum Laufen bringt.

Was Time Intelligence leistet

Time-Intelligence-Funktionen berechnen ein Measure über einen zeitbasierten Bereich statt über den Bereich, auf den ein Visual gerade gefiltert ist. Gängige Bereiche sind:

  • Month-to-Date (MTD)

  • Quarter-to-Date (QTD)

  • Year-to-Date (YTD)

  • Vormonat oder Vorjahr

  • Gleitende Summen, etwa die letzten 30 Tage oder die letzten 12 Monate

  • Wachstum gegenüber dem Vorjahr (Year-over-Year, YoY)

Jeder dieser Bereiche passt sich automatisch an, wenn ein Leser Slicer und Filter ändert, weil die Funktionen den Filterkontext verändern und keinen Datumsbereich fest vorgeben.

Die Voraussetzung: eine eigene Datumstabelle

Time-Intelligence-Funktionen brauchen eine durchgehende Datumsspalte ohne fehlende Tage. Ihr Modell braucht:

  • Eine Kalendertabelle mit einer Zeile pro Datum, ohne Lücken

  • Eine Beziehung zwischen der Kalendertabelle und Ihrer Faktentabelle

  • Eine Datumsspalte, die unter Tabellentools > Als Datumstabelle markieren als Datumstabelle markiert ist, mit ausgewählter Datumsspalte

Ein häufiger Fehler ist, Visuals direkt auf die Datumsspalte einer Faktentabelle zu filtern, etwa Sales[OrderDate], statt auf die Kalendertabelle. Für einfaches Filtern funktioniert das. Time Intelligence bricht damit aber, sobald Daten fehlen oder eine Tabelle nur Transaktionsdaten enthält und nicht jeden Kalendertag. Bauen Sie die Kalendertabelle mit DAX und geben Sie ihr nützliche Spalten:

DateTable =
ADDCOLUMNS(
    CALENDAR(DATE(2020,1,1), DATE(2030,12,31)),
    "Year", YEAR([Date]),
    "Month", FORMAT([Date], "MMM"),
    "Month Number", MONTH([Date]),
    "Quarter", "Q" & FORMAT([Date], "Q"),
    "Year-Month", FORMAT([Date], "YYYY-MM")
)

Unser Leitfaden zum Erstellen von Datumstabellen in Power BI behandelt die vollständige Einrichtung, einschließlich Geschäftsjahr-Kalendern.

Die wichtigsten Time-Intelligence-Funktionen

Für diese Beispiele gehen wir von einem Basis-Measure aus:

Total Sales = SUM(Sales[SalesAmount])

Time Intelligence arbeitet mit Measures, nicht mit berechneten Spalten, weil sie einen Filterkontext braucht, der sich verschieben lässt.

Year-to-Date (YTD)

Sales YTD = TOTALYTD([Total Sales], DateTable[Date])

TOTALYTD nimmt den Ausdruck, der summiert werden soll, die Datumsspalte, einen optionalen Filter und ein optionales Jahresende für einen Geschäftsjahr-Kalender. Für ein Geschäftsjahr, das am letzten Tag des sechsten Monats endet, übergeben Sie als drittes Argument einen Filter wie ALL(DateTable) und als viertes das Jahresende, in der Form, die Microsoft dokumentiert:

Sales Fiscal YTD = TOTALYTD([Total Sales], DateTable[Date], ALL(DateTable), "6/30")

Die Zeichenfolge für das Jahresende wird im Gebietsschema der Datei gelesen, daher passt „6/30“ zu einer Datei mit US-Gebietsschema. Schreiben Sie ein Jahr hinein, ignoriert Power BI es.

Unser Leitfaden zu YTD-Berechnungen in Power BI geht tiefer auf YTD ein, einschließlich Vergleichen mit dem Vorjahres-YTD.

Month-to-Date und Quarter-to-Date

Sales MTD = TOTALMTD([Total Sales], DateTable[Date])
Sales QTD = TOTALQTD([Total Sales], DateTable[Date])

Vorjahr und Wachstum gegenüber dem Vorjahr

Sales Previous Year = CALCULATE([Total Sales], SAMEPERIODLASTYEAR(DateTable[Date]))

Sales YoY % = DIVIDE([Total Sales] - [Sales Previous Year], [Sales Previous Year])

SAMEPERIODLASTYEAR liefert dieselbe Menge an Daten ein Jahr früher, verschoben ausgehend vom aktuellen Filterkontext. DIVIDE liefert einen leeren Wert statt eines Fehlers, wenn es im Vorjahr keinen Umsatz gab. Setzen Sie das Format des Measures auf Prozent, damit Sales YoY % korrekt angezeigt wird.

Vormonat

Sales Previous Month = CALCULATE([Total Sales], PREVIOUSMONTH(DateTable[Date]))

Gleitende Summen

Sales Rolling 12M =
CALCULATE(
    [Total Sales],
    DATESINPERIOD(DateTable[Date], MAX(DateTable[Date]), -12, MONTH)
)

Sales Last 30 Days =
CALCULATE(
    [Total Sales],
    DATESINPERIOD(DateTable[Date], MAX(DateTable[Date]), -30, DAY)
)

DATESINPERIOD nimmt die Datumsspalte, ein Startdatum, eine Anzahl von Perioden und den Periodentyp. Eine negative Zahl geht vom Startdatum aus rückwärts, daher liefert -12, MONTH die 12 Monate, die am letzten Datum im aktuellen Filterkontext enden.

Derselbe Monat ein Jahr zuvor

Sales Same Month One Year Ago = CALCULATE([Total Sales], DATEADD(DateTable[Date], -1, YEAR))

DATEADD verschiebt den aktuellen Datumsbereich um eine Anzahl von Intervallen, hier um ein Jahr zurück. Die Funktion ist flexibler als SAMEPERIODLASTYEAR, weil Intervall und Einheit beide Argumente sind. Dasselbe Muster verschiebt also genauso um einen Monat oder ein Quartal.

Warum CALCULATE die Funktion hinter allem ist

Jedes Time-Intelligence-Beispiel oben umschließt ein Basis-Measure mit CALCULATE. CALCULATE ändert den Filterkontext, in dem ein Measure ausgewertet wird. SAMEPERIODLASTYEAR(DateTable[Date]), PREVIOUSMONTH(DateTable[Date]) und DATEADD(DateTable[Date], -1, YEAR) sind alles Filterargumente, die CALCULATE anweisen, den aktuellen Datumsfilter durch einen verschobenen zu ersetzen. Das ist der ganze Mechanismus: Time-Intelligence-Funktionen bauen eine neue Menge an Daten, und CALCULATE tauscht diese Menge gegen die aktuelle aus.

Eigene und Geschäftsjahr-Kalender

Nicht jedes Unternehmen arbeitet mit einem Kalenderjahr als Geschäftsjahr. Bei Geschäftsjahren, die mitten im Jahr beginnen, Handels-Kalendern nach dem 4-4-5-Muster oder anderen eigenen Perioden erweitern Sie die Datumstabelle um Spalten wie Fiscal Year, Fiscal Month und Week Start Date. Nutzen Sie diese Spalten dann in CALCULATE und FILTER statt der integrierten Funktionen. Die integrierten Funktionen gehen von einem Standardkalender aus, es sei denn, Sie übergeben wie oben bei TOTALYTD ein Geschäftsjahresende.

Ergebnisse prüfen

Liefert ein YTD- oder gleitendes Measure einen leeren Wert oder eine unerwartete Summe, prüfen Sie der Reihe nach drei Dinge:

  1. Die Datumstabelle hat keine Lücken und ist als Datumstabelle markiert.

  2. Die Beziehung zwischen der Datumstabelle und der Faktentabelle ist aktiv und eine 1:n-Beziehung.

  3. Kein anderer Filter (ein Slicer, ein Seitenfilter, eine getrennte Tabelle) schränkt den Datumsbereich ein.

REMOVEFILTERS() innerhalb von CALCULATE kann beim Debuggen einen verirrten Filter ausschließen.

FAQs

Was ist Time Intelligence in Power BI?

Eine Gruppe von DAX-Funktionen wie TOTALYTD, SAMEPERIODLASTYEAR und DATEADD, die ein Measure über einen zeitbasierten Bereich berechnen, etwa das Jahr bis heute, die gleitenden 12 Monate oder denselben Zeitraum ein Jahr zuvor.

Warum braucht Time Intelligence eine Datumstabelle?

Time-Intelligence-Funktionen brauchen einen durchgehenden, lückenlosen Datumsbereich, über den sie verschieben können. Wird stattdessen auf die eigene Datumsspalte einer Faktentabelle gefiltert statt auf eine markierte Datumstabelle, fehlen Perioden oder kommen doppelt vor, und die Ergebnisse sind falsch oder leer.

Quellen

Zeigen Sie uns Ihren Report, dem niemand traut.

1 · Ein Gespräch von 30 Minuten.

2 · Wir sehen uns gemeinsam Ihre aktuellen Reports an.

3 · Wir sagen Ihnen, was wir tun würden.

Zeigen Sie uns Ihren Report, dem niemand traut.

1 · Ein Gespräch von 30 Minuten.

2 · Wir sehen uns gemeinsam Ihre aktuellen Reports an.

3 · Wir sagen Ihnen, was wir tun würden.

Zeigen Sie uns Ihren Report, dem niemand traut.

1 · Ein Gespräch von 30 Minuten.

2 · Wir sehen uns gemeinsam Ihre aktuellen Reports an.

3 · Wir sagen Ihnen, was wir tun würden.

CaseWhen ist eine BI-Beratung aus Berlin. Wir bauen Reporting, dem die Geschäftsführung vertraut, auf dem Microsoft-Stack: Power BI, Fabric und Azure.

Berlin, Deutschland

© CaseWhen Consulting GmbH

Deutsch

CaseWhen ist eine BI-Beratung aus Berlin. Wir bauen Reporting, dem die Geschäftsführung vertraut, auf dem Microsoft-Stack: Power BI, Fabric und Azure.

Berlin, Deutschland

© CaseWhen Consulting GmbH

Deutsch

CaseWhen ist eine BI-Beratung aus Berlin. Wir bauen Reporting, dem die Geschäftsführung vertraut, auf dem Microsoft-Stack: Power BI, Fabric und Azure.

Berlin, Deutschland

© CaseWhen Consulting GmbH

Deutsch