Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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:
- Power Query M. Sie können die Funktion List.Dates verwenden. Ein Beispiel wird weiter unten in diesem Dokument bereitgestellt.
- DAX. Sie können die Funktionen CALENDAR oder CALENDARAUTO verwenden, um eine einfache berechnete Datumstabelle zu generieren. Sie können auch eine komplexere DAX-Anweisung verwenden, um eine Datumstabelle zu erstellen. Ein Beispiel wird weiter unten in diesem Dokument bereitgestellt.
- Externe Tools.
- Laden aus einer Quelle, z. B. einem Quellsystem, einer Datei oder einem anderen Power BI-Semantikmodell.
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 Kalender
- Sporadische Datumsangaben
- Wochenbasierte Berechnungen
- Leistungsverbesserungen
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.
- Wechseln Sie in Power BI Desktop zu Datei > Optionen und Einstellungen > Optionen > Vorschaufeatures.
- Wählen Sie die Vorschau der erweiterten DAX-Zeitintelligenz aus.
- Wählen Sie OK aus.
- 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:
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:
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"
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.
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.
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.
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:
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:
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.
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
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:
- Alle Kategorieabhängigkeiten von X. Dies kann als alle Kategorien oberhalb von X betrachtet werden.
- 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.
Zeitbezogene Spalten
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.
Zunächst werden alle Abhängigkeiten der Kategorie "Quartal" berücksichtigt.
Als Nächstes werden alle Abhängigen von "Quarter" und deren Abhängigkeiten berücksichtigt.
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.
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 ":
Hier sind einige Beispielzeilen in der Tabelle " Sales ":
Die Tabellen "Umsatz" und "Datum" sind über "Bestelldatum" und "Datum" verknüpft.
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:
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“:
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.
Verwandte Inhalte
Weitere Informationen zu diesem Artikel finden Sie in den folgenden Ressourcen: