Blog JSystems - uwalniamy wiedzę!

Szukaj

Power BI - DAX liczy, ale nie to, czego oczekujesz

Top N produktów w Power BI - filtr wizualizacji czy miara z TOPN

W skrócie

  • Top 10 produktów w Power BI da się pokazać filtrem Najlepsze N w panelu Filtry albo miarą z TOPN, a obie drogi potrafią zaskoczyć wierszem Suma, remisem albo listą wszystkich produktów.
  • Filtr i TOPN wybierają N elementów według wartości miary w bieżącym kontekście filtra, więc wynik zależy od tego, co zostało w kontekście: wybranego roku, kategorii i tego, czy w TOPN jest ALL.
  • Do prostej tabeli wystarczy filtr Najlepsze N. Gdy potrzebujesz sumy dziesięciu produktów w karcie, pozycji Inne albo kontroli remisów, zbuduj miarę z TOPN po ALL i KEEPFILTERS.

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.

Jak to wygląda w praktyce

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.”

Dlaczego tak się dzieje

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.

Co zrobić krok po kroku

  1. Zacznij od filtra, gdy wystarczy sama tabela albo wykres. Zaznacz wizualizację, w panelu Filtry w sekcji Filtry dla tej wizualizacji rozwiń kartę pola Nazwa, w polu Typ filtru wybierz Najlepsze N, w Pokaż elementy wpisz 10, do pola Według wartości przeciągnij [Łą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ł).
  2. Podpisz wiersz Suma albo dodaj kartę ze sprzedażą całej sieci. Suma w tabeli z filtrem to suma dziesięciu produktów, a nie całej sprzedaży. Gdy obok ma stać udział Top 10 w całości, potrzebna jest miara z kroku 3, bo filtr wizualizacji nie przenosi się do karty.
  3. Gdy wynik Top 10 ma trafić do karty, innej miary albo do wizualizacji bez nazw produktów, utwórz miarę: w panelu Dane kliknij prawym przyciskiem tabelę FaktSprzedaz i wybierz Nowa miara. KEEPFILTERS zostawia filtr wiersza, więc w tabeli produktów wartości ma 10 wierszy, a w karcie miara daje 243 083 296,32 zł. Wersja z VALUES zamiast ALL pokazuje wszystkie 30 produktów.
    Sprzedaż w Top 10 =
    CALCULATE (
        [Łączna sprzedaż],
        KEEPFILTERS (
            TOPN ( 10, ALL ( DimProdukty[Nazwa] ), [Łączna sprzedaż] )
        )
    )
  4. Zdecyduj, w jakim zbiorze liczysz Top N. Z 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.
  5. Do pozycji Inne potrzebna jest osobna lista produktów z dodatkowym wierszem, bez relacji z innymi tabelami. Na karcie Modelowanie kliknij Nowa tabela i wpisz formułę obok. Na modelu Nordvelli tabela ma 31 wierszy: 30 produktów i Inne.
    ProduktyZInne =
    UNION (
        SELECTCOLUMNS ( VALUES ( DimProdukty[Nazwa] ), "Produkt", DimProdukty[Nazwa] ),
        ROW ( "Produkt", "Inne" )
    )
  6. Dodaj miarę, która dla produktu z dziesiątki zwraca jego sprzedaż, dla Inne sprzedaż pozostałych produktów, a w wierszu Suma całość. W tabeli wstaw pole 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 )
        )
  7. Sprawdź remisy na granicy listy. Według dokumentacji TOPN przy remisie na N-tym miejscu zwraca wszystkie remisujące pozycje: dwa pierwsze regiony Nordvelli po liczbie sklepów to trzy regiony, bo Południe i Zachód mają po 3 sklepy. Gdy lista ma mieć dokładnie N pozycji, dodaj w TOPN drugie wyrażenie sortujące, na przykład nazwę, które rozstrzygnie remis. Kolejność pozycji w tabeli ustawiasz sortowaniem wizualizacji, nie w TOPN.

Jak sprawdzić, że problem zniknął

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.

Źródła i sposób sprawdzenia

  • Microsoft Learn: TOPN function (DAX) (źródło)
  • Microsoft Learn: KEEPFILTERS function (DAX) (źródło)
  • Microsoft Learn: EXCEPT function (DAX) (źródło)
  • Microsoft Learn: SELECTEDVALUE function (DAX) (źródło)
  • Sprawdzone zapytaniami DAX na modelu Nordvelli: dziesięć produktów i ich suma, TOPN z ALL i z VALUES, kategoria Akcesoria, rok 2025, remisy regionów i tabela z pozycją Inne.

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

Najczęściej zadawane pytania

Jak pokazać top 10 produktów w Power BI?
Filtrem Najlepsze N w panelu Filtry: wybierasz typ filtru, wpisujesz 10 i wskazujesz miarę, według której liczy się kolejność. Gdy wynik ma trafić do karty albo innej miary, zbuduj miarę z CALCULATE, KEEPFILTERS i TOPN po ALL z kolumną nazwy produktu. Na modelu Nordvelli dziesięć produktów to 243 083 296,32 zł z 467 775 009,17 zł sprzedaży.
Dlaczego TOPN pokazuje wszystkie produkty zamiast 10?
W TOPN jest VALUES z kolumną nazwy, a w wierszu tabeli VALUES zawiera tylko bieżący produkt, który zawsze mieści się w swojej pierwszej dziesiątce. Zamień VALUES na ALL z tą samą kolumną. Na modelu Nordvelli wersja z VALUES pokazuje 30 produktów, a wersja z ALL 10.
Jak dodać pozycję Inne do top 10 w Power BI?
Utwórz tabelę z nazwami produktów i dodatkowym wierszem Inne, bez relacji z innymi tabelami, i miarę, która dla Inne liczy sprzedaż produktów spoza dziesiątki przez EXCEPT. W tabeli wstawiasz pole z nowej tabeli i tę miarę. Na modelu Nordvelli Inne to 224 691 712,85 zł, a całość nadal 467 775 009,17 zł.
Dlaczego TOPN zwraca więcej wierszy niż N?
Przy remisie na N-tym miejscu TOPN zwraca wszystkie remisujące wiersze, więc wyniku może być więcej niż N. Na modelu Nordvelli dwa pierwsze regiony po liczbie sklepów to trzy regiony, bo dwa z nich mają po 3 sklepy. Drugie wyrażenie sortujące w TOPN, na przykład nazwa, rozstrzyga taki remis.

Komentarze (0)

Musisz być zalogowany by móc dodać komentarz. Zaloguj się przez Google

Brak komentarzy...