Formatierung jedes einzelnen Wertes dynamisch mit Calculation Groups ändern

July 27, 2021
Denis Selimovic
Calculation Groups, Datenmodellcomment 3Created with Sketch Beta.0 comments

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:

Overview
Skalierung bei Ansicht der Gesamtwerte

Wenn ich allerdings auf einen spezifischen Kunden filter, dann sollen die Werte ohne Skalierung angezeigt werden, da die Skalierung im Normalfall zu hoch ist:

Filter Customer
Keine Skalierung bei Betrachtung der Details

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:

Tabular Editor aus Power BI starten
Tabular Editor aus Power BI starten

Dann erstellen wir eine neue Calculation Group mit einem Rechtsklick auf Tables und geben ihr den Namen “Dynamic Scaling”

image 1
Erstellung neuer Calculation Group in Tabular Editor

Danach erstellen wir ein neues Calculation Item per Rechtsklick in der aktuellen Calculation Group und geben ihm einen Namen unserer Wahl:

image 2
Erstellung eines neues Calculation Items

Im Expression Editor geben wir nun einfach die Funktion SELECTEDMEASURE() ein, da wir einfach nur den Wert zurückgeben möchten:

Funktion im Expression Editor
Funktion im Expression Editor

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”

image 4
Ändern auf 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:

image 5
Format String, welcher das Measure dynamisch skaliert

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:

image 6
Refresh des Datenmodells in Power BI

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:

dynamic scaling with calculation groups
Dynamische Skalierung mit Calulation Groups in Power BI

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.