Obliczanie rankingów
Funkcja języka DAX to specjalna RANKX
funkcja iteratora, której można użyć do obliczania rang. Jej składnia wygląda następująco:
RANKX(<table>, <expression>[, <value>[, <order>[, <ties>]]])
Podobnie jak w przypadku innych funkcji iteracyjnych ta funkcja wymaga podania tabeli i wyrażenia. Opcjonalnie możesz przekazać wartość rangi, ustawić kierunek kolejności lub określić sposób obsługi klasyfikacji, gdy wartości są powiązane.
Kierunek porządkowania
Porządkowanie może mieć kierunek rosnący lub malejący. Podczas klasyfikowania czegoś korzystnego, takiego jak wartości przychodów, prawdopodobnie użyjesz kolejności malejącej, aby najwyższy przychód był klasyfikowany jako pierwszy. W przypadku klasyfikowania czegoś niekorzystnego, takiego jak skargi klientów, możesz użyć rosnącej kolejności, tak aby najniższa liczba skarg znalazła się w pierwszej kolejności. Jeśli argument zamówienia nie zostanie przekazany, funkcja użyje wartości 0 (zero) (dla kolejności malejącej).
Zachowanie remisów
Podczas wystąpienia wartości remisowych można pominąć numer w rankingu lub użyć kolejnego numeru następującego po numerze pozycji z remisem (jest to wtedy ranking gęsty). Gdy nie przekażesz argumentu więzi, funkcja użyje polecenia Skip. W dalszej części tej lekcji będziesz mieć możliwość pracy z przykładem każdego argumentu tie.
Tworzenie miar rankingu
Dodaj następującą miarę do tabeli Product :
Product Quantity Rank =
RANKX(
ALL('Product'[Product]),
[Quantity]
)
Dodaj miarę Product Quantity Rank (Ranking liczby produktów) do wizualizacji tabeli, która znajduje się na stronie 2 raportu. Wizualizacja tabeli grupuje rowery, wyświetla ich liczbę i porządkuje je malejąco według tej liczby.
Funkcja RANKX
iteruje tabelę zwracaną przez ALL
funkcję języka DAX. Funkcja ALL
jest używana do zwracania wszystkich wierszy w tabeli modelu lub wartości w co najmniej jednej kolumnie i ignoruje wszystkie filtry. W związku z tym w tym przypadku zwraca tabelę składającą się ze wszystkich wartości kolumn Product w tabeli Product . Funkcja musi używać ALL
funkcji, ponieważ wizualizacja RANKX
tabeli będzie grupować według produktu (który jest filtrem w tabeli Product).
Zwróć uwagę, że w wizualizacji tabeli dwa produkty mają pozycję 10, a następujący po nich produkt ma pozycję 12. To przykład wykorzystania argumentu Skipped do określenia zachowania pozycji remisowych.
Twoim kolejnym zadaniem jest wpisać poniższą logikę, by zmodyfikować definicję miary Product Quantity Rank i utworzyć ranking gęsty:
Product Quantity Rank =
RANKX(
ALL('Product'[Product]),
[Quantity],
,
,
DENSE
)
Zauważ, że na wizualizacji tabeli nie ma już pominiętego numeru pozycji. Po dwóch produktach, które mają jednocześnie pozycję 10, widać produkt o pozycji 11.
Zauważ, że na wizualizacji tabeli suma kolumny Product Quantity Rank wynosi jeden (1). Jest to ranking sumy wszystkich produktów.
Nie ma potrzeby wyświetlania rankingu sumy wszystkich produktów, dlatego teraz użyjemy poniższej logiki do zmodyfikowania definicji miary w taki sposób, by zamiast sumy wyświetlała pustą wartość (BLANK), chyba że wybrany zostanie tylko jeden produkt:
Product Quantity Rank =
IF(
HASONEVALUE('Product'[Product]),
RANKX(
ALL('Product'[Product]),
[Quantity],
,
,
DENSE
)
)
Zwróć uwagę, że łączna pozycja Product Quantity Rank jest teraz pusta, która została osiągnięta przy użyciu HASONEVALUE
funkcji języka DAX w celu sprawdzenia, czy kolumna Product w tabeli Product ma jedną wartość w kontekście filtru. Dzieje się tak w przypadku każdej grupy produktów, ale nie w przypadku sumy, która obejmuje wszystkie produkty.
Kontekst filtru HASONEVALUE
i funkcja zostaną wprowadzone w module kontekstu filtru.