Formatierung jedes einzelnen Wertes dynamisch mit Calculation Groups ändern
This post is also available in: Englisch
Im September letzten Jahres hatte ich bereits einen Artikel geschrieben, wie sich die Werte eines Measures dynamisch anpassen lassen, beispielsweise in Millionen, Tausendern oder ohne Skalierung:
Dynamische Skalierung eines Measures in Power BI per DAX
Der damalige Ansatz mit der FORMAT-Funktion hatte einen großen Nachteil, der Werte wird mit FORMAT immer zu einem Text umgewandelt. Somit lässt sich das Measure nur in Tabellen verwenden, denn Balken- und Liniengrafiken können Texte nicht darstellen.
Mit altem Ansatz Darstellung nur in Tabellen möglich
Mittlerweile gibt es allerdings durch die Calculation Groups eine viel bessere Möglichkeit ein Measure mit dynamischer Formatierung darzustellen. Mit Calculation Groups kann ich nämlich die Formatierung ebenfalls per DAX dynamisch erstellen und dies wird – wie jede DAX Funktion – für jede Zeile individuell berechnet.
Ich verwende dasselbe Szenario wie im ursprünglichen Artikel. Wenn ich keine Kunden gewählt habe, bekomme ich hohe Zahlen und möchte daher eine Skalierung erhalten:
Wenn ich allerdings auf einen spezifischen Kunden filter, dann sollen die Werte ohne Skalierung angezeigt werden, da die Skalierung im Normalfall zu hoch ist:
Formatierung über Calculation Groups integrieren
In diesem Ansatz benötigen wir Calculation Groups, bedeutet aus dem Power BI heraus starten wir unseren Tablular Editor über die External Tools:
Dann erstellen wir eine neue Calculation Group mit einem Rechtsklick auf Tables und geben ihr den Namen “Dynamic Scaling”
Danach erstellen wir ein neues Calculation Item per Rechtsklick in der aktuellen Calculation Group und geben ihm einen Namen unserer Wahl:
Im Expression Editor geben wir nun einfach die Funktion SELECTEDMEASURE() ein, da wir einfach nur den Wert zurückgeben möchten:
Dynamische Formatierung per DAX in den Calculation Groups
Bisher war dies nicht besonders spektakulär. Spannend wird es aber jetzt, da wir nicht nur den Wert selbst per DAX ändern können, sondern auch die Formatierung. Hierzu wechseln wir im Expression Editor das Property von Expression zu “Format String Expression”
In dem leeren Feld können wir nun eine DAX Formel einfügen, welche den Format-String zurückliefert, welche für das jeweilige Feld verwendet wird. In unserem Fall ist das mehr oder weniger das Measure aus dem ursprünglichen Artikel, allerdings liefern wir nur den String selbst zurück:
Der genaue Code lautet:
VAR vMeasure = SELECTEDMEASURE ()
VAR vFormat =
SWITCH (
TRUE (),
vMeasure / 1000000000 >= 1, "€ ##0,,,.00 Mrd",
vMeasure / 1000000 >= 1, "€ ##0,,.00 Mil",
vMeasure / 1000 >= 1, "€ ##0,.00 Tsd",
"€ 0.00"
)
RETURN
vFormat
Danach speichern wir im Tabular Editor die Änderungen, welche wir durchgeführt haben und wechseln zurück ins Power BI. Hier erhalten wir die Nachricht, dass die Calculation Group refreshed werden muss, was wir mit einem Klick auf “Refresh now” bestätigen:
Danach müssen wir nur noch die Calculation Group hinzufügen, wo immer wir die dynamische Skalierung möchten. Die Formatierung passt sich ab dann automatisch an:
Fazit
Der Vorteil bei diesem Vorgehen ist, dass wir nur die Formatierung ändern, aber nicht den Wert selbst. Dies bedeutet wir können das Measure noch immer verwenden für sämtliche Visuals wie Balkendiagramme und Ähnliches. Ein weiterer Vorteil ist, dass die Calculation Group für alle Measures funktioniert. Ich muss diesen Ansatz also nicht für jedes Measure erneut implementieren, ich kann diese Art der Formatierung ab jetzt für jedes Measure verwenden.