Obliczanie rankingów

Ukończone

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.

Obraz przedstawiający wizualizację tabeli o tytule „Bike Sales” (Sprzedaż rowerów). Ma ona trzy kolumny: Product (Produkt), Quantity (Liczba) oraz Product Quantity Rank (Ranking liczby produktów). Wiersze tabeli są uporządkowane malejąco według liczby. Dwa produkty mają pozycję 10, a następujący po nich produkt ma pozycję 12.

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.

Obraz przedstawiający wizualizację tabeli o tytule „Bike Sales” (Sprzedaż rowerów). Ma ona trzy kolumny: Product (Produkt), Quantity (Liczba) oraz Product Quantity Rank (Ranking liczby produktów). Wiersze tabeli są uporządkowane malejąco według liczby. Dwa produkty mają pozycję 10, a następujący po nich produkt ma pozycję 11.

Zauważ, że na wizualizacji tabeli suma kolumny Product Quantity Rank wynosi jeden (1). Jest to ranking sumy wszystkich produktów.

Obraz pokazujący, że suma kolumny Product Quantity Rank wynosi 1.

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
    )
)

Obraz pokazujący, że suma kolumny Product Quantity Rank jest pusta (BLANK).

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.