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/

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.