Für die automatische monatliche Rollierung von Dashboards gibt es in Power BI die relativen Zeitfilter (als Slicer oder in der Filterleiste). Diese können aber nur eingesetzt werden, wenn der Periodenwechsel streng nach Kalender, also am 01. des Monats um 0:00, stattfindet. Der folgende Beitrag zeigt, wie mit einfachen DAX Bausteinen eine Lösung mit individuellem Abschlußtstichtag realisiert werden kann.
Schritt 1: Parameter Tabelle mit Abschlußstichtagen
Dem Datenmodell wird eine unverknüpfte (und auch nicht verknüpfbare) Parameter Tabelle mit den Closing Dates hinzugefügt:
Die Tabelle enthält die Abschlußstichtage für das laufende Jahr und den jeweiligen Gültigkeitszeitraum für den reportingfähigen Zeitraum:
Schritt 2: Measures zur Ermittlung des aktuellen Closing Dates
Im nächsten Schritt wird mit einem Measure der aktuell zutreffende Abschlußstichtag ermittelt. Das Measure filtert die Tabelle Closing Dates auf jene Datensätze, deren Closing Date bis zum heutigen Tag liegen und liefert dann das höchste Closing Date dieser gefilterten Liste:
Current Closing Date =
CALCULATE(
MAX('Closing Dates'[Closing Date]);
FILTER(
'Closing Dates';
'Closing Dates'[Closing Date] <= TODAY()
)
)
Zum Zeitpunkt der Erstellung dieses Blogbeitrags wird der 03.03.2023 ermittelt:
Ergänzend wird in einem weiteren Measure der aktuelle Reporting Ultimo zur Anzeige in den Reports ermittelt, dazu wird ein einfaches LOOKUPVALUE() - vergleichbar einem SVERWEIS() in Excel - eingesetzt:
Current Reporting Date =
LOOKUPVALUE(
'Closing Dates'[Reporting Until];
'Closing Dates'[Closing Date];
[Current Closing Date]
)
Der aktuelle Tag für den Screenshot oben wird mit folgenden Measure ermittelt:
Today = TODAY()
Schritt 3: Calculated Column in der Datumsdimension
Jetzt wird der ermittelte aktuelle Abschlußstichtag in die Dim Dates Tabelle als Calculated Column eingesetzt. Mit zwei LOOKUPVALUES() wird das Start- und das Enddatum laut Closing Dates Tabelle abgefragt und als Bedingung für die TRUE() / FALSE() Ausgabe in dieser Spalte verwendet:
Open for Reporting =
VAR varFrom =
LOOKUPVALUE(
'Closing Dates'[Reporting From];
'Closing Dates'[Closing Date];
[Current Closing Date]
)
VAR varUntil =
LOOKUPVALUE(
'Closing Dates'[Reporting Until];
'Closing Dates'[Closing Date];
[Current Closing Date]
)
RETURN
IF(
'Dim Dates'[Date] >= varFrom
&& 'Dim Dates'[Date] <= varUntil;
TRUE();
FALSE()
)
Konkret liefert die Calculated Column ein TRUE() an jedem Tag, der innerhalb des definierten Zeitraums laut Closing Dates Tabelle liegt:
Visualisiert sieht das so aus:
Schritt 4: Aktivieren als Page/Report Level Filter
Jetzt braucht die Column nur noch als Page Level oder Report Level Filter eingesetzt zu werden, in der Praxis sollte der Filter wohl gesperrt und ggfs. auch ausgeblendet werden:
Die Verwendung als Filter ist übrigens auch der Grund, warum im Schritt 3 eine Calculated Column und nicht ein Measure angelegt wurde.
Zusammenfassung
Die Lösung ist einfach aufgebaut und kann in alle Datenmodelle eingesetzt werden, die eine mit den Faktentabellen verknüpfte Datumsdimension haben. Der Gültigkeitszeitraum der einzelnen Einträge kann übrigens auch die Vorjahre umfassen, um auch Vorjahresvergleiche und Zeitreihen zeigen zu können.