Dynamische Skalierung eines Measures in Power BI per DAX

September 18, 2020
Denis Selimovic
DAXcomment 3Created with Sketch Beta.0 comments

This post is also available in: Englisch


Die automatische Skalierung von Kennzahlen oder Measures ist in Power BI für so ziemlich jedes Visual möglich. Allerdings gibt es aktuell bei Tabellen bzw. der Matrix keine Möglichkeit diese dynamisch einzustellen.

Fied Formatting
Keine dynamische Skalierungsmöglichkeit bei Tabelle und Matrix

Mit dieser Auswahl lassen sich die Werte beispielsweise in Millionen anzeigen.

Overview

Auch falls die Werte aufgrund eines Slicers, Filters oder Drill Downs eingeschränkt werden, bleibt die manuell eingestellte Skalierung erhalten. Dies führt je nach Konstellation zu der merkwürdigen Situation, dass man aus dem Bericht keine Erkenntnisse mehr gewinnen kann, da die Werte viel zu tief für die Skalierung liegen.

Filter Customer
Niedrige Umsätze durch die Filterung nach Kunde

Während dies in einem graphischen Visual abgefangen und die Skalierung angepasst wird, gibt es diese Möglichkeit aktuell in einer Tabelle bzw. Matrix leider nicht.

Skalierung per DAX dynamisch gestalten

Die Formatierung kann man allerdings direkt im DAX Measure beeinflussen, sodass diese sich automatisch an den jeweils angezeigten Wert anpasst. Hierbei wird uns die FORMAT Funktion helfen. Diese Funktion ist an die Formatierung in Excel angelehnt und erlaubt es uns nur die Darstellung anzupassen, die Werte bleiben weiterhin erhalten.

Folgende Syntax würde den Wert als normale Zahl anzeigen:

FORMAT( SUM( FactInternetSales[SalesAmount] ) , "€ 0.00" )

Die Dokumentation für benutzerdefinierte Formate zeigt uns, dass ein Komma hilft die dargestellte Zahl in Tausender-Blöcken zu “schrumpfen”. Zusammengefasst, jedes Komma zeigt 3 Stellen weniger an.
Somit wäre die Darstellung in Tausend für unser Measure:

FORMAT( SUM( FactInternetSales[SalesAmount] ) , "€##0,.00 Tsd" )

Um die Darstellung in Millionen zu erhalten reicht uns ein zusätzliches Komma:

FORMAT( SUM( FactInternetSales[SalesAmount] ) , "€##0,,.00 Mil" )

Welche Skalierung angezeigt werden soll müssen wir im Measure überprüfen. Hierbei berechnen wir, ob sich die jeweilige Zahl durch 1.000, 1.000.000 oder 1.000.000.000 teilen lässt und geben dann den Wert in der entsprechenden Formatierung zurück.
Dies lässt sich durch verschachtelte IF Funktionen abfragen, ich persönlich bevorzuge der Übersicht halber aber lieber ein SWITCH(TRUE()

SUM Sales dynamic =
VAR _SumSales =
    SUM( FactInternetSales[SalesAmount] )
VAR _FormattedDate =
    SWITCH(
        TRUE(),
        _SumSales / 1000000000 >= 1, FORMAT( _SumSales, "€ ##0,,,.00 Mrd" ),
        _SumSales / 1000000 >= 1, FORMAT( _SumSales, "€ ##0,,.00 Mil" ),
        _SumSales / 1000 >= 1, FORMAT( _SumSales, "€ ##0,.00 Tsd" ),
        IF( ISBLANK( _SumSales ), BLANK(), FORMAT( _SumSales, "€ 0.00" ) )
    )
RETURN
    _FormattedDate

Wenn wir dieses Measure nun in unserer Tabelle anzeigen passt sich die Skalierung automatisch an. Egal, ob wir die Gesamtübersicht haben:

image 1

Und ebenfalls wenn wir auf einzelne Kunden filtern:

image

Das Vorgehen hat allerdings noch 2 Nachteile:

  1. Da der Wert mit der FORMAT Funktion als Text zurück gegeben wird, lässt sich das Measure leider nicht in Grafiken darstellen.
  2. Wie gesagt da es sich um Text handelt, lassen sich die Nachkommastellen leider nicht dynamisch anpassen.