Die dynamische Measure Selektion mittels Slicer gehört sicherlich zu den beliebesten Best Practices in Power BI Dashboards - beispielsweise kann der Anwender mit einem solchen Slicer die konkrete Kennzahl für die Visualisierung(en) oder die Berechnungsart Kumuliert vs. Periodenwert auswählen.
Die neue Fields Parameter Funktion - diese ist derzeit noch eine Preview Funktion - ermöglicht die Dynamisierung sowohl der Measure- als auch der Achsenbelegung in einem Visual. In diesem Blogbeitrag beleuchten wir den Einsatz für die dynamische Measure Selektion.
1. Ausgangssituation
Ausgangsbasis ist (wie auch schon zuletzt hier und hier) eine Sales Anwendung mit 4 Kennzahlen Measures, welche spezifisch formatiert sind:
Das Datenmodell ist ein normales Star Schema:
2. Zielsetzung
Die User des Dashboards sollen über einen Slicer dynamisch das Measure für Belegung der Visuals auswählen können:
3. Bisherige Lösung: Measure Selektion mit einem Calculated Table
Die bisherige Lösung für eine dynamische Measure Selektion basiert auf einer (unverknüpften) Selektionstabelle, die beispielsweise mit einem DAX Statement als Calculated Table generiert wird:
Measure Selektion (manuell) =
{
("Quantity";1);
("Sales";2);
("Margin";3);
("Margin in %";4)
}
Die aktuelle Auswahl des Measure Slicers erfolgt am besten über ein eigenes Measure (genau genommen wird nicht die Selektion im Slicer sondern der Filterzustand der Selektionstabelle abgefragt):
Measure Selektion = SELECTEDVALUE('Measure Selektion (manuell)'[Metric]; "Sales" )
Jetzt kann das Dynamische Measure angelegt werden, mit der SWITCH()-Funktion - diese ist lediglich Syntax Sugar für ein geschachteltes IF() - können einfach die Selektionen im Slicer in ein konkretes Measure übersetzt werden:
Dynamic Measure =
SWITCH(
[Measure Selektion];
"Quantity";[Quantity];
"Sales";[Sales];
"Margin";[Margin];
"Margin in %"; [Margin in %]
)
Die dynamische Measure Selektion kann jetzt bereits verwendet werden. Die Column Metric wird als Basis für den Slicer und optional auch für die Spaltenbelegung im Matrix Visual verwendet, das Measure Dynamic Measure wird als Wertfeld für die Visuals verwendet. Der Slicer filtert übrigens nur die beiden oberen Visuals, die Filterbeziehung zum Matrix Visual wurde zur Demonstration der Formate deaktiviert.
Allerdings hat diese Lösung im konkreten Anwendungsfall noch zwei Problemzonen:
- Unspezifische Formatierung der Zahl
Das Thema konnte ursprünglich nur mit der FORMAT()-Funktion gelöst werden, diese Lösung hatte aber viele Nachteile, da dabei die Zahl in einen Text umgewandelt wird. Seit dem April 2023 Release kann das Thema sehr elegant mit den Dynamic Format Strings (wie hier beschrieben) gelöst werden. - Unspezifische Bezeichnung "Dynamic Measure"
Im Card Visual und teilweise in den kartesischen Charts kann das Thema leicht mit einem dynamischen Text (unter Referenzierung des Measures "Measure Selektion") bspw. in der Title Eigenschaft des Visuals gelöst werden. Im Matrix Visual kann die Column Metric in den Spaltenbereich aufgetragen werden (wie im Screenshot zu sehen) und so kann das Thema zumindest in einfachen Szenarien gut gelöst werden. Im Table Visual hingegen kann das Measure (= Spalte) hingegen nicht spezifisch benannt werden.
Diese beiden Themen werden perfekt und ohne Zusatzaufwand durch den neuen Fields Parameter gelöst.
3. Neue Lösung: Measure Selektion mit der Fields Parameter Funktion
Die neue Fields Parameter Funktion - diese muß derzeit noch unter den Preview Settings aktiviert werden - wurde UI mäßig bei der bestehenden Parameter Funktion als Dropdown Option "eingehängt":
Im folgenden Fields Parameter Dialog wird der Name für die zu erstellende Selektionstabelle definiert und die gewünschten Measures aus der Feldliste zugeordnet:
Der Wizard erzeugt - ähnlich wie in der bisherigen Lösung - einen Calculated Table mit folgendem Aufbau:
Dabei sind zwei Besonderheiten bemerkenswert.
(1) Der Measure Name ist über die neue DAX Funktion NAMEOF() dynamisch in die Parameter Tabelle referenziert. D.h. wenn das zugrundeliegende Measure umbenannt wird, kommt der neue Measure Name über die NAMEOF()-Funktion auch in die Parameter Tabelle. Übrigens kann die Parameter Tabelle aktuell (noch?) nicht über den Wizard Dialog nachbearbeitet werden, sehr wohl aber über das DAX Statement der Tabelle.
Measure Selektion = {
("Sales"; NAMEOF(' Measures'[Sales]); 0);
("Quantity"; NAMEOF(' Measures'[Quantity]); 1);
("Margin"; NAMEOF(' Measures'[Margin]); 2);
("Margin in %"; NAMEOF(' Measures'[Margin in %]); 3)
}
(2) Das Feld Measure Selektion (= erste Spalte der Selektionstabelle) kann sowohl als Column als auch als Measure verwendet werden! Diese besondere Eigenschaft wird durch den Fields Parameter Wizard erzeugt und wird in der Feldliste durch das Icon neben den Feldern Measure Selektion und Measure Selektion Fields symbolisiert:
Das heißt, sowohl der Slicer als auch die Wertebereiche der Visuals sind mit dem gleichen Feld Measure Selektion belegt - das macht das Handling wirklich sehr einfach:
Hervorragend ist, daß die neue Fields Parameter Funktion auch die beiden Problembereiche der bisherigen Lösung perfekt meistert:
- Spezifische Formatierung
Die Formatierung der zugrunde liegenden Measures wird in das dynamische Measure ohne zusätzlichen Aufwand übernommen. - Spezifische Benennung
Abhängig von der Auswahl im Slicer wird in ALLEN Visuals - auch im Table Visual - der Name des selektierten Measures gezeigt.
4. Fazit
Die neue Fields Parameter Funktion reduziert nicht nur den Erstellungsaufwand für die dynamische Measure Selektion, sondern meistert auch perfekt die beiden Problemzonen Formatierung und Measurename der bisherigen manuellen Lösung.
Quellen
https://learn.microsoft.com/en-us/power-bi/create-reports/power-bi-field-parameters
https://www.sqlbi.com/articles/fields-parameters-in-power-bi