Użyj SELECTEDVALUE zamiast VALUES
Jako modeler danych czasami może być konieczne napisanie wyrażenia DAX, które sprawdza, czy kolumna jest filtrowana według określonej wartości.
We wcześniejszych wersjach DAXto wymaganie zostało bezpiecznie osiągnięte przy użyciu wzorca obejmującego trzy funkcje DAX; IF, HASONEVALUE i VALUES. Poniższa definicja miary przedstawia przykład. Oblicza kwotę podatku od sprzedaży, ale tylko dla sprzedaży dokonanej dla klientów australijskich.
Australian Sales Tax =
IF(
HASONEVALUE(Customer[Country-Region]),
IF(
VALUES(Customer[Country-Region]) = "Australia",
[Sales] * 0.10
)
)
W tym przykładzie funkcja HASONEVALUE zwraca TRUE tylko wtedy, gdy pojedyncza wartość kolumny Country-Region jest widoczna w bieżącym kontekście filtru. Gdy jest TRUE, funkcję VALUES porównuje się z dosłownym tekstem "Australia". Gdy funkcja VALUES zwraca wartość TRUE, miara Sales jest mnożona przez 0,10 (reprezentującą 10%). Jeśli funkcja HASONEVALUE zwraca FALSE— ponieważ więcej niż jedna wartość filtruje kolumnę , pierwsza funkcja IF zwraca BLANK.
Zastosowanie HASONEVALUE jest techniką defensywną. Jest to wymagane, ponieważ istnieje możliwość, że wiele wartości filtruje kolumnę Country-Region. W tym przypadku funkcja VALUES zwraca tabelę wielu wierszy. Porównanie tabeli wielu wierszy z wartością skalarną powoduje wystąpienie błędu.
Zalecenie
Zaleca się użycie funkcji SELECTEDVALUE. Osiąga ten sam wynik co wzorzec opisany w tym artykule, ale jeszcze wydajniej i elegancko.
Korzystając z funkcji SELECTEDVALUE, przykładowa definicja miary jest teraz przepisana.
Australian Sales Tax =
IF(
SELECTEDVALUE(Customer[Country-Region]) = "Australia",
[Sales] * 0.10
)
Napiwek
Istnieje możliwość przekazania alternatywnej wartości wyniku oznaczonej jako
Powiązana zawartość
- Ścieżka szkoleniowa: Używanie DAX w programie Power BI Desktop
- Pytania? Spróbuj zadać społeczności usługi Power BI
- Sugestie? Współtworzenie pomysłów na ulepszanie usługi Power BI