Blog JSystems - uwalniamy wiedzę!
Blog JSystems - uwalniamy wiedzę!
Power BI - DAX liczy, ale nie to, czego oczekujesz
Top N produktów w Power BI - filtr wizualizacji czy miara z TOPN
Top 10 produktów to jedno z pierwszych zestawień, o które prosi zarząd: dziesięć najlepiej sprzedających się produktów, ich udział w sprzedaży i reszta jako jedna pozycja. W Power BI prowadzą do niego dwie drogi, filtr Najlepsze N w panelu Filtry i miara z TOPN. Pokazujemy na modelu Nordvelli, kiedy wybrać którą, i miejsca, w których każda daje inny wynik, niż się spodziewasz.
Tabela z polem DimProdukty[Nazwa] i miarą [Łączna sprzedaż] po ustawieniu filtra na 10 produktów pokazuje w wierszu Suma 243 083 296,32 zł, a nie 467 775 009,17 zł sprzedaży całej sieci. Miara z TOPN po VALUES zamiast zawęzić listę pokazuje wszystkie 30 produktów. TOPN z dwoma regionami po liczbie sklepów zwraca trzy pozycje: Centrum, Południe i Zachód.
Pojawiają się też komunikaty. Power BI ostrzega „Możesz zastosować tylko jeden filtr Pierwsze N.”, choć na liście typów ten sam filtr nazywa się Najlepsze N. Gdy wizualizacja z takim filtrem jest źródłem wyróżniania, a filtr dotyczy pola, którego nie ma na jej osi ani w legendzie, Power BI pisze: „Wyróżnianie krzyżowe zostało wyłączone dla tej wizualizacji. Dla źródła wyróżnienia zastosowano filtr górnego N w polu, które nie jest używane jako grupa w tej wizualizacji (np. oś lub legenda). Jeśli wyróżnianie krzyżowe jest wymagane, można usunąć filtr.”
Filtr Najlepsze N działa na poziomie wizualizacji: wybiera N elementów pola według wartości miary, a potem cała wizualizacja, łącznie z wierszem Suma, liczy się tylko dla nich. Dziesięć produktów Nordvelli to 243 083 296,32 zł, czyli 52,0 procent sprzedaży. TOPN robi to samo w DAX: zwraca N wierszy tabeli według wyrażenia. Według dokumentacji Microsoft przy remisie na N-tym miejscu TOPN zwraca wszystkie remisujące wiersze, więc wyniku może być więcej niż N, a wiersze nie są posortowane.
Tabela w drugim argumencie TOPN decyduje o wyniku tak samo jak w RANKX. W wierszu tabeli VALUES(DimProdukty[Nazwa]) zawiera tylko bieżący produkt, który zawsze mieści się w swojej pierwszej dziesiątce, dlatego widać wszystkie 30. ALL(DimProdukty[Nazwa]) zdejmuje filtr z nazwy, ale zostawia filtry z innych kolumn tej samej tabeli, na przykład z kategorii, i filtry z innych tabel, na przykład z roku. Ten sam mechanizm w rankingu opisujemy w poście o RANKX, który daje 1 w każdym wierszu.
Zobacz też: Szkolenie Zaawansowany DAX w Power BI
[Łączna sprzedaż] i kliknij Zastosuj filtr. Na modelu Nordvelli lista zaczyna się od Smartfona Zentaro Nova 5 Pro (32 225 603,53 zł) i kończy na Telewizorze Bexoria 55 cali QLED (19 819 051,71 zł).Sprzedaż w Top 10 =
CALCULATE (
[Łączna sprzedaż],
KEEPFILTERS (
TOPN ( 10, ALL ( DimProdukty[Nazwa] ), [Łączna sprzedaż] )
)
)ALL(DimProdukty[Nazwa]) wybór kategorii Akcesoria daje dziesiątkę liczoną w tej kategorii. Akcesoria Nordvelli to siedem produktów, więc miara z kroku 3 pokazuje wszystkie, a z liczbą 3 w pierwszym argumencie TOPN pierwszą trójkę: Kamera sportowa Nordvella Trek (11 644 553,38 zł), Słuchawki Bexoria Silento (9 429 099,17 zł) i Router Kelvani Netro 6000 (5 959 232,34 zł). Z ALL(DimProdukty) liczy się dziesiątka całej sieci, w której nie ma akcesoriów, więc miara zostaje pusta. Rok działa w obu wersjach: w 2025 roku do dziesiątki wchodzi Laptop Kelvani Vela 13, którego nie ma w dziesiątce całego okresu.ProduktyZInne =
UNION (
SELECTCOLUMNS ( VALUES ( DimProdukty[Nazwa] ), "Produkt", DimProdukty[Nazwa] ),
ROW ( "Produkt", "Inne" )
)ProduktyZInne[Produkt] i tę miarę. Na modelu Nordvelli tabela ma 11 wierszy, Inne to 224 691 712,85 zł, a suma 467 775 009,17 zł. W 2025 roku Inne to 59 837 527,97 zł ze 126 734 270,47 zł.Sprzedaż Top 10 i Inne =
VAR Wybrany = SELECTEDVALUE ( ProduktyZInne[Produkt] )
VAR Top10 = TOPN ( 10, ALL ( DimProdukty[Nazwa] ), [Łączna sprzedaż] )
RETURN
SWITCH (
TRUE (),
ISBLANK ( Wybrany ), [Łączna sprzedaż],
Wybrany = "Inne",
CALCULATE ( [Łączna sprzedaż], EXCEPT ( ALL ( DimProdukty[Nazwa] ), Top10 ) ),
Wybrany IN Top10,
CALCULATE ( [Łączna sprzedaż], DimProdukty[Nazwa] = Wybrany )
)Porównaj obie drogi na tych samych danych: filtr Najlepsze N i miara z kroku 3 muszą dawać te same produkty i tę samą sumę 243 083 296,32 zł, a tabela z pozycją Inne musi sumować się do 467 775 009,17 zł, czyli Top 10 plus 224 691 712,85 zł. Sprawdź też granicę listy: dziewiąty Tablet Kelvani Tavo 11 (19 820 948,37 zł) wyprzedza dziesiąty Telewizor Bexoria 55 cali QLED (19 819 051,71 zł) o 1 896,66 zł, więc po zmianie okresu albo kategorii lista może wyglądać inaczej i to jest poprawne zachowanie.
W tytule wizualizacji zapisuj, w jakim zbiorze liczysz Top N (w kategorii, w sieci, w roku), a w karcie obok pokazuj sprzedaż całości. Udział dziesiątki w całości liczysz tak jak każdy udział procentowy, opisany w poście o ALL, ALLSELECTED i REMOVEFILTERS. Żeby pozycja Inne była zawsze na końcu, dodaj do tabeli kolumnę kolejności i ustaw ją przez Sortuj według kolumny, jak w poście o kolejności miesięcy na osi.
Zachowanie programu sprawdziliśmy w Power BI Desktop 2.157 (wydanie z sierpnia 2026 r.) z polskim interfejsem, a przykłady na modelu sieci Nordvella z bezpłatnego kursu Power BI. Microsoft wydaje nową wersję Power BI Desktop co miesiąc, więc nazwy przycisków i limity usługi mogą się zmieniać. Aktualne wartości podaje dokumentacja Microsoft Learn.
Wróć do listy: 131 najczęstszych pytań i problemów związanych z Power BI
Komentarze (0)
Brak komentarzy...