Warum lässt sich die genaue Zahl beim Was-wäre-wenn-Parameter manchmal nicht auswählen und wie kann das behoben werden?
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:
Als Bereich möchte ich von -20 bis 20 wählen können und die einzelnen Werte sollen um 0.01 Punkte steigen:
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:
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:
An der Tabelle liegt es somit nicht. Daher schauen wir uns mit dem Performance Analyzer mal den generierten DAX-Code an:
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:
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:
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:
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:
Ebenfalls kann der Slicer auf einen “Less than or equal to” bzw. “Greather than or equal to” Slicer angepasst werden:
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.