Freigeben über


Implementieren von zeitbasierten Berechnungen in Power BI

Power BI bietet mehrere Tools zum Ausführen zeitbasierter Berechnungen, die entweder auf automatischen Datumstabellen oder Datumstabellen basieren, die Sie hinzufügen.

Es wird empfohlen, kalenderbasierte Zeitintelligenz (Vorschau) zu verwenden, da sie die beste Leistung und höchste Flexibilität bietet, um jedem Kalender gerecht zu werden.

In dieser Tabelle werden die drei bereitgestellten Tools verglichen:

Tool Einrichtungsaufwand erforderlich Erleichterte Verwaltung Flexibilität Hinweise
Automatisches Datum/Uhrzeit nahezu null fest Niedrig Erhöht die Modellgröße aufgrund der Erstellung mehrerer verborgener Datumstabellen
Klassische Zeitintelligenz medium einfach Niedrig Erfordert die Erstellung einer Datumstabelle, wobei von einem gregorianischen oder verschobenen gregorianischen Kalender ausgegangen wird und unter bestimmten Szenarien Leistungsprobleme auftreten.
Kalenderbasierte Zeitintelligenz Hoch medium Hoch Es wird empfohlen, eine Datumstabelle zu erstellen, für höchste Flexibilität und beste Leistung, aber mit höheren Einrichtungskosten.

Hinweis

Wir raten davon ab, alternative Zeitintelligenztechniken zu verwenden, insbesondere solche, die zusätzliche Spalten zu Datumstabellen hinzufügen, um Offsets außer bestimmten Anwendungsfällen zu berechnen. Obwohl diese Ansätze aufgrund ihrer einfachen DAX-Formeln an Anfänger appellieren können, neigen sie dazu, semantische Modelle unnötig zu überblasen. Diese Aufblähung kann zu langsameren Datenaktualisierungen und verringerter Berichtsleistung führen, wenn Datasets wachsen.

Automatisches Datum/Uhrzeit

Das Feature "Automatisches Datum/Uhrzeit" erstellt automatisch ausgeblendete Datumstabellen für jedes Datumsfeld in Ihrem Datenmodell. Weitere Informationen zu diesem automatischen Verhalten sehen Sie unter Anwenden des automatischen Datums/der Uhrzeit in Power BI Desktop.

Hinweis

Obwohl autodatum/uhrzeit eine bequeme Option für einfache Modelle ist, wird es für komplexere Szenarien und größere Modelle nicht empfohlen. Für diese Modelle ist es vorzuziehen, eine dedizierte Tabelle für mehr Flexibilität zu erstellen.

Hinzufügen einer Datumstabelle

Für die meisten Modelle wird empfohlen, eine Datumstabelle (oder mehr in einigen Szenarien) hinzuzufügen. Viele Datenanalysten bevorzugen es, eigene Datumstabellen zu erstellen, was in Ordnung ist.

Es gibt mehrere Möglichkeiten zum Erstellen einer solchen Tabelle, einschließlich:

Welche Option für Sie am besten geeignet ist, hängt von verschiedenen Faktoren ab und liegt außerhalb des Umfangs dieses Lernprogramms.

Arbeiten mit zeitbasierten Berechnungen

Wenn Sie kein automatisches Datum/uhrzeit verwenden, gibt es zwei alternative Methoden zum Arbeiten mit Zeitintelligenzfunktionen in Power BI , um zeitbasierte Berechnungen durchzuführen:

  • Klassische Zeitintelligenz. Die einfachste Option und eignet sich hervorragend für gregorianische oder verschobene gregorianische Kalender, bietet aber begrenzte Flexibilität für Kalender, die unterschiedlich oder für wochenbasierte Berechnungen strukturiert sind.
  • Kalenderbasierte Zeitintelligenz (Vorschau) Neuere Option, erfordert aber etwas mehr Arbeit zum Einrichten. Es bietet Ihnen jedoch auch eine bessere Leistung, mehr Flexibilität beim Arbeiten mit nicht gregorianischen Kalendern und der Möglichkeit, wochenbasierte Berechnungen durchzuführen.

Hinweis

Sie müssen Ihre Tabelle als Datumstabelle für bestimmte Szenarien festlegen.

Klassische Zeitintelligenz

Bei dieser Option müssen Sie über eine Datumstabelle in Ihrem Modell verfügen und entsprechend festlegen. Anschließend können Sie die Zeitintelligenzfunktionen verwenden und auf Ihre Datumstabelle verweisen. Wenn Sie beispielsweise eine Datumstabelle namens "Datum " in Ihrem Modell haben, die Sie als Datumstabelle festlegen, die eine Datumsspalte enthält, können Sie Folgendes verwenden:

SAMEPERIODLASTYEAR ( 'Date'[Date] )

Obwohl dies ein schneller und einfacher Ansatz ist, gibt es viele Nachteile im Vergleich zum kalenderbasierten Ansatz:

  • sie erfordert, dass Sie die Datumstabelle festlegen.
  • es funktioniert nur mit Modellen mit mindestens einer dedizierten Datumstabelle
  • Die verwendeten Datumsspalten sollten keine fehlenden Datumsangaben zwischen dem ersten und dem letzten Datum aufweisen. Wenn zwischen dem ersten und dem letzten Datum fehlende Datumsangaben vorhanden sind, wird ein Fehler ausgelöst.
  • es ist weniger flexibel, da es für gregorianische oder verschobene gregorianische Kalender optimiert ist, z. B. Geschäftsjahre, die am 1. Juli beginnen, aber dennoch einem gregorianischen Kalender folgen
  • es stellt keine wochenbasierten Berechnungen bereit.
  • in bestimmten Szenarien werden zeitbasierte Berechnungen nicht gut ausgeführt.

Hinweis

Es wird empfohlen, den erweiterten, kalenderbasierten Ansatz zu verwenden.

Kalenderbasierte Zeitintelligenz (Vorschau)

Kalender sind Metadatendefinitionen, die einer Tabelle hinzugefügt werden, um anzugeben, welche Spalten aus dieser Tabelle welche Attribute der Zeit darstellen. Sie können einen oder mehrere Kalender in einer beliebigen Tabelle in Ihrem Modell definieren. Nachdem Sie den Kalender in Ihrem Modell definiert haben, können Sie in Ihren Zeitintelligenzfunktionen darauf verweisen. Hier erfahren Sie beispielsweise, wie Sie ein Gesamtjahr bis zum Datum des Umsatzes mithilfe eines definierten Geschäftskalenders berechnen:

TOTALYTD ( [Sales], 'Fiscal Calendar' )

Vorteile der kalenderbasierten Zeitintelligenz

Die wichtigsten Vorteile der kalenderbasierten Zeitintelligenz sind:

Funktioniert mit jedem Beliebigen Kalender

Kalender bieten Ihnen volle Flexibilität, um zu entscheiden, wie Die Zeit in Jahren, Quartalen, Monaten und Wochen unterteilt werden soll. Sie können z. B. die Kalender definieren, die den folgenden Mustern folgen:

  • Gregorian
  • Verschobener Gregorianischer Kalender
  • Einzelhandel (445, 454, 544 Muster)
  • 13 Monate
  • Lunar

Die Möglichkeiten sind endlos, da es keine integrierte Annahme von Power BI gibt, wie Ihr Kalender strukturiert ist. Kalenderbasierte Zeitintelligenz macht keine Annahmen zu den zugrunde liegenden Datumsangaben. Alle Berechnungen verwenden die zugrunde liegenden Daten genau so, wie sie sind.

Geringe Datumsangaben

Die klassische Zeitintelligenz erfordert, dass die bereitgestellte Datumsspalte abgeschlossen ist – wenn zwischen dem ersten und dem letzten Datum fehlende Datumsangaben vorhanden sind, wird ein Fehler ausgelöst. Kalenderbasierte Zeitintelligenzfunktionen haben keine solche Anforderung. Stattdessen werden sie mit den Daten so, wie sie sind, gearbeitet. Obwohl es weiterhin empfohlen wird, eine vollständige und dedizierte Kalendertabelle zu haben, müssen Sie dies nicht mehr haben. Wenn beispielsweise alle Ihre Einzelhandelsgeschäfte am Wochenende geschlossen sind, können Sie die Wochenendtage überspringen, da sie keine Verkäufe haben. Vorausgesetzt, Ihr Wochenende ist Samstag und Sonntag, können Sie jetzt PREVIOUSDAY mit einem Kalender verwenden, der auf einer Tabelle basiert, die keine Einträge für das Wochenende enthält, um von Montag direkt nach Freitag zu springen.

Wochenbasierte Berechnungen

Kalenderbasierte Zeitintelligenz liefert direkt DAX-Funktionen, die in einer Woche granular arbeiten. Beispielsweise können die Wochen-bis-heute Gesamtsummen direkt mithilfe von TOTALWTD berechnet werden.

TOTALWTD ( Expr, CalendarName )

Leistungsverbesserungen

Einige Szenarien können eine verbesserte Leistung aufweisen, wenn eine kalenderbasierte Zeitintelligenzfunktion mit ihrem klassischen Gegenstück verglichen wird. Beispielsweise sollte ein visuelles Element, das nach der Woche gruppiert ist und eine Jahres-zu-Datum-Berechnung mit TOTALYTD ( ..., CalendarName ) durchführt, in der Regel schneller ausgeführt werden als sein klassisches Gegenstück TOTALYTD ( ..., TableName[DateColumnName] ), wenn es verwendet wird. Informationen dazu, warum dies passieren kann, finden Sie im Abschnitt zum Löschen von Kontexten .

Aktivieren der erweiterten DAX-Zeitintelligenzvorschau

Zunächst müssen Sie das Vorschaufeature "Erweiterte DAX Time Intelligence" aktivieren.

  1. Wechseln Sie in Power BI Desktop zu Datei > Optionen und Einstellungen > Optionen > Vorschaufeatures.
  2. Wählen Sie die Vorschau der erweiterten DAX-Zeitintelligenz aus.
  3. Wählen Sie OK aus.
  4. Starten Sie Power BI Desktop neu

Verwalten von Kalendern

Zum Verwalten eines Kalenders klicken Sie mit der rechten Maustaste auf die Tabelle, die den Kalender enthält oder in der Sie den Kalender definieren möchten, und wählen Sie "Kalenderoptionen" oder " Kalenderoptionen " im Menüband "Tabellentools" aus, nachdem Sie die Tabelle ausgewählt haben:

Screenshot der Einstiegspunkte zum Öffnen der Kalenderoptionen in einer Tabelle.

Alternativ können Sie externe Tools oder die TMDL-Ansicht verwenden, um einen Kalender zu definieren. Weitere Informationen finden Sie im TMDL-Skript.

Kalender werden auch im Modell-Explorer unter der Tabelle angezeigt, in der sie definiert sind:

Screenshot des Modell-Explorers für ein semantisches Modell. Der Knoten

Der Bildschirm "Kalenderoptionen"

Der Bildschirm "Kalenderoptionen" zeigt die in der ausgewählten Tabelle definierten Kalender an. Hier können Sie:

  • Erstellen eines neuen Kalenders durch Auswählen eines neuen Kalenders
  • Bearbeiten eines vorhandenen Kalenders durch Auswählen von "Bearbeiten"
  • Löschen eines vorhandenen Kalenders durch Auswählen von "Löschen"
  • Festlegen der Tabelle als Datumstabelle durch Auswählen von "Als Datumstabelle markieren"

Screenshot der Kalenderoptionen in einer Tabelle.

Zuweisen von Spaltenkategorien

Das Definieren eines Kalenders umfasst das Zuweisen eines Namens und das Zuweisen von Spalten zu Kategorien. Jede Kategorie stellt eine Zeiteinheit und bestimmte Spaltenkategorien zur Verfügung. Sie müssen mindestens eine primäre Spalte einer Kategorie zuweisen, um Ihren Kalender zu speichern. Jede Kategorie sollte über eine primäre Spalte verfügen und kann null oder mehr zugeordnete Spalten aufweisen. Wann immer Spalten, die einer Kategorie zugeordnet sind, im Kontext sind, weiß Power BI, welche Zeiteinheit sie präsentieren. Darüber hinaus verwendet für einige Funktionen wie TOTALMTD Power BI die primäre Spalte, die der relevanten Kategorie im referenzierten Kalender zugeordnet ist, um die angeforderte Berechnung auszuführen. Wenn Sie einer Kategorie eine Spalte zuweisen möchten, wählen Sie die Kategorie aus dem Menü " Kategorie hinzufügen " und dann die primären und optionalen zugeordneten Spalten aus.

Screenshot des Kalendererstellungs- und Bearbeitungsbildschirms.

Verfügbare Spaltenkategorien

In der folgenden Tabelle sind die verfügbaren Kategorien aufgeführt. Die Tabelle enthält auch Beispielwerte und Kardinalitäten für gregorianische Kalender.

Kategorien sind in zwei Gruppen unterteilt:

  • Abgeschlossen. Daten in Spalten, die den Kategorien "Abgeschlossen" zugewiesen sind, reichen aus, um den Zeitraum eindeutig zu identifizieren.
  • Teilweise. Daten in Spalten, die Teilkategorien zugewiesen sind, reichen nicht aus, um den Zeitraum eindeutig zu identifizieren.
Kategorie Description Typ Beispiel für Kardinalität in einem gregorianischen Kalender Beispielspaltenwerte in einem gregorianischen Kalender
Jahr Das Jahr Vollständig Y = Anzahl der Jahre 2024, 2025
Quartal Das Quartal einschließlich des Jahres Vollständig 4*Y 1. Quartal 2024, 2. Quartal 2025
Quartal des Jahres Das Quartal des Jahres Partial 4 Jahresquartal 1, YQ1, Q1, Quartal 2
Month Der Monat einschließlich des Jahres Vollständig 12*Y ≤ value ≤ 13*Y Januar 2023, 2024 Februar
Monat des Jahres Der Monat des Jahres Partial 12 Januar, Jahr Monat 11, YM11, M11, 11
Monat des Quartals Der Monat des Quartals Partial 3 1, QM2
Woche Die Woche einschließlich des Jahres Vollständig 52 ≤ value ≤ 53 Woche 50 2023, W50-2023, 2023-W50
Woche des Jahres Die Woche des Jahres Partial 52 Woche 50, W50, 50
Woche des Quartals Die Woche des Quartals Partial 13 Quartal-Woche 10, QW10, 10
Woche des Monats Die Woche des Monats Partial 5 Monat Woche 2, MW2, 2
Datum Das Datum Vollständig 365*Y ≤ value ≤ 366*Y 12/31/2025
Tag des Jahres Der Tag des Jahres Partial 365 ≤ value ≤366 365, D1
Tag des Quartals Der Tag des Quartals Partial 92 Quartalstag 10, QD2, 50
Tag des Monats Der Tag des Monats Partial 31 Monatstag 30, MD10, 30
Wochentag Der Wochentag Partial 7 Wochentag 5, WD5, 5

Zusätzlich zu diesen Kategorien können Sie der Kategorie " Zeit" eine beliebige Anzahl von Spalten in der Tabelle zuordnen. Dies ist derzeit nicht in den Kalenderoptionen möglich, sondern kann stattdessen nur mit externen Tools oder TMDL erfolgen.

Hinweis

Kontext für alle Spalten, die der zeitbezogenen Kategorie zugewiesen sind, wird entfernt, wenn Berechnungen in allen Funktionen außer DATEADD und SAMEPERIODLASTYEAR durchgeführt werden. Alle Kontexte von Spalten, die Teil der Tabelle sind, auf der der Kalender definiert ist, aber im Kalender nicht markiert sind, werden beibehalten.

Hinweis

Es wird empfohlen, nur die Spalten in Ihrem Kalender zuzuordnen, die Sie in Zeitintelligenzberechnungen verwenden möchten.

Primäre und zugeordnete Spalten

Die primäre Spalte ist für jede Kategorie erforderlich. Wenn diese Spalte oder alle zugehörigen Spalten, die derselben Kategorie im referenzierten Kalender zugeordnet sind, im Kontext liegen oder die Kategorie zum Ausführen einer Berechnung erforderlich ist, verwendet Power BI die primäre Spalte. Darüber hinaus werden die primären Spalten für die Sortierung verwendet. Wenn die Werte in der primären Spalte nicht zulassen, dass sie wie erwartet sortiert werden können, können Sie entweder die primäre Spalte so konfigurieren, dass sie nach einer anderen Spalte sortiert wird, oder eine andere Spalte verwenden und die ursprüngliche Spalte zu einer zugeordneten Spalte machen. Beispielsweise kann eine Spalte mit Textdaten, die die Monatszahl und das Jahr in einem Format von mm-yyyy (d.h. 01-2024, 02-2024 usw.) enthalten, nicht ordnungsgemäß über mehrere Jahre sortiert werden, aber eine Spalte, die den yyyy-mm-Format verwendet, schon.

Screenshot mit zwei Tabellen. Jede Tabelle verfügt über eine Spalte. Die erste Tabelle enthält eine Spalte, die textbezogene Monats- und Jahresinformationen in einem mm-jjjj-Format enthält, und die zweite enthält die gleichen Informationen in einem jjjj-mm-Format. Die Spalte, die die Mm-yyyy-Formatdaten enthält, ist nicht richtig sortiert.

Sie können einer Kategorie null oder mehr zugeordnete Spalten zugewiesen haben.

Validation

Es ist wichtig, Ihren Kalender zu überprüfen und zu testen, damit Sie sicher sind, dass er Ihren Anforderungen entspricht. Die in Power BI angebotenen Überprüfungen umfassen sowohl Echtzeitüberprüfungen als auch Offlineüberprüfungen.

Hinweis

Sie können Ihren Kalender trotz Offlineüberprüfungsfehlern speichern, aber es wird empfohlen, sie zuerst zu beheben. Validierungsfehler in Echtzeit müssen korrigiert werden, um zu speichern.

Echtzeitüberprüfungen

Die in den Kalendern ausgeführten Echtzeitüberprüfungen sind:

  • Eindeutiger Kalendername. Jeder Kalender muss einen eindeutigen Namen im Semantikmodell haben.
  • Einzelne Zuordnung pro Kalender. Eine Spalte kann nicht zu mehreren Kategorien im selben Kalender gehören.
  • Einzigartigkeit der Periode. Zugewiesene Kategorien sollten den Zeitraum eindeutig identifizieren.
  • Konsistente Kategorisierung. Dadurch wird sichergestellt, dass Spalten der gleichen Kategorie über Kalender hinweg zugeordnet sind.

Eindeutigkeit der Periode

Es sollte immer ein Pfad vorhanden sein, um den Zeitraum für die zugewiesenen Kategorien eindeutig zu identifizieren.

Wenn Sie eine Teilkategorie hinzufügen, überprüft Power BI, ob auch eine übereinstimmende Kombination aus vollständigen oder teilweisen Kategorien im selben Kalender markiert ist. Wenn dies nicht der Fall ist, wird eine Warnung angezeigt.

Screenshot des Kalendererstellungs- und Bearbeitungsbildschirms mit einem Echtzeitüberprüfungsfehler.

Stellen Sie beispielsweise beim Einrichten eines Kalenders für wochenbasierte Berechnungen sicher, dass Sie mindestens eine primäre Spalte einer der folgenden Kategoriengruppen zuweisen:

  • Woche
  • Woche des Jahres, Jahr
  • Woche des Quartals, Quartal
  • Woche des Quartals, Quartal des Jahres, Jahr
  • Woche des Monats, Monat
  • Woche des Monats, Monat des Jahres, Jahr
  • Monatswoche, Quartalsmonat, Quartal
  • Woche des Monats, Monat des Quartals, Quartal des Jahres, Jahr

Konsistente Kategorisierung

Spalten müssen kalenderübergreifend eine einheitliche Kategorie aufweisen. Sie können die gleiche Spalte nicht verschiedenen Kategorien wie "Jahr", " Quartal des Jahres" oder " Zeit" in separaten Kalendern zuweisen.

Offlineüberprüfungen

Offlineüberprüfungen können möglicherweise zeitaufwändig sein, wenn sie auf Tabellendaten zugreifen. Daher werden sie nicht automatisch im Gegensatz zu den Echtzeitüberprüfungen ausgeführt. Um die Überprüfungen auszuführen, wählen Sie "Daten überprüfen" aus:

Screenshot des Kalendererstellungs- und Bearbeitungsbildschirms. Die Schaltfläche

Die Offlineüberprüfungen überprüfen die folgenden Regeln und geben eine Warnung zurück, wenn regeln in Ihrem Kalender ungültig sind:

  • Eine Spalte, die einer Kategorie zugeordnet ist, enthält keine leeren Werte.
  • höhere und niedrigere Kategorien weisen ein 1:n-Kardinalitätsverhältnis auf. Beispielsweise sollten Spalten, die der Kategorie "Jahr" angehören, eine Eins-zu-viele-Kardinalität mit Spalten haben, die der Kategorie "Monat" angehören.
  • Spalten, die Kategorien auf derselben Ebene zugeordnet sind, weisen ein 1:1-Kardinalitätsverhältnis auf. Beispielsweise sollten spalten, die der Kategorie "Monat" zugeordnet sind, eine 1:1-Kardinalität mit den Kombinationen der Spalten aufweisen, die den Kategorien "Monat des Jahres" und "Jahr" zugeordnet sind.
  • Primäre und zugeordnete Spalten, die derselben Kategorie zugewiesen sind, weisen ein 1:1-Kardinalitätsverhältnis auf. Wenn sie beispielsweise der Kategorie "Monat" zugewiesen ist, sollte eine primäre Spalte "Month" und eine zugehörige Spalte "EnglishMonthName" eine 1:1-Kardinalität aufweisen.

Arbeiten mit Kalendern

Sobald ein Kalender definiert ist, können Sie in Zeitintelligenzfunktionen darauf verweisen. Mit der folgenden Berechnung wird beispielsweise ein kumulierter Monatswert der Gesamtmenge unter Verwendung des ISO-454-Kalenders berechnet.

Total Quantity MTD ISO-454 = TOTALMTD ( [Total Quantity], 'ISO-454' )

Wenn der Kalender nicht definiert ist und ein Fehler zurückgegeben wird:

Screenshot eines Maßes, das die TOTALMTD-Funktion mit einem Kalenderparameter für einen nicht vorhandenen Kalender verwendet.

Selbst wenn der Kalender definiert ist, gibt ein Maß möglicherweise trotzdem einen Fehler zurück. Dies geschieht, wenn die verwendete Funktion erwartet, dass eine Kategorie im Kalender vorhanden ist und der Kalender nicht über diese Kategorie verfügt. Beispielsweise erwartet TOTALWTD, dass bestimmte Kategorien im Kalender vorhanden sind. Wenn sie es nicht sind, wird ein Fehler zurückgegeben.

Screenshot einer Messung unter Verwendung der TOTALWTD Funktion mit einem gültigen Kalenderverweis, der aber die erforderlichen Kategorien nicht definiert.

Zeitintelligenzfunktionen und erforderliche Kategorien

Viele Zeitintelligenzfunktionen erfordern ausreichende Kategorien, die in den Kalender einbezogen werden, auf den im Funktionsaufruf verwiesen wird, damit Power BI eine eindeutig bestimmte Zeiteinheit identifizieren kann. Mit anderen Worten, Power BI muss in der Lage sein, schrittweise von der Berechnungsebene bis zu einem einzelnen Jahr aufzusteigen. Wenn Sie z. B. eine Berechnung für Quartale ausführen, weisen Sie entweder die Kategorie "TOTALQTD" zu oder sowohl "Quartal des Jahres" als auch "Jahr" im Kalender entsprechend der Gültigkeitsprüfung "Periodeneinzigartigkeit" zu.

Hinweis

Für einige Funktionen ist ihr Name ein Hinweis darauf, welche Ebene die Berechnung betreibt (z. B TOTALYTD. ), während sie für andere von den Parametern und dem Kontext abhängig ist (z. B DATEADD. ).

Kontext löschen

Zeitintelligenzfunktionen arbeiten, indem sie zu einem bestimmten Zeitpunkt beginnen und dann einige Vorgänge ausführen, um einen anderen Zeitpunkt zu erzielen. Natürlich kann der anfängliche Zeitpunkt mit diesem Ergebnis in Konflikt geraten, wodurch eine Filterkontext-Schnittmenge entsteht, die standardmäßig teilweise oder leere Ergebnisse liefert. Stellen Sie sich beispielsweise das folgende Szenario vor.

Kalenderdefinition

Wir haben einen einfachen gregorianischen Kalender, der drei Kategorien markiert, die wie folgt definiert sind:

Kategorie Hauptspalte
Jahr Jahr
Monat des Jahres MonatDesJahres
Quartal Quartal

Definitionen von Messgrößen

Es werden zwei grundlegende Maßnahmen definiert: eine, um den Gesamtumsatz zu berechnen, und eine weitere, um den Gesamtumsatz aus dem vorherigen Quartal zu berechnen:

[TotalSales] = CALCULATE ( SUM( FactInternetSales[SalesAmount] ) )
[LastQuarterSales] = CALCULATE ( [TotalSales], DATEADD( GregorianCalendar, -1, QUARTER ) )

Beispiel: So funktioniert das Löschen von Kontexten

Unsere visuelle Tabelle durchsucht die Granularität eines Monats mithilfe der Spalten "Year " und "MonthOfYear ":

Jahr MonatDesJahres Gesamtumsatz Verkäufe im letzten Quartal
2011 1 10
2011 2 20
2011 3 30
2011 4 40 10
2011 5 50 20

In dieser Tabelle wird die fett formatierte Zeile auf Monatsbasis für den Monat April 2011 betrachtet. Daher werden alle Maßnahmen in dieser Zeile im Filterkontext von [Jahr] == 2011 und [MonatDesJahres] == 4 ausgewertet.
Wie erwartet, wird TotalSales hier als Gesamtumsatz für April 2011 berechnet.

LastQuarterSales berechnet TotalSales ähnlich, aber aufgrund eines zusätzlichen Filters, der von der DATEADD kalenderbasierten Funktion bereitgestellt wird. Für diese Zeile hätte DATEADD einen Startpunkt im April 2011 und würde den Zeitpunkt liefern, der genau ein Quartal zurückliegt: Januar 2011. Daher kann man davon ausgehen, dass diese TotalSales unter den folgenden beiden Filterkontexten berechnet werden:

  • Bereitgestellt von den Browserspalten der aktuellen Zeile: { [Year] == 2011, [MonthOfYear] == 4 } (Äquivalent, April 2011)
  • Bereitgestellt vom DATEADD Filter: { [Year] == 2011, [MonthOfYear] == 1 } (Entsprechend Januar 2011)

Diese beiden Filterkontexte würden eindeutig in Konflikt geraten – wir können den Gesamtumsatz im aktuellen Monat nicht als Januar 2011 und April 2011 bewerten. Eine solche Schnittmenge würde keine Ergebnisse liefern. Dies geschieht jedoch nicht. Basierend auf der Kalenderdefinition identifizieren kalenderbasierte Zeitintelligenzfunktionen stattdessen, welche Spalten der Kategorien zu Konflikten führen können, nach dem von der Funktion ausgeführten Zeitvorgang. In diesem Fall DATEADD erledigt eine Verschiebung auf der Ebene des Quartals. Die Funktion gibt an, dass sich die Kategorien "Jahr " und " Monat des Jahres " aufgrund einer Änderung in den Spalten der Kategorie " Quartal " ändern können. Daher löscht die Funktion den Filterkontext für alle (primären und zugeordneten) Spalten, die mit diesen Kategorien gekennzeichnet sind.

Mit anderen Worten, wir können sagen, dass die Kategorien "Jahr " und " Monat des Jahres " Abhängigkeiten der Kategorie "Quartal " sind. Umgekehrt können wir sagen, dass die Kategorie "Quartal " von den Kategorien " Jahr " und "Monat des Jahres " abhängig ist.

Funktionsweise der Kontextbereinigung

Gitterstrukturdiagramm aller Kalenderkategorien.

Dieses Diagramm wird bereitgestellt, um die Abhängigkeiten zwischen den verschiedenen Zeitkategorien besser zu visualisieren. Jede Kategorie in diesem Gitter stellt alle Spalten (primär und zugeordnet) dar, die mit dieser Kategorie markiert sind. Kategorien werden über Pfeile mit ihren Abhängigkeiten verbunden. Beispielsweise ist "Monat" von "Jahr", "Quartal des Jahres", "Monat des Quartals", "Quartal" und "Monat des Jahres" abhängig.

Wenn der Kontext für eine Spalte oder die zugehörige Sortierung nach Spalte festgelegt wird, die in einem Kalender markiert ist, wird der vorherige Filterkontext gelöscht für:

  1. Alle Kategorieabhängigkeiten von X. Dies kann als alle Kategorien oberhalb von X betrachtet werden.
  2. Alle Kategoriedependenzen von X und seinen Abhängigkeiten (d. h. von Punkt 1 oben). Dies kann als alle Kategorien unter X und alle Kategorien in 1 oben betrachtet werden.

Hinweis

Das Löschen von Kontext erfolgt in Spalten, die in einem Kalender kategorisiert oder mit Sortierspalten verknüpft sind, unabhängig davon, ob der Kontext mithilfe von Zeit-Intelligenzfunktionen oder anderweitig festgelegt wird.

Die meisten Zeitintelligenzfunktionen, mit Ausnahme DATEADD von und SAMEPERIODLASTYEAR, löschen den Kontext für alle zeitbezogenen Spalten und zugeordnete Sortierspalten.

Kalenderübergreifendes Verhalten

Wenn in derselben Tabelle mehrere Kalender definiert sind, werden diese Prozesse für jeden kalender abgeschlossen, der in der Tabelle definiert ist. Dies schließt die Bemerkung zur Bereinigung des Kontexts von zeitbezogenen Spalten ein. Angenommen, eine Tabelle definiert drei Kalender: Kalender1, Kalender2 und Kalender3. Wenn der Filterkontext für die Kategorie "X" in Kalender1 festgelegt ist, werden die oben genannten Prozesse in allen drei Kalendern ausgeführt.

Beispiel: Filter auf "Quartal" gesetzt

Wenn der Filterkontext für die Kategorie "Quartal" festgelegt ist, läuft der Vorgang wie folgt ab.

  1. Zunächst werden alle Abhängigkeiten der Kategorie "Quartal" berücksichtigt.

    Beispiel für das Löschen des Filterkontexts, beginnend mit der Kategorie Quartal: Abhängigkeiten.

  2. Als Nächstes werden alle Abhängigen von "Quarter" und deren Abhängigkeiten berücksichtigt.

    Beispiel für das Löschen des Filterkontexts ab Kategorie Quartal: Abhängige.

  3. Schließlich würde das Endergebnis wie folgt aussehen. Alle rot gefärbten Kategorien würden ihren vorherigen Filterkontext entfernen, und ein neuer Kontext wird auf das Quartal festgelegt.

    Beispiel für das Verhalten beim Löschen des Filterkontexts beginnend mit der Kategorie Quartal: Ergebnisse

TMDL-Skript für Kalender

createOrReplace

	table Date
		lineageTag: xyz

		column Date
			dataType: dateTime
			formatString: Long Date
			lineageTag: abc
			summarizeBy: none
			sourceColumn: Date

        column Year
			dataType: string
			lineageTag: abc
			summarizeBy: none
			sourceColumn: Year

			annotation SummarizationSetBy = Automatic
        
        column Month
			dataType: string
			lineageTag: def
			summarizeBy: none
			sourceColumn: Month

			annotation SummarizationSetBy = Automatic

        column MonthName
			dataType: string
			lineageTag: ghi
			summarizeBy: none
			sourceColumn: MonthName
			sortByColumn: SortByMonth

			changedProperty = SortByColumn

			annotation SummarizationSetBy = Automatic

        column DutchMonthName
			dataType: string
			lineageTag: jkl
			summarizeBy: none
			sourceColumn: DutchMonthName

			annotation SummarizationSetBy = Automatic

        column 'Holiday Name'
			dataType: string
			lineageTag: mno
			summarizeBy: none
			sourceColumn: Holiday Name

			annotation SummarizationSetBy = Automatic
        
        column IsWorkingDay
			dataType: string
			lineageTag: pqr
			summarizeBy: none
			sourceColumn: IsWorkingDay

			annotation SummarizationSetBy = Automatic
		...	
		
		calendar 'Demo Calendar'
			lineageTag: def

			calendarColumnGroup = year
				primaryColumn: Year

			calendarColumnGroup = month
				primaryColumn: Month
				associatedColumn: DutchMonthName
				associatedColumn: MonthName
			
			calendarColumnGroup
                column: 'Holiday Name'
                column: isWorkingDay

Hinweis

Beachten Sie, dass die Spalten als calendarColumnGroup markiert werden, wenn Sie keine Kategorie für die in TMDL angeben. In diesem Beispiel sind "Feiertagsname " und "isWorkingDay " zeitbezogene Spalten im Demokalender.

Alles zusammenführen: Beispiele für Zeitverlagerungen

Einige Zeitintelligenzfunktionen verschieben den Kontext nur lateral, wobei alle Spalten berücksichtigt werden, während andere hierarchische Schichten ausführen– das Beibehalten oder Löschen des Kontexts basierend darauf, ob Spalten im Kalender markiert sind. Die Zeitintelligenzfunktionen können in zwei Gruppen unterteilt werden, je nachdem, ob sie hierarchische Schichten zulassen:

  • Behoben. Funktionen in dieser Gruppe sind DATEADD und SAMEPERIODLASTYEAR. Diese Funktionen ermöglichen nur laterale Zeitverschiebungen und geben keine Werte aus einer anderen Detailebene zurück.
  • Flexibel. Diese Gruppe enthält alle anderen Zeitintelligenzfunktionen. Diese Funktionen ermöglichen hierarchische Zeitverschiebungen, und abhängig von der Kalendereinrichtung können Ergebnisse aus einer anderen Detailebene zurückgegeben werden.

Um diese Verhaltensweisen anzuzeigen, werden wir uns mit einem einfachen Datenmodell befassen, das aus zwei Tabellen, zwei Kalendern und fünf Measures besteht.

Tabellen und Beziehungen

In diesem Beispiel haben wir das folgende einfache Datenmodell:

Table Columns
Datum Jahr, IsWorkingDay, Datum
Vertrieb OrderKey, Menge, Bestelldatum

Hier sind einige Beispielzeilen in der Tabelle "Datum ": Screenshot mit den ersten 14 Zeilen der Beispieltabelle

Hier sind einige Beispielzeilen in der Tabelle " Sales ": Screenshot mit den ersten neun Zeilen der Beispieltabelle

Die Tabellen "Umsatz" und "Datum" sind über "Bestelldatum" und "Datum" verknüpft.

Screenshot der Modellansicht für das Beispielmodell. Sie zeigt die Tabelle

Calendars

In der Tabelle "Datum " haben wir Kalender mit diesen Zuordnungen definiert:

CalendarName Kategorie Hauptspalte
Gregorianischer Kalender Jahr Jahr
Datum Datum
GregorianWithWorkingDay Jahr Jahr
Datum Datum
Zeitbezogene Aspekte IsWorkingDay

Die entsprechende TMDL-Definition dieser beiden Kalender lautet:

ref table Date
    calendar 'Gregorian'
        lineageTag: xyz
    
        calendarColumnGroup = year
    	    primaryColumn: Year
    
    	calendarColumnGroup = date
    		primaryColumn: Date
    
    calendar 'GregorianWithWorkingDay'
    	lineageTag: dc4fc383-1661-4112-8afb-930d324fbb6e
    
    	calendarColumnGroup = year
    		primaryColumn: Year
    
    	calendarColumnGroup = date
    		primaryColumn: Date
    
    	calendarColumnGroup
    		column: IsWorkingDay   

Maßnahmen

In der Tabelle "Vertrieb" definieren wir die folgenden Kennzahlen.

Total Quantity = SUM ( 'Sales'[Order Quantity] )

OneYearAgoQuantity =
CALCULATE ( [Total Quantity], DATEADD ( 'Gregorian', -1, YEAR ) )

OneYearAgoQuantityTimeRelated =
CALCULATE ( [Total Quantity], DATEADD ( 'GregorianWithWorkingDay', -1, YEAR ) )

FullLastYearQuantity =
CALCULATE ( [Total Quantity], PARALLELPERIOD ( 'Gregorian', -1, YEAR ) )

FullLastYearQuantityTimeRelated =
CALCULATE ( [Total Quantity], PARALLELPERIOD ( 'GregorianWithWorkingDay', -1, YEAR )
)

Beispiel für laterale Schicht

Lassen Sie uns ein Diagramm erstellen, das Jahr, Monat des Jahres, IstArbeitstag, Gesamte Menge, Menge vor einem Jahr und MengeVorEinemJahrZeitbezogen für 2024 und 2025 zeigt:

Screenshot einer Tabellenanzeige, die Year, IsWorkingDay, Total Quantity, OneYearAgoQuantity und OneYearAgoQuantityTimeRelated zeigt. Die Werte für OneYearAgoQuantity und OneYearAgoQuantityTimeRelated für 2025 stimmen mit den Werten für 2024 für dieselben IsWorkingDay-Werte überein.

Alle Werte für OneYearAgoQuantity und OneYearAgoQuantityTimeRelated für 2025 stimmen mit der Gesamtmenge von genau einem Jahr zuvor (2024) für denselben IsWorkingDay-Wert überein.

Dies zeigt, dass DATEADD den Kontext für jede Spalte in der Tabelle "Datum" beibehält, die den verwendeten Kalender enthält, unabhängig davon, ob der Kalender nicht markiert ist oder als zeitbezogen markiert ist. Da wir in unseren Maßdefinitionen angewiesen haben, um ein DATEADD zurück zu verschieben, war die einzige Spalte, deren Kontext verschoben wurde, die Spalte, die der Kategorie Jahr zugeordnet war. Egal ob die Spalte IsWorkingDay im Kalender als zeitbezogen markiert oder gar nicht markiert wurde, das Ergebnis blieb unverändert. Die einzige andere Funktion, die dieses Verhalten anzeigt, ist SAMEPERIODLASTYEAR.

Beispiel für hierarchische Schicht

Sehen wir uns nun ein Beispiel an, bei dem es das Ergebnis tatsächlich verändert, ob eine Spalte als zeitbezogen markiert ist oder nicht.

Dazu erstellen wir dasselbe visuelle Element wie im vorherigen Beispiel neu, aber diesmal verwenden wir die Measures „FullLastYearQuantity“ und „FullLastYearQuantityTimeRelated“: Screenshot, der eine Tabellenansicht zeigt, die „Year“, „IsWorkingDay“, „Total Quantity“, „FullLastYearQuantity“ und „FullLastYearQuantityTimeRelated“ beinhaltet. Die Werte für „FullLastYearQuantity“ im Jahr 2025 stimmen mit den Werten für 2024 für dieselben „IsWorkingDay“-Werte überein, aber die Werte für „FullLastYearQuantityTimeRelated“ sind unabhängig von den „IsWorkingDay“-Werten gleich dem Gesamtwert der Menge.

Dies zeigt, dass PARALLELPERIOD den Kontext für Spalten, die nicht im Kalender markiert sind, beibehält und den Kontext für diejenigen löscht, die als zeitbezogen markiert sind. FullLastYearQuantity hat den gregorianischen Kalender verwendet, in dem IsWorkingDay nicht im Kalender markiert wurde, während "FullLastYearQuantityTimeRelated" den GregorianWithWorkingDay-Kalender verwendet hat, in dem IsWorkingDay als Zeitverknürung markiert wurde. Alle Zeitintelligenzfunktionen außer DATEADD und SAMEPERIODLASTYEAR verhalten sich auf diese Weise.

Bonus: Wenn Sie wirklich erzwingen möchten, dass der Kontext für zeitbezogene Spalten beibehalten wird, können Sie Folgendes verwenden VALUES:

FullLastYearQuantityTimeRelatedOverride =
CALCULATE ( [Total Quantity], PARALLELPERIOD ( 'GregorianWithWorkingDay', -1, YEAR ), VALUES('Date'[IsWorkingDay]) )

Gibt in diesem Fall FullLastYearQuantityTimeRelatedOverride die gleichen Ergebnisse wie FullLastYearQuantity.

Conclusion

Im obigen aufwendigen Beispiel wird gezeigt, dass sich unterschiedliche Zeitintelligenzfunktionen unterschiedlich verhalten, je nachdem, ob Spalten im Kalender als zeitbezogen gekennzeichnet sind. DATEADD und SAMEPERIODLASTYEAR nur laterale Zeitverschiebungen ausführen. Alle anderen Zeitintelligenzfunktionen ermöglichen hierarchische Zeitverschiebungen.

Verwenden Sie DATEADD mit Kalendern.

Die DATEADD-Funktion bietet spezifische Parameter, die eine detaillierte Kontrolle darüber ermöglichen, wie Verschiebungen ausgeführt werden, wenn die Auswahl auf einer feineren Ebene liegt als die durch den Parameter interval angegebene Verschiebungsstufe in DATEADD. Dies geschieht beispielsweise, wenn Sie Daten auf der Datumsebene anzeigen, aber den interval Parameter auf DATEADDMONTH festlegen. Beispielsweise führt die Verschiebung eines Zeitraums, der den 3. bis 10. März über einen Monat erstreckt, in einem gregorianischen Kalender zum 3. bis 10. April. Da sich jedoch Monate in gregorianischen Kalendern in der Länge unterscheiden, kann dies zu Mehrdeutigkeiten führen, wenn man die Daten verschiebt. Im Folgenden finden Sie Beispielszenarien, die auf einem gregorianischen Kalender basieren:

Wechsel von einer kürzeren zu einer längeren Periode

Wenn Sie z. B. einen Monat mit einer Auswahl im Februar nach vorne verschieben, ist der Zielmonat März. Sie können den extension Parameter verwenden, um zu beeinflussen, wie die Schicht ausgeführt wird:

Erweiterungsparameterwert Description Ergebnis
precise Dies behält den ursprünglichen Datumsbereich streng bei. Der 25. bis 28. Februar wird auf den 25. bis 28. März verschoben.
extended Ermöglicht es dem Fenster, sich gegen Ende des Monats zu vergrößern. Der 25. bis 28. Februar wird auf den 25. bis 31. März verschoben.

Übergang von einer längeren zu einer kürzeren Periode

Wenn Sie beispielsweise eine Auswahl im März um einen Monat zurückversetzen, ist der Zielmonat Februar.

Sie können den truncation Parameter verwenden, um zu beeinflussen, wie die Schicht ausgeführt wird:

Wert des Trunkierungsparameters Description Ergebnis
anchored Verankert das Ergebnis an das letzte gültige Datum des kleineren Monats. Der 31. März wird auf den 28. Februar (oder 29 im Schaltjahr) verschoben.
blank Wenn kein verschobenes Datum vorhanden ist, geben Sie leer zurück. Das Zurückverschieben des 31. März um einen Monat ergibt leer (da der 31. Februar nicht existiert).

Überlegungen zum Arbeiten mit kalenderbasierter Zeitintelligenz

  • Durchführen einer Zeitintelligenzberechnung für eine Faktentabelle, die einen Kalender definiert und den Regeln auf Zeilenebene (RLS) unterliegt und zu unerwarteten Ergebnissen führen kann.
  • Die Leistung dieses Vorschaufeatures ist nicht repräsentativ für das Endprodukt.
  • Sie können noch keine Kalender im Power BI-Dienst erstellen.
  • Sie sollten keine automatischen Datums-/Uhrzeittabellen mit benutzerdefinierten Kalendern verwenden.
  • Sie können keine Kalender mit live verbundenen oder zusammengesetzten Modellen verwenden.
  • Es wird empfohlen, nur die Spalten in Ihrem Kalender zuzuordnen, die Sie in Zeitintelligenzberechnungen verwenden möchten.
  • Kalender unterliegen sowohl Echtzeit- als auch Offlineüberprüfungen . Sie können Ihren Kalender trotz Offlineüberprüfungsfehlern speichern, aber es wird empfohlen, sie zuerst zu beheben. Validierungsfehler in Echtzeit müssen korrigiert werden, um zu speichern.
  • Jeder Kalender muss einen eindeutigen Namen innerhalb des Datenmodells haben.
  • Eine einzelne Tabelle kann mehrere Kalender enthalten
  • Die Tabelle, die den Kalender enthält, muss weniger als 200 Spalten aufweisen. Wenn die Tabelle mehr als 20.000 Zeilen enthält, sind die Überprüfungen nicht verfügbar, Sie können aber trotzdem einen Kalender hinzufügen.
  • Ein Kalender muss mindestens eine primäre Spalte einer Kategorie zuweisen.
  • Ein Kalender kann nur Spalten aus einer eigenen Tabelle zu Kategorien zuweisen.
  • Jede Kategorie sollte eine primäre Spalte haben und es können null oder mehr zugeordnete Spalten zugewiesen werden.
  • DATEADD verfügt über neue Parameter zum Steuern des Erweiterungs- und Erweiterungsverhaltens, die in IntelliSense nicht erkannt werden.
  • Jede angegebene Spalte kann nur einer Kategorie zugeordnet werden.
  • Sie können keine Zeitintelligenzfunktionen, die Kalender verwenden, verschachteln. Die folgende DAX-Anweisung wird beispielsweise nicht unterstützt:
ThisIsNotSupported = PREVIOUSDAY ( PREVIOUSMONTH( 'Calendar' ) )

Stattdessen können Sie folgende Aktionen ausführen:

ThisWorks = CALCULATETABLE ( PREVIOUSDAY ( 'Calendar' ), PREVIOUSMONTH( 'Calendar' ) )

Erstellen einer Datumstabelle mit integrierten Tools

In den folgenden Beispielen wird eine Datumstabelle vom 1. Januar 2010 bis zum 31. Dezember 2030 mithilfe von Power Query M oder DAX erstellt. Sie enthält die folgenden Spalten: Jahr, Monatsnummer, Monatsname, Monat Jahr, Quartal, Jahresquartal, Tag und Datum.

Power Query M

let
    StartDate = #date(2010, 1, 1),
    EndDate = #date(2030, 12, 31),
    NumberOfDays = Duration.Days(EndDate - StartDate) + 1,
    DateList = List.Dates(StartDate, NumberOfDays, #duration(1,0,0,0)),
    DateTable = Table.FromList(DateList, Splitter.SplitByNothing(), {"Date"}),
    AddYear = Table.AddColumn(DateTable, "Year", each Date.Year([Date]), Int64.Type),
    AddMonthNumber = Table.AddColumn(AddYear, "Month Number", each Date.Month([Date]), Int64.Type),
    AddMonthName = Table.AddColumn(AddMonthNumber, "Month Name", each Date.ToText([Date], "MMMM"), type text),
    AddMonthYear = Table.AddColumn(AddMonthName, "Month Year", each Date.ToText([Date], "MMM yyyy"), type text),
    AddQuarter = Table.AddColumn(AddMonthYear, "Quarter", each "Q" & Text.From(Date.QuarterOfYear([Date])), type text),
    AddYearQuarter = Table.AddColumn(AddQuarter, "Year Quarter", each Text.From(Date.Year([Date])) & " Q" & Text.From(Date.QuarterOfYear([Date])), type text),
    AddDay = Table.AddColumn(AddYearQuarter, "Day", each Date.Day([Date]), Int64.Type)
in
    AddDay

DAX

DateTable =
ADDCOLUMNS (
    CALENDAR ( DATE ( 2010, 1, 1 ), DATE ( 2030, 12, 31 ) ),
    "Year", YEAR ( [Date] ),
    "Month Number", MONTH ( [Date] ),
    "Month Name", FORMAT ( [Date], "MMMM" ),
    "Month Year", FORMAT ( [Date], "MMM YYYY" ),
    "Quarter", "Q" & FORMAT ( [Date], "Q" ),
    "Year Quarter",
        FORMAT ( [Date], "YYYY" ) & " Q"
            & FORMAT ( [Date], "Q" ),
    "Day", DAY ( [Date] ),
    "Date", [Date]
)

Weitere Informationen und weitere Optionen finden Sie in den Datumstabellen.

Weitere Informationen zu diesem Artikel finden Sie in den folgenden Ressourcen: