Filter im Bericht automatisch setzen

Power BI automatisch filtern, das ist eine ganz typische Anforderung an einen Bericht. Man will zum Beispiel, dass stets die neuesten Daten angezeigt werden. Besonders gilt das, wenn der Bericht z.B. zeitgesteuert aktualisiert wurde. Dazu kann ich natürlich, wenn ich eine Spalte vom Typ Datum als Filter verwende, den Filtertyp auf “Relative Datumsfilterung” umstellen, und dann z.B. als Filterbedingung angeben “In den letzten” 1 “Tage” (sic!), und dazu “einschließlich heute” auswählen. Das ist dann immer dynamisch abhängig vom heutigen Datum! Was aber, wenn es mir darum geht, immer den letzten Tag mit Daten darin, an dem die neuesten Bewegungsdaten geliefert wurden, angezeigt zu bekommen?

Das Problem gibt es in Power BI überhaupt nur, weil es leider allgemein noch keine Möglichkeit gibt, Default-Werte für Filter in Berichten zu setzen. Wer sich wünscht, dass es so umgesetzt wird, wie es bei paginierten Berichten Standard ist, der kann das selbst bewirken! Einfach auf ideas.powerbi.com abstimmen, damit dieses spezielle Feature schneller kommt, und zwar unter https://ideas.powerbi.com/forums/265200-power-bi-ideas/suggestions/9714537-page-level-filter-default-values-by-formulas-scrip. Dort gibt es schon viele Community-Nutzer, die sich Standardwerte für Filter wünschen. Leider haben sie leider meist einen eigenen, neuen Vorschlag eröffnet, statt bei diesem “mitzuvoten”. So kann es also noch etwas dauern, bis das Produktteam auf das Problem aufmerksam wird…

Immer gut: eine Datumstabelle

Damit das auch heute schon funktioniert, braucht man eine Datumstabelle. Das ist quasi eine Stammdaten-Tabelle für Tage, die eine ununterbrochene und eindeutige Liste aller Datumswerte enthält, die in meinen Daten vorkommen könnten. Dieses Datum wird in der Datumstabelle auch oft in seine Bestandteile wie Monat, Kalenderwoche und Jahr “zerlegt”.

So könnte eine einfache Datumstabelle aussehen

Wer keine Datumstabelle in seiner Datenquelle vorliegen hat, kann sie sich ja über die DAX-Formeln CALENDAR() und CALENDARAUTO() in seinem Datenmodell erzeugen lassen! Dann aber bitte nicht vergessen, diese Tabelle auch unter “Modellierung” im Power BI Desktop “Als Datumstabelle markieren” zu lassen, und dann im Datenmodell eine Verbindung zu den Tabellen mit Bewegungsdaten herstellen. Danach sollte man dann alle Datumsfilter basierend auf die Daten in dieser Tabelle erzeugen, und nicht basierend auf irgendeine Datumsspalte in den Bewegungsdaten!

Das ist die richtige Beziehung zum Datum!

Etwas DAX, und schon geht's

Aber wie sorge ich nun dafür, dass z.B. ein Datenschnitt auf der Datumsspalte immer automatisch auf dem letzten Tag steht, für den Daten vorliegen? Das ist über einen kleinen Trick möglich, natürlich basierend auf DAX-Formeln. Man generiert sich ganz einfach eine Spalte in die Datumstabelle, die normalerweise als Beschriftung das Tagesdatum enthält, und an dem letzten Tag, wo Daten geliefert wurden, ersetzt man diese Beschriftung durch die konstante Zeichenfolge “Last Date” (oder so ähnlich). Die Formel dazu kann beispielsweise so aussehen:

DateString = IF([DateValue] = MAXA(TestData[Date]);"Last Date";FORMAT(DimDate[DateValue]; "General Date"))

Dabei müssen wir natürlich auf den Datentyp achten, der jetzt nicht mehr “Datum” sein darf, sondern “Text”, denn sonst würde die Spalte einen Wert wie “Last Date” gar nicht akzeptieren!

Bevor man nun seinen Bericht veröffentlicht, setzt man im Datenschnitt die Auswahl auf “Last Date”, und das merkt sich Power BI natürlich und öffnet dann immer wieder mit diesem Tag, nur, dass es nach erneuten Datenaktualisierungen immer wieder ein anderer Tag ist! So sieht das dann aus:

Ein Datenschnitt, der stets auf die neuesten Daten filtert

Wie - und wo - finden wir das? Und was geht noch?

Ja, und dass die Bezeichnung des “letzten Tages mit Daten” dann nicht im Datenschnitt in der Auswahlliste vorkommt, ist leicht zu verschmerzen, man kann ihn ja z.B. in ein “Karte”-Visual auf dem Bericht hineinziehen, wie man oben sieht. Und noch besser: über die Funktion “Modellierung / Nach Spalte sortieren” sollte man auch die Spalte mit der generierten Bezeichnung (hier: DateString) nach dem eindeutigen Schlüssel der Datumstabelle (hier: DateSK) sortieren lassen. Dann steht der “Last Date” auch immer an genau der richtigen Stelle in der Auswahlliste, zwischen dem Tag davor und danach.

Die Power BI-Datei mit dieser Lösung darin kann man sich hier einfach herunterladen.

Praktisch, oder? Das funktioniert übrigens auch, wenn ich die Filterung nicht über einen Datenschnitt oder Slicer mache, sondern ganz klassisch im Filterbereich “Last Date” als Filter setze. Die ganze Lösung muss man natürlich noch erweitern, so könnte man z.B. darauf reagieren, wann nur aus einer bestimmten Region zuletzt Daten geliefert wurden (einfach einen weiteren Filter definieren, oder direkt in die DAX-Berechnung einbauen), und man bekommt sie mit etwas Bastelarbeit sogar in DirectQuery-Modellen zum Laufen. Aber das wäre schon wieder etwas für einen anderen Blogbeitrag!

Ehre, wem Ehre gebührt: Die Inspiration für diesen Trick kam von Rob Collie von PowerPivotPro aus seinem Blog, siehe https://powerpivotpro.com/2013/12/a-simple-trick-for-combating-stale-slicers/.