Noch bevor ich mich mit den Inhalten eines Dashboards beschäftige, stellen sich mir zwei Fragen: 1. Wann wurde das Dashboard zuletzt aktualisiert und 2. welchen Zeitraum decken die im Datenmodell enthaltenen Daten ab? Warum die Beantwortung dieser beiden Fragen für jeden Nutzer eines Dashboards wichtig ist und wie ich den Daten- und Aktualisierungsstand in Power BI immer im Blick habe, erkläre ich in diesem Beitrag.
Als Abonnent meines Newsletters erhältst Du die Beispieldateien zu den Beiträgen dazu. Hier geht’s zum Abonnement des Newsletters!
Warum der Aktualisierungszeitpunkt wichtig ist
„Sag mal, weißt Du wann das Dashboard zuletzt aktualisiert wurde? Ich bin mir nicht sicher, ob die Daten schon aktuell sind!“ Diese Frage sollte kein Nutzer eines Dashboards stellen müssen. Es ist wichtig, dass noch vor der Analyse der visualisierten Daten klar ist, dass die Daten aktuell sind.
Warum der Datenstand wichtig ist
Unabhängig von der letzten Aktualisierung des Dashboards, kann es sein, dass die Datenquelle, auf der mein Dashboard beruht, noch nicht aktuell ist. Viele Dashboards, die ich gesehen habe, basieren auf Exceltabellen, die teilweise manuell befüllt werden. Hier kann es immer sein, dass ich versehentlich Altdaten importiere, weil die neuen Daten in der Exceldatei noch nicht gepflegt wurden.
So hast du den Aktualisierungszeitpunkt immer im Blick
Den Aktualisierungsstand der Power BI Desktop-Datei im Blick zu haben, bedeutet zu wissen, wann zuletzt der Aktualisieren-Knopf gedrückt wurde:
Ich zeige Dir jetzt eine Möglichkeit, sich diesen Zeitpunkt der Datenaktualisierung zu merken.
Den Aktualisierungszeitpunkt über eine Abfrage ermitteln
Wenn der Aktualisieren-Knopf gedrückt wird, werden vor dem Refresh des Datenmodells alle Abfragen (Power Query) aktualisiert. Diesen Umstand kann ich nutzen und erstelle eine entsprechende Abfrage, die sich den Aktualisierungszeitpunkt merkt. Ich füge folgende M-Formel in eine leere Abfrage ein und vergebe einen sprechenden Namen, in meinem Falle LetzteAktualisierung:
Dies hat zur Folge, dass dem Datenmodell eine weitere Tabelle LetzteAktualisierung hinzugefügt wird. Diese Tabelle beinhaltet eine einzige Spalte mit einem einzigen Wert: Dem letzten Aktualisierungszeitpunkt 🙂
Wichtig ist hierbei, dass diese Tabelle als sogenannte disconnected Table, also ohne jede Verknüpfung im Datenmodell existiert:
Zu diesem Zeitpunkt habe ich den letzten Aktualisierungszeitpunkt in einer Tabelle gespeichert. Nun möchte ich diesen in meinem Dashboard für den Endnutzer ausgeben.
Den gespeicherten Aktualisierungszeitpunkt im Dashboard ausweisen
Damit der Endnutzer auf den ersten Blick nachvollziehen kann, wann das Dashboard zuletzt aktualisiert wurde, muss diese Information in das Dashboard integriert werden. Hierfür schreibe ich ein DAX-Measure, welches mich die Information in eine Zeichenkette integrieren und zudem das Format des Aktualisierungszeitpunktes beeinflussen lässt:
Aktualisierungszeitpunkt =
„letzte Aktualisierung: „
& FORMAT ( VALUES ( LetzteAktualisierung[LetzteAktualisierung] ); „DD.MM.YYYY hh:mm“ )
Im Dashboard sieht das ganze dann wie folgt aus:
Mit jeder Aktualisierung des Datenmodells wird auch diese Information auf den neuesten Stand gebracht.
Den Aktualisierungszeitpunkt einfrieren
Manchmal ist es wünschenswert, trotz Aktualisierung den ausgewiesenen Aktualisierungszeitpunkt nicht zu verändern. Wenn ich beispielsweise der Entwickler des Datenmodells bin und technische Änderungen im Importprozess durchführen und testen muss, dann kann es sein, dass ich den ausgewiesenen Aktualisierungszeitpunkt auf dem alten Stand belassen möchte. Dies ist relativ einfach möglich, indem ich die entsprechende Abfrage von der Berichtsaktualisierung ausnehme:
Auf diese Weise kann ich Aktualisierungen vornehmen, ohne dass sich der ausgewiesenen Zeitpunkt ändert. Ich sollte dann vor dem Veröffentlichen der PBIX-Datei diesen Zustand wieder zurücksetzen, damit bei der nächsten Aktualisierung der Zeitpunkt wieder aktuell ist.
So hast du den Datenstand immer im Blick
Die Datenstände lassen sich den Faktentabellen entnehmen, also jenen Tabellen, die die Bewegungsdaten beinhalten. Wenn in einer Faktentabelle, die die Umsätze eines Unternehmens beinhaltet, der letzte Eintrag am 16.08.2017 gemacht wurde, dann ist der Datenstand der 16.08.2017. Genau diese Information soll, ebenso wie die letzte Aktualisierung des Datenmodells, in das Dashboard einfließen.
Das Ziel besteht darin, das Datum des letzten Eintrags in der Faktentabelle auszulesen. Unter der Maßgabe, dass meine Faktentabelle Umsaetze eine Spalte Datum beinhaltet, könnte ein sinnvolles Measure wie folgt aussehen:
letzterUmsatz_V1 =
„letzter Umsatz: „ & FORMAT ( MAX ( Umsaetze[Datum] ); „DD.MM.YYYY“ )
Diese Formel funktioniert, ist aber vom Datums-Slicer abhängig. Pro gewähltem Jahr wird der höchste, in der Faktentabelle vorhandene Datumswert ausgewiesen. Da in 2015 keine Werte vorhanden sind, liefert das Measure blank zurück und weist kein Datum aus.
Ich möchte jedoch, unabhängig von der getätigten Slicer-Selektion, das Datum des zuletzt eingespielten Umsatzes wissen. Daher muss ich die Formel adaptieren. Wenn es darum geht, den gewählten Filter (also den Filterkontext) zu ignorieren, fällt mir als erstes die Funktion ALL() ein. Die angepasste Formel sieht dementsprechend wie folgt aus:
letzterUmsatz_V2 =
„letzter Umsatz: „ & FORMAT ( MAX ( ALL ( Umsaetze[Datum] ) ); „DD.MM.YYYY“ )
Diese Formel wirft leider den folgenden Fehler aus:
Da ALL() eine Tabellenfunktion ist, gibt ALL ( Umsaetze[Datum]
)
eine Tabelle zurück, auch wenn diese nur eine einzige Spalte beinhaltet. Die Funktion MAX() erwartet jedoch keine Tabelle, sondern eine Spalte als Kriterium. Daher nutze ich eine ähnliche Funktion: MAXX(). MAXX() erwartet zwei Parameter:
- eine Tabelle (ALL() kann hier also als Parameter genutzt werden) und
- einen Ausdruck, über den das Maximum ermittelt werden soll: meine Datumsspalte in der Umsatztabelle!
Das finale DAX-Measure sieht wie folgt aus:
letzterUmsatz_final =
„letzter Umsatz: „
& FORMAT ( MAXX ( ALL ( Umsaetze[Datum] ); Umsaetze[Datum] ); „DD.MM.YYYY“ )
Damit kann ich nun im Dashboard sowohl die letzte Aktualisierung, als auch den aktuellen Datenstand auf den ersten Blick erkennen.
Diese beiden Informationen solltest Du an einer sinnvollen Stelle in Deinem Dasboard platzieren. Auf diese Weise herrscht für Deine Kunden/ Nutzer nie wieder Unklarheit über den Datenstand und die Datenaktualisierung 🙂
Bis zum nächsten Mal und denk dran: Sharing is caring. Wenn Dir der Beitrag gefallen hat, dann teile ihn gerne
Viele Grüße aus Hamburg,
Lars
P.S. Ich habe alle DAX-Statements in diesem Beitrag mit folgendem Tool aufbereitet:
Lars ist Berater, Entwickler und Trainer für Microsoft Power BI. Er ist zertifizierter Power BI-Experte und Microsoft Trainer. Für sein Engagement in der internationalen Community wurde Lars seit 2017 jährlich durch Microsoft der MVP-Award verliehen. Lies hier mehr…
Eva meint
Hallo Lars,
bei meiner automatischen Aktualisierung über das Gateway wird die Uhrzeit immer minus 2h angezeigt. Aktualisiere ich den Bericht in PBI Desktop, steht die Aktualisierung auf der richtigen Uhrzeit. Ich finde leider bis jetzt keine Möglichkeit die Zeitzone bzw. Sommer-/Winterzeit einzustellen. Gibt es die?
Viele Grüße
Lars Schreiber meint
Hallo Eva,
die Antwort könnte etwas länger werden. Ich werde dazu nächste Woche mal ein Video drehen, indem ich die Lösung für Dein Problem erkläre. Stay tuned 🙂
Eva meint
Hallo Lars,
ich kann das Video leider nicht finden 🙁
Könntest du es verlinken?
Herzlichen Dank und Grüße
Eva
Tobias Kleinehr meint
Hallo Lars,
vielen Dank für diesen Artikel. Genau das habe ich gesucht!
Zwar nicht für PowerBI (soweit bin ich noch nicht), aber in PowerQuery lässt sich das mit der letzten Aktualisierung genauso gut integrieren.
Das letzte Umsatzdatum musste ich mir leider anders ermitteln, aber auch erfolgreich 🙂
Besten Dank und viele Grüße
Tobias
Lars Schreiber meint
Hi Tobias,
danke, das freut mich sehr 🙂
Viele Grüße,
Lars
Fabian Leipold meint
Hallo Lars,
ich verwende auch einen Gateway für die Aktualisierung.
Bei mir aktualisiert er das Datum nicht, nur wenn ich über die Desktop App arbeitete klappt es.
Hast du eine Idee an was das liegen könnte?
Grüße
Fabian
Oliver meint
Hallo Lars,
vielen Dank. In Power BI Desktop funktioniert das super, auch wenn ich die Datei manuell veröffentliche.
Leider aktualsiert sich meine Anzeige nicht, wenn ich eine Automatik über ein Zentrales Gateway (Freigabe des Admins) aller SQL Daten erfolgt.
Kannst Du helfen?
Danke und Grüße aus Berlin
Oliver
Jannis Quint meint
Hallo,
vielen Dank für die Anleitung. Wird das Datum auch aktualisiert, wenn ich den Bericht über eine Zeitplan Aktualisierung automatisch aktualisieren lasse?
Beste Grüße
Jannis
Lars Schreiber meint
Hallo Jannis,
ja, für die Ermittlung der Zeitpunkte ist es unerheblich, ob Du das Datenmodells manuell oder automatisiert refreshst.
Liebe Grüße,
Lars
Dominik Petri meint
Hallo Lars,
vielen Dank für den wie immer sehr informativen Artikel.
Eine Frage: Warum verwendest Du anstatt MAXX(ALL()) nicht die Funktion LASTDATE()?
Viele Grüße & weiter so!
Dominik
Lars Schreiber meint
Hi Dominik,
danke für die Blumen und Deine Frage. LASTDATE() kann ich nutzen, wenn ich mit einer einzigen Faktentabelle zu tun habe. Sofern ich kein Star-Schema vorliegen habe, also mehr als eine Faktentabelle vorhanden ist, müßte ich LASTDATE() über mehrere Tabellen laufen lassen. Die Funktion läßt jedoch nur EINE Spalte als Parameter zu. MAXX() kann über eine Vielzahl von Spalten suchen. Für das von mir beschriebene Beispiel (mit nur einer Faktentabelle) wäre LASTDATE() also vollkommen gleichwertig zu MAXX(). Ob es da Performance-Unterschiede zwischen den beiden Funktionen gibt, habe ich noch nicht gestestet.
Danke und liebe Grüße aus Hamburg,
Lars
Dominik Petri meint
Vielen Dank für Deine schnelle und ausführliche Antwort! Merke ich mir auf jeden Fall…oder ich merke mir einfach Deine Seite und lese dort nach, wenn ich nicht weiterkomme 🙂