Warum lässt sich die genaue Zahl beim Was-wäre-wenn-Parameter manchmal nicht auswählen und wie kann das behoben werden?

June 27, 2021
Denis Selimovic
Datenmodellcomment 3Created with Sketch Beta.2 comments

This post is also available in: Englisch

Ich arbeite recht gerne mit dem Was-wäre-wenn-Parameter in Power BI. Mit dessen Hilfe lassen sich entsprechende Szenarien sehr feingranular durchspielen. Wie sähe mein Betriebsergebnis aus, wenn ich meine Verkäufe um den Faktor 2 steigern kann? Wie sähe es mit 1,5 aus? Und wie mit 2,35? Mir ist bewusst, dass diese Steigerungen extrem hoch sind. Aber mit dem Was-wäre-wenn-Parameter gehen solche Auswertungen sehr einfach mit einem einzigen Schieberegler.

Problem der Was-wäre-wenn-Parameter funktioniert nicht, die genaue Zahl lässt sich nicht einstellen

Allerdings gibt es gelegentlich den Fall, dass sich genau Werte nicht einstellen lassen. Nehmen wir den gerade erwähnten Fall als Beispiel. Ich würde gerne die Entwicklung meiner Verkäufe auswerten und zwar um 0.01 Punkte genau. Entsprechend lege ich einen Was-wäre-wenn-Parameter an:

Anlegen eines Was-wäre-wenn-Paremters
Anlegen eines Was-wäre-wenn-Paremters

Als Bereich möchte ich von -20 bis 20 wählen können und die einzelnen Werte sollen um 0.01 Punkte steigen:

Feingranulare Einstellungen des Was-wäre-wenn-Parameters
Feingranulare Einstellungen des Was-wäre-wenn-Parameters

Wenn ich nun versuche den Slicer des Was-wäre-wenn-Parameters auf 1, 1,5 oder 2,35 anzupassen geschieht etwas merkwürdiges, ich bekomme den Slicer nicht genau auf den Wert eingestellt den ich möchte:

What-if-parameter funktioniert nicht
What-if-parameter funktioniert nicht

Ursache Limitation auf 1002 Werte pro Slicer

Woran liegt es, dass ich keine genauen Werte auswählen kann? Schauen wir erst mal in die generierte Tabelle, ob die Werte überhaupt verfügbar sind. Der Parameter erstellt eine Tabelle mit der GENERATESERIES Funktion. Bei einer Granularität von 0.01 bräuchten wir 100 Werte für eine ganze Zahl. Da wir den Bereich von -20 bis 20 abdecken, wären dies 40 x 100 = 4.000 einzelne Werte. Diese liefert uns auch die Tabelle:

Generierte Tabelle liefert 4.000 Werte
Generierte Tabelle liefert 4.000 Werte

An der Tabelle liegt es somit nicht. Daher schauen wir uns mit dem Performance Analyzer mal den generierten DAX-Code an:

DAX Code des Slicers auslesen
DAX Code des Slicers auslesen

Der DAX Code des Slicers lautet folgendermassen:

// DAX Query
DEFINE
  VAR __DS0Core = 
    VALUES('SalesGrowth'[SalesGrowth])

  VAR __DS0BodyLimited = 
    SAMPLE(1002, __DS0Core, 'SalesGrowth'[SalesGrowth], 1)

EVALUATE
  __DS0BodyLimited

ORDER BY
  'SalesGrowth'[SalesGrowth]

Wenn wir die Query ausführen, dann fällt auch gleich schon das Problem auf. Es wird nicht mehr die gesamte Reihe angezeigt, sondern es gibt hier Lücken im Vergleich zur Original-Tabelle:

image 11
Werte, welche im Slicer dargestellt werden

Wenn wir uns die DAX Query anschauen wird auch gleich ersichtlich, weshalb dies geschieht. Schuld ist die folgende Zeile:

  VAR __DS0BodyLimited =  SAMPLE(1002, __DS0Core, 'SalesGrowth'[SalesGrowth], 1)

Der Slicer limitiert die Anzahl Werte auf 1002 einzelne Werte! Diese werden mit der SAMPLE Funktion in dem gewählten Bereich gleichmäßig verteilt ausgewählt.

Möglichkeiten, dies zu umgehen

Wenn man dies umgehen möchte, dann gibt es ein paar Ansätze.

1. Tabelle auf 1.002 Werte einschränken

Die erste Möglichkeit besteht darin, das Datenset auf 1.002 Werte einzuschränken. In unserem Fall wäre dies möglich, wenn man die Granularität auf eine Nachkommastelle einschränkt:

Einschränkung auf eine Nachkommastelle
Einschränkung auf eine Nachkommastelle

Somit erhält man nur noch 400 Werte anstatt 4.000 und der Slicer kann die entsprechenden Werte anzeigen. Allerdings muss man hier dann halt etwas bei der Granularität einschränken, damit man in dem 1002 Zeilen-Limit bleibt:

what if parameter works
Was-wäre-wenn-Parameter mit eingeschränkter Auswahl von 1002 Werten

2. Änderung des Slicers

Eine weitere Möglichkeit wäre es, den Slicer anzupassen. Als Liste oder Dropdown beispielsweise zeigt der Slicer die gesamte Liste aller Werte an:

Alle Werte werden als Dropdown Liste angezeigt
Alle Werte werden als Dropdown Liste angezeigt

Ebenfalls kann der Slicer auf einen “Less than or equal to” bzw. “Greather than or equal to” Slicer angepasst werden:

Kleiner-gleich-Filter
Kleiner-gleich-Filter

Hierbei wird dann allerdings automatisch der gesamte Bereich zwischen Start- und Endwert angezeigt. Folglich gehen unter Umständen die einzelnen Schritte verloren, die wir uns eigentlich gewünscht hätten.

Wenn ich den Slicer beispielsweise in Schritten von 5 erhöhen wollen würde, dann würde diese Variante sämtliche Zahlen zwischen Start- und Endwert bereitstellen und eben nicht in Fünferschritten. Zudem muss die Formel des auszuwertenden Measures auf MAX bzw. MIN des jeweiligen Slicers angepasst werden, anstatt SELECTEDVALUE wie wir es bisher hatten. Ebenfalls werden hier immer der Start- und der Endbereich angezeigt im Slicer selbst, was nach Szenario wohl ungewünscht ist.

Fazit

Der Was-wäre-wenn-Parameter ist aus meiner Sicht immer noch eine der besten Möglichkeiten, um Änderungen im Szenario darzustellen. Man muss sich allerdings der Einschränkungen bei der Anzahl Werten auf 1002 Zeilen bewusst sein, wenn man spezifische Werte auswählen möchte. Aus meiner Sicht wäre hier ein Hinweis im Power BI hier eine gute Lösung.