Erstellen einer einfachen Datumstabelle in DAX

Orginal Beitrag “DAX 101: Creating a simple date table in DAX” von Alberto Ferrari

Dieser Blogbeitrag basierend auf dem Beitrag von sqlbi zeigt, wie Sie eine grundlegende Datumstabelle mit einer DAX berechneten Tabelle erstellen.

Für die meisten Zeitartenberechnungen wie das laufende Jahr (YTD), das Vorjahr oder dem gleitenden Durchschnitt ist eine Datumstabelle erforderlich. Wenn in einem Datenmodell noch keine Datumstabelle vorhanden ist, können Sie eine mit einer berechneten Tabelle und einem einfachen DAX-Code erstellen.

Die Datumstabelle muss folgenden Regeln entsprechen:

  • Alle Tage – vom ersten bis zum letzen Tag eines jeden Jahres – müssen vorhanden sein.
  • Jedes Datum erhält eine eigene Zeile.
  • Es sind keine Lücken erlaubt, auch wenn ein Datum nicht von einem Ereignis referenziert wird.
  • Die Tabelle muss eine Datum/Uhrzeit-Datentyp-Spalte enthalten.

In DAX gibt es einige Funktionen, die eine einfache Datumstabelle erstellen: CALENDAR und CALENDARAUTO. Beide Funktionen geben eine Tabelle mit einer einzelnen Spalte mit dem Namen “Date” und einer Liste von Werten für Ihre Daten zurück. CALENDAR benötigt die Grenzen des Datumssatzes, während CALENDARAUTO nach allen Datumsspalten im Datenmodell sucht und automatisch das erste und letzte Jahr findet, auf das im Modell verwiesen wird.

Leider ist keine dieser beiden Funktionen perfekt. Tatsächlich durchsucht CALENDARAUTO alle Datumsspalten des Datenmodells, einschließlich beispielsweise des Geburtsdatums des Kunden. Infolgedessen erstellt CALENDARAUTO möglicherweise eine Datumstabelle mit vielen irrelevanten Jahren. Auf der anderen Seite, erfordert CALENDAR die Berechnung des MIN und MAX Datums aller Transaktionen (z.B. Umsatz) und die Verschiebung auf den jeweils ersten und den letzten Tag der gegebenen Jahre.

Der folgende Ausdruck ist beispielsweise ein guter Ausgangspunkt für eine Datumstabelle.

Datum = 
VAR StartDatum = DATE(YEAR(MIN(Verkaufsbeleg[Buchungsdatum])),1,1)
VAR EndDatum = DATE(YEAR(MAX(Verkaufsbeleg[Buchungsdatum])),12,31)
RETURN
ADDCOLUMNS(
  SELECTCOLUMNS(
      CALENDAR(StartDatum,EndDatum),
      "Datum",[Date]
  ),
  "Jahr", YEAR([Datum]),
  "Monat im Jahr", FORMAT(MONTH([Datum]), "00"),
  "Monat", YEAR([Datum]) & " " & FORMAT(MONTH([Datum]), "00"),
  "Quartal im Jahr", "Q." & FORMAT([Datum],"q"),
  "Quartal", YEAR([Datum]) & " Q." & FORMAT([Datum],"q")
)

Bei der Verwendung der beiden Variablen StartDatum und EndDatum, ist der restliche Code nicht vom Datenmodell abhängig und kann somit einfach in ein anderes Datenmodell eingefügt und mit geringfügigen Änderungen an verschiedene Bedürfnisse angepasst werden.

Sobald die Datumstabelle vorhanden ist, empfiehlt es sich, sie wie folgt als Datumstabelle zu markieren.

Als Datumstabelle markieren

Dies vereinfacht den Code zum Erstellen von Zeitintelligenzberechnungen und deaktiviert automatisch die automatische Datums- / Zeitfunktion.

Das oben gezeigte Code-Snippet ist ein guter Ausgangspunkt für eine echte Datumstabelle. Spezifische Anforderungen tragen zu einer umfassenderen Definition bei. Wenn beispielsweise der Wochentag erforderlich ist, können Spalten mit dem Wochentag als Zeichenfolge oder als Zahl hinzugefügt werden. Das Gleiche gilt für die Definition von Geschäftsmonaten, Jahren und sonstigen erforderlichen Spalten.

Ein vollständigeres Beispiel für eine Datumstabelle finden Sie im sqlbi Artikel Reference Date Table in DAX and Power BI.

Quelle: https://www.sqlbi.com/articles/creating-a-simple-date-table-in-dax/

Veröffentlicht von

Marcus Wegener

Marcus Wegener

Marcus Wegener ist Anwendungsentwickler für Business Intelligence und erstellt Lösungen, mit denen sich große Datenmengen schnell analysieren lassen. Kunden nutzen seine Lösungen, um die Vergangenheit zu analysieren, die Gegenwart zu steuern und die Zukunft zu planen, um damit mehr Erfolg zu generieren. Dabei ist seine einzigartige Kombination aus Wissen und Auffassungsgabe ein Garant für ihren Erfolg.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

I accept that my given data and my IP address is sent to a server in the USA only for the purpose of spam prevention through the Akismet program.More information on Akismet and GDPR.