Sprawdzanie kontekstu filtru
Funkcja VALUES
języka DAX umożliwia formułom określenie, jakie wartości są w kontekście filtru.
Składnia VALUES
funkcji jest następująca:
VALUES(<TableNameOrColumnName>)
Funkcja wymaga przekazania odwołania do tabeli lub kolumny. Jeśli przekażesz jej odwołanie do tabeli, funkcja zwróci obiekt tabeli z takimi samymi kolumnami oraz wierszami znajdującymi się w kontekście filtru. Jeśli przekażesz odwołanie do kolumny, zwróci tabelę z jedną kolumną i unikalnymi wartościami znajdującymi się w kontekście filtru.
Funkcja zawsze zwraca obiekt tabeli, który może mieć więcej niż jeden wiersz. W związku z tym, aby sprawdzić, czy określona wartość jest w kontekście filtru, formuła musi najpierw przetestować, czy VALUES
funkcja zwraca pojedynczy wiersz. Dwie funkcje mogą ułatwić wykonanie tego zadania: HASONEVALUE
funkcje języka DAX i SELECTEDVALUE
.
Funkcja HASONEVALUE
zwraca TRUE
wartość , gdy odwołanie do danej kolumny zostało odfiltrowane w dół do pojedynczej wartości.
Funkcja SELECTEDVALUE
upraszcza zadanie określania, jaka może być pojedyncza wartość. Funkcja przyjmuje odwołanie kolumny jako argument i zwraca pojedynczą wartość. Jeśli w kontekście filtru znajduje się więcej wartości, zwraca pustą wartość (BLANK) lub inną przekazaną jej wartość.
W poniższym przykładzie użyjesz HASONEVALUE
funkcji . Dodaj następującą miarę, która oblicza prowizję od sprzedaży do tabeli Sales . Należy pamiętać, że w firmie Adventure Works stawka prowizji wynosi 10 procent przychodów dla wszystkich krajów/regionów z wyjątkiem Stany Zjednoczone. w których sprzedawcy otrzymują 15% prowizji. Miarę sformatuj jako walutę z dwoma miejscami dziesiętnymi i dodaj ją do tabeli, która znajduje się na stronie 3 raportu.
Sales Commission =
[Revenue]
* IF(
HASONEVALUE('Sales Territory'[Country]),
IF(
VALUES('Sales Territory'[Country]) = "United States",
0.15,
0.1
)
)
Zwróć uwagę, że suma w kolumnie Sales Commission jest pusta (BLANK). Przyczyną jest to, że wiele wartości znajduje się w kontekście filtru dla kolumny Country w tabeli Sales Territory . W takim przypadku HASONEVALUE
funkcja zwraca FALSE
wartość , co powoduje pomnożenie miary Revenue przez wartość BLANK (wartość pomnożona przez wartość BLANK jest PUSTA). Aby uzyskać sumę, należy użyć funkcji iteracyjnej. Funkcjami tego rodzaju zajmiemy się w dalszej części modułu.
Do testowania stanu filtru możesz użyć trzech innych funkcji:
ISFILTERED
— Zwraca wartośćTRUE
, gdy przekazane odwołanie do kolumny jest bezpośrednio filtrowane.ISCROSSFILTERED
— Zwraca wartośćTRUE
, gdy przekazane odwołanie do kolumny jest pośrednio filtrowane. Filtrowanie krzyżowe kolumny zachodzi wtedy, gdy filtr zastosowany do innej kolumny w tej samej tabeli lub w powiązanej tabeli wpływa na wybraną kolumnę i filtruje ją.ISINSCOPE
— Zwraca wartośćTRUE
, gdy przekazane odwołanie do kolumny jest poziomem w hierarchii poziomów.
Wróć do strony 2 raportu, a następnie zmodyfikuj definicję miary Revenue % Total Country (Procent łącznego przychodu w kraju), aby sprawdzić, czy kolumna Region w tabeli Sales Territory znajduje się w zakresie. Jeśli nie jest, miara powinna zwrócić pustą wartość (BLANK).
Revenue % Total Country =
VAR CurrentRegionRevenue = [Revenue]
VAR TotalCountryRevenue =
CALCULATE(
[Revenue],
REMOVEFILTERS('Sales Territory'[Region])
)
RETURN
IF(
ISINSCOPE('Sales Territory'[Region]),
DIVIDE(
CurrentRegionRevenue,
TotalCountryRevenue
)
)
Zwróć uwagę, że wartości w kolumnie Revenue % Total Country na wizualizacji macierzy wyświetlane są tylko wtedy, gdy region znajduje się w zakresie.