Peaks & Pies Logo
Business Intelligence
03. Juni 2026- Aktualisiert am 03. Juni 20265 Min. Lesezeit

Dynamische Datumsfilter in Power BI: So wandert das Enddatum automatisch mit

Dynamische Datumsfilter in Power BI - Date Range Slicer Illustration

Wer in Power BI Berichte baut, stolpert früher oder später über ein ziemlich hartnäckiges Usability-Problem beim klassischen Datums-Slicer. Das Szenario ist fast immer gleich: Man stellt den Slicer im Power BI Desktop so ein, dass er vom Jahresbeginn bis zum aktuellen Tag filtert, und veröffentlicht den Bericht. Das Problem? Power BI speichert diesen Zustand absolut starr ab. Nach der nächsten Datenaktualisierung steht das Enddatum immer noch auf dem Tag der Veröffentlichung. Das Enddatum wandert nicht automatisch mit.

Die gute Nachricht: Dieses Verhalten lässt sich abstellen. Je nachdem, wie das zugrundeliegende Datenmodell aufgebaut ist und wie viel Flexibilität die Nutzer:innen im Frontend benötigen, gibt es dafür drei bewährte Lösungswege.

Die Grundvoraussetzung: Die Datumstabelle im Modell begrenzen

Für die saubersten dynamischen Filtervarianten (Option 1 und 2) muss im ersten Schritt sichergestellt werden, dass die Kalendertabelle im Datenmodell keine Tage enthält, die in der Zukunft liegen. Sie muss exakt mit dem aktuellen Tag abschließen.

Ein Best-Practice-Ansatz ist die Umsetzung direkt in Power Query über eine dedizierte Kalender-Funktion (fnCreateDateTable) und eine darauf aufbauende tagesaktuelle Transformation:

Funktion fnCreateDateTable
1let fnCreateDateTable = (
2   StartDate as date,
3   EndDate as date,
4   optional Locale as nullable text
5) as table =>
6 let
7   endDate = Date.AddDays(EndDate, 1),
8   DayCount = Duration.Days(Duration.From(endDate - StartDate)),
9   Source = List.Dates(StartDate,DayCount,#duration(1,0,0,0)),
10   TableFromList = Table.FromList(Source, Splitter.SplitByNothing()),
11   ChangedType = Table.TransformColumnTypes(TableFromList,{{"Column1", type date}}),
12   RenamedColumns = Table.RenameColumns(ChangedType,{{"Column1", "Date"}}),
13   InsertYear = Table.AddColumn(RenamedColumns, "Year", each Date.Year([Date])),
14   InsertQuarter = Table.AddColumn(InsertYear, "QuarterOfYear", each Date.QuarterOfYear([Date])),
15   InsertMonth = Table.AddColumn(InsertQuarter, "MonthOfYear", each Date.Month([Date])),
16   InsertDay = Table.AddColumn(InsertMonth, "DayOfMonth", each Date.Day([Date])),
17   InsertDayInt = Table.AddColumn(InsertDay, "DateInt", each [Year] * 10000 + [MonthOfYear] * 100 + [DayOfMonth]),
18   InsertMonthName = Table.AddColumn(InsertDayInt, "MonthName", each Date.ToText([Date], "MMMM", Locale), type text),
19   InsertCalendarMonth = Table.AddColumn(InsertMonthName, "MonthInCalendar", each (try(Text.Range([MonthName],0,3)) otherwise [MonthName]) & " " & Number.ToText([Year])),
20   InsertCalendarQtr = Table.AddColumn(InsertCalendarMonth, "QuarterInCalendar", each "Q" & Number.ToText([QuarterOfYear]) & " " & Number.ToText([Year])),
21   InsertDayInWeek = Table.AddColumn(InsertCalendarQtr, "DayInWeek", each Date.DayOfWeek([Date], Day.Monday)),
22   IncreaseWeekDay = Table.TransformColumns(#"InsertDayInWeek", {{"DayInWeek", each _ + 1, type number}}),
23   InsertDayName = Table.AddColumn(IncreaseWeekDay, "DayOfWeekName", each Date.ToText([Date], "dddd", Locale), type text),
24   InsertWeekEnding = Table.AddColumn(InsertDayName, "WeekEnding", each Date.EndOfWeek([Date]), type date)
25 in
26   InsertWeekEnding
27in
28   fnCreateDateTable
powerquery
Tabelle Dates
1let
2   today = Date.From(DateTime.LocalNow()),
3   Source = fnCreateDateTable(#date(2026, 1, 1), today, "en-US"),
4   #"Add WeekOfYear" = Table.AddColumn(#"Source", "WeekOfYear", each Date.WeekOfYear([Date])),
5   #"Add YearWeek" = Table.AddColumn(#"Add WeekOfYear", "YearWeek", each [Year] * 100 + [WeekOfYear]),
6   #"Add MonthName Short" = Table.AddColumn(#"Add YearWeek", "MonthName Short", each Text.Range([MonthName], 0, 3)),
7   #"Add MonthInCalendar Order" = Table.AddColumn(#"Add MonthName Short", "MonthInCalendar Order", each [Year] * 100 + [MonthOfYear]),
8   #"Insert EndOfMonth" = Table.AddColumn(#"Add MonthInCalendar Order", "EndOfMonth", each Date.EndOfMonth([Date]), type date),
9   #"Changed Type" = Table.TransformColumnTypes(#"Insert EndOfMonth",
10     {
11         {"Year", Int64.Type}
12       , {"QuarterOfYear", Int64.Type}
13       , {"MonthOfYear", Int64.Type}
14       , {"DayOfMonth", Int64.Type}
15       , {"DateInt", Int64.Type}
16       , {"MonthInCalendar", type text}
17       , {"QuarterInCalendar", type text}
18       , {"DayInWeek", Int64.Type}
19       , {"WeekOfYear", Int64.Type}
20       , {"YearWeek", Int64.Type}
21       , {"MonthName Short", type text}
22       , {"MonthInCalendar Order", Int64.Type}
23     }
24   )
25in
26   #"Changed Type"
powerquery

Der zentrale Hebel liegt hierbei in der Dates-Tabelle: Über Date.From(DateTime.LocalNow()) wird das aktuelle Datum dynamisch ermittelt und als today an die Funktion übergeben. Mit jedem morgendlichen Daten-Refresh wächst die Tabelle somit vollautomatisch um einen Tag an.

Option 1: Der klassische Zwischen-Slicer (Der Leerfeld-Trick)

Wer den Standard-Slicer mit zwei flexiblen Eingabefeldern nutzen möchte, kann Power BI über die Tastatur austricksen, um den starren Datumsbezug im Frontend zu löschen:

  • Direkt in das rechte Eingabefeld für das Enddatum klicken. Wichtig: Nicht auf das Kalender-Icon klicken, da eine manuelle Auswahl im Kalenderblatt wieder ein festes Datum einloggen würde.
  • Das aktuelle Datum direkt im Textfeld markieren.
  • Den Eintrag mit der Entf- oder Backspace-Taste komplett rauslöschen, sodass das Feld absolut leer ist.
  • Einmal mit Enter bestätigen.

Power BI füllt das Feld optisch zwar sofort wieder mit dem maximal verfügbaren Datum der Tabelle, schaltet intern aber in den Modus Blanking out the date. Beim Speichern merkt sich das System ab jetzt: Nimm immer das absolute Maximum, das du in der Datumstabelle findest.

Option 2: Der Ab-Slicer (Reduzierte Komplexität)

Wenn die Nutzer:innen das Enddatum gar nicht manuell verändern müssen, sondern ohnehin immer Daten bis zum aktuellen Tag sehen wollen, ist der Ab-Slicer (After-Modus) die visuell sauberste Wahl.

  • Den Slicer auf der Berichtsseite markieren.
  • Den Slicertyp im visuellen Dropdown von Zwischen auf Ab umstellen.
  • Das rechte Eingabefeld verschwindet komplett. Es bleibt nur noch ein einziges Datumsfeld für das Startdatum (z. B. 01.01.2026).

Da die Kalendertabelle im Hintergrund hart am heutigen Tag abgeschnitten ist, filtert Power BI nun automatisch vom gewählten Startdatum bis heute. Die Nutzer:innen haben weniger visuelle Ablenkung auf dem Screen, behalten aber die volle Freiheit beim Startdatum.

Option 3: Der relative Datumsfilter (Die Alternative bei Zukunftsdaten)

Es gibt Szenarien, in denen sich die Datumstabelle im Hintergrund nicht auf den heutigen Tag begrenzen lässt - beispielsweise weil das Modell zukünftige Zeilen für Budgetplanungen oder Forecasts enthalten muss oder wenn es sich um ein Dataset handelt. Würde man hier Option 1 nutzen, würde das leere Feld sofort auf das Ende der Forecast-Periode (z. B. 31.12.2026) springen.

In diesem Fall hilft der relative Datumsfilter im Hintergrund, um das Bis-Datum einzufangen:

  • Den bestehenden Zwischen-Slicer auf der Berichtsseite anklicken.
  • Rechts im Filter-Bereich (Filters Pane) das Datumsfeld für dieses spezifische visuelle Element aufrufen.
  • Den Filtertyp auf Relative Datumsfilterung umstellen und die Bedingung auf Ist vor oder am heutigen Tag einstellen.

Der Nachteil: Für diesen spezifischen Slicer ist die Zukunft im Kalender-Dropdown starr gesperrt.

Fazit

In der Business Intelligence (BI) gilt die Regel: Logik gehört ins Datenmodell, nicht ins Frontend. Wer die volle Kontrolle über sein Datenset hat und reine Ist-Daten analysiert, fährt mit der Modellbegrenzung (Option 1) am besten. Die DAX-Engine muss keine relativen Filter ad hoc zur Laufzeit berechnen, was die Performance schont. Zudem bleibt die Logik über alle Berichtsseiten hinweg konsistent.

Muss man hingegen mit einem zentral vorgegebenen IT-Datenmodell arbeiten, das starr bis in die Zukunft läuft, ist der relative Hintergrundfilter (Option 3) der schnellste und zuverlässigste Ausweg.

Lust auf einen
Austausch?

Schreiben Sie uns
Crocodile illustration
Paperplane

Newsletter

Als Erstes informiert, wenn es Neuigkeiten in der digitalen Welt gibt!

Durch die Bereitstellung Ihrer E-Mail-Adresse erklären Sie sich damit einverstanden, Newsletter und Werbe-E-Mails von uns zu erhalten. Wir respektieren Ihre Privatsphäre und werden Ihre Informationen nicht an Dritte weitergeben. Sie können sich jederzeit abmelden.

You've reached the end