Pokaż Top X wartości i skategoryzuj pozostałe w Power BI
W tym artykule, przedstawię jak w Power BI wyświetlić wartość sprzedaży dla najlepszych X produktów, a resztę skategoryzować jako „Other” (pozostałe). To często spotykana potrzeba biznesowa. Spójrzmy jak używając modelowania w DAX i kilku prostych miar jesteśmy w stanie zwizualizować wymagane obliczenia.
Wymagania
Podsumujmy wpierw jakie wymagania muszą zostać spełnione:
-
Wyświetlenie nazw produktów wraz z grupą pozostałych na osi X.
-
Wbudowanie fragmentatora używanego do wyboru top X produktów.
-
Formatowanie warunkowe do podświetlenia wartości sprzedaży produktów i Other.
-
Dynamiczny tytuł pokazujący % udział w sprzedaży całkowitej produktów z grupy Top.
Wyświetlanie produktów i grupy pozostałych produktów na jednej osi
W naszym scenariuszu musimy przedstawić nazwy produktów wraz z kategorią pozostałych na poziomej osi wykresu. Możemy to wykonać mając kolumnę z listą produktów zawierającą dodatkowy rekord „Other”. Utwórzmy tabelę DAX zgodnie z poniższym:
dNProduct = UNION( DISTINCT ( dProduct[ProductName]), -- unikalne produkty DATATABLE ( -- dodatkowy wiersz określający resztę "Product", STRING, {{"Other"}} ) )
Utwórzmy relację między tabelą produktów, a nowoutworzoną tabelą:
Kolejnym krokiem będzie utworzenie miary, która odpowiednio przeliczy wartość sprzedaży dla TOP 3 produktów.
_Top N Sum Sales = CALCULATE ( [C_SalesAmount], -- moja miara wartości sprzedaży dla aktualnego okresu KEEPFILTERS ( TOPN ( 3, ALLSELECTED( dNProduct ), [C_SalesAmount] ) ) )
Nałóżmy teraz naszą miarę na matrycę, aby zaprezentować wynik.
Jak widać to jeszcze nie to co chcieliśmy osiągnąć. Następnym krokiem będzie utworzenie zestawienia top 3 produktów i dołożenie do nich wartości pozostałych produktów zgrupowanych w kategorii „Other”. Nasza miara powinna wyglądać jak poniżej.
_Top N Sum Sales = VAR _TopProdTable = TOPN ( 3, ALLSELECTED ( dNProduct ), [C_SalesAmount] ) VAR _TopProdSales = CALCULATE ( [C_SalesAmount], KEEPFILTERS ( dNProduct ) ) VAR _OtherSales = CALCULATE ( [C_SalesAmount], ALLSELECTED ( dNProduct ) ) - CALCULATE ( -- odejmowanie wartości sprzedaży top 3 produktów [C_SalesAmount], _TopProdTable ) VAR _CurrentProd = SELECTEDVALUE ( dNProduct[ProductName] ) RETURN IF ( -- kategoryzacja top produktów i pozostałych _CurrentProd <> "Other", _TopProdSales, _OtherSales )
Nasza matryca będzie wyglądać następująco:
Wymaganie spełnione! Przejdźmy teraz dalej.
Wbudowanie fragmentatora używanego do wyboru top X produktów
Kolejnym krokiem będzie zmiana stałej wartości top 3 produktów na zmienną, którą wybierzemy od jednego do pięciu najlepiej sprzedających się produktów, a resztę skategoryzujemy jako Other. Utworzymy w tym celu tabelę TopN Selection według poniższego kodu.
TopN Selection =
{1,2,3,4,5}
Następnie utworzymy fragmentator zawierający utworzoną kolumnę. Teraz pozostaje nam przerobić naszą miarę Top N Sum Sales tak, aby uwzględniała użycie zmiennej ilości topowych produktów.
Top N Sum Sales = VAR _TopNSelected = SELECTEDVALUE( 'TopN Selection'[Value] ) VAR _TopProdTable = TOPN( _TopNSelected, ALLSELECTED( dNProduct ), [C_SalesAmount] ) VAR _TopProdSales = CALCULATE( [C_SalesAmount], KEEPFILTERS( _TopProdTable ) ) VAR _OtherSales = CALCULATE( [C_SalesAmount], ALLSELECTED( dNProduct ) ) - CALCULATE( [C_SalesAmount], _TopProdTable ) VAR _CurrentProd= SELECTEDVALUE( dNProduct[ProductName] ) RETURN IF( _CurrentProd<>"Others", _TopProdSales, _OtherSales )
Po przerobieniu naszej matrycy na wykres i dodaniu fragmentatora osiągniemy poniższy efekt.
Przejdźmy do kolejnego zadania.
Formatowanie warunkowe do podświetlenia wartości sprzedaży produktów i Other
Aby oznaczyć innym kolorem najlepsze produkty i kategorię pozostałych posłużymy się miarą i formatowaniem warunkowym. Zacznijmy najpierw od miary.
TopNColor = SWITCH( SELECTEDVALUE( dNProduct[ProductName] ), -- wybrany produkt "Other", "#117D40", -- w przypadku innych wybierz zielony (oznaczony kodem HEX) "#F1C917" -- w innym przypadku wybierz żółty (HEX) )
Aby zaaplikować miarę jako formatowanie warunkowe przejdź do ustawienia formatowania wykresu, następnie wybierz Data Color i naciśnij przycisk fx, aby wywołać okno formatowania warunkowego. W oknie formatowania warunkowego wybierz format by field i kolejno miarę TopNColor. Wynik powinien wyglądać jak poniżej.
Przejdźmy do ostatniego kroku.
Dynamiczny tytuł pokazujący % udział w sprzedaży całkowitej produktów z grupy Top
Aby utworzyć dynamiczny tytuł, który przedstawi procentowy udział wybranych produktów w sprzedaży musimy utworzyć miarę.
TopNTitle = VAR _TopProd = CALCULATE ( [C_SalesAmount], TOPN ( SELECTEDVALUE( 'TopN Selection'[Value] ), ALLSELECTED( dNProduct[ProductName] ), [C_SalesAmount] ) ) VAR _TopProdPct= DIVIDE ( _TopProd, [C_SalesAmount] ) RETURN "Top " & SELECTEDVALUE( 'TopN Selection'[Value] ) & " products made " & FORMAT ( _TopProdPct, "#.0% Sales" )
Następnie wstawimy pole tekstowe (textbox), w którym w polu tytułu użyjemy funkcji klikając fx i wybierając utworzoną powyżej miarę. Spójrzmy na nasze rozwiązanie na poniższym zrzucie ekranu.
Gotowe! Mam nadzieję, że udało Wam się dobrnąć do końca rozwiązania i otrzymać identyczny wynik. Jeśli uważasz, że można poprawić to rozwiązanie podziel się pomysłem w komentarzu.
Do ćwiczenia wykorzystałem przykładową bazę danych AdventureWorks. Możesz ją pobrać stąd.