Verwenden von SELECTEDVALUE anstelle von VAUES

Als Datenmodellierer müssen Sie ggf. in manchen Fällen einen DAX-Ausdruck schreiben, der testet, ob eine Spalte nach einem bestimmten Wert gefiltert wird.

In früheren DAX-Versionen wurde diese Anforderung durch die Verwendung eines Musters mit drei DAX-Funktionen sicher erfüllt: IF, HASONEVALUE und VALUES. Die folgende Measuredefinition stellt ein Beispiel dar. Sie berechnet den Umsatzsteuerbetrag, jedoch nur für Verkäufe an australische Kunden.

Australian Sales Tax =
IF(
    HASONEVALUE(Customer[Country-Region]),
    IF(
        VALUES(Customer[Country-Region]) = "Australia",
        [Sales] * 0.10
    )
)

In diesem Beispiel gibt die HASONEVALUE-Funktion nur dann TRUE zurück, wenn ein einzelner Wert der Spalte Country-Region im aktuellen Filterkontext sichtbar ist. Wenn der Wert TRUE ist, wird die VALUES-Funktion mit dem literalen Text „Australia“ verglichen. Wenn die VALUES-Funktion TRUE zurückgibt, wird das Measure Sales mit 0,10 multipliziert (entspricht 10 %). Wenn die HASONEVALUE-Funktion FALSE zurückgibt, weil mehr als ein Wert die Spalte filtert, gibt die erste IF-Funktion BLANK zurück.

Die Verwendung von HASONEVALUE ist eine defensive Methode. Sie ist erforderlich, da möglicherweise mehrere Werte die Spalte Country-Region (Land/Region) filtern. In diesem Fall gibt die VALUES-Funktion eine Tabelle mit mehreren Zeilen zurück. Der Vergleich einer Tabelle mit mehreren Zeilen mit einem skalaren Wert führt zu einem Fehler.

Empfehlung

Es wird empfohlen, die Funktion SELECTEDVALUE zu verwenden. Mit dieser Funktion wird das gleiche Ergebnis wie das in diesem Artikel beschriebene Muster erzielt, jedoch effizienter und eleganter.

Mit der SELECTEDVALUE-Funktion wird die Measuredefinition im Beispiel nun umgeschrieben.

Australian Sales Tax =
IF(
    SELECTEDVALUE(Customer[Country-Region]) = "Australia",
    [Sales] * 0.10
)

Tipp

Es ist möglich, einen alternativen Ergebniswert an die SELECTEDVALUE-Funktion zu übergeben. Der alternative Ergebniswert wird zurückgegeben, wenn entweder keine oder mehrere Filter auf die Spalte angewendet werden.