Blog JSystems - uwalniamy wiedzę!

Szukaj

Power BI - Komunikaty błędów DAX

Miary nie da się wstawić do fragmentatora ani osi - kolumna obliczeniowa czy parametr pól

W skrócie

  • Miary nie wstawisz w fragmentator Power BI ani na oś kategorii wykresu, bo oba miejsca potrzebują listy wartości z kolumny, a miara liczy jedną wartość dla bieżącego filtra.
  • Kolumna ma wartości zapisane w modelu, więc fragmentator może je wypisać. Miara nie ma takiej listy: jej wynik zależy od tego, co jest zaznaczone na stronie.
  • Gdy odbiorca ma wybierać, którą miarę widzi, użyj parametru pól. Gdy ma filtrować po klasie liczonej z miary, zbuduj kolumnę obliczeniową albo osobną tabelę progów z miarą.

Problem z miarą w fragmentatorze Power BI ma autor raportu, który zbudował miarę z kategorią, na przykład segment sklepu według sprzedaży, i chce dać odbiorcy fragmentator albo oś wykresu z tymi segmentami. Ten sam kłopot ma ktoś, kto chce, żeby odbiorca sam wybierał, czy wykres pokazuje sprzedaż, czy marżę. Pokazujemy, dlaczego miara nie trafia w te miejsca i trzy rozwiązania sprawdzone na modelu Nordvelli.

Jak to wygląda w praktyce

Miary nie da się użyć jako pola fragmentatora ani jako kategorii na osi X wykresu kolumnowego. Według dokumentacji Microsoft fragmentator działa z danymi tekstowymi, liczbowymi i datami, a dla każdego jego stylu dokumentacja podaje obsługiwane typy kolumn. Parametr pól z kolumnami wstawia się w miejsca osi, a parametr z miarami w miejsca wartości. Miara z tekstowym wynikiem nadal działa w tabeli albo w karcie, tylko nie filtruje.

W modelu Nordvelli jest miara Segment Sklepu: IF([Łączna sprzedaż] > 5000000, "Duży", IF([Łączna sprzedaż] > 2000000, "Średni", "Mały")). W tabeli sklepów daje wynik w każdym wierszu, u nas „Duży” dla wszystkich 15 sklepów, bo każdy sprzedał w całym okresie danych, od stycznia 2022 do maja 2026, ponad 12 mln zł. Fragmentatora „Segment” z tej miary nie zbudujesz.

Dlaczego tak się dzieje

Fragmentator pokazuje listę wartości kolumny i po kliknięciu nakłada filtr na tę kolumnę. Oś kategorii grupuje wiersze według wartości kolumny. Kolumna obliczeniowa liczy się raz, przy odświeżeniu, dla każdego wiersza i zapisuje wynik w modelu, więc lista jej wartości istnieje. Miara nie ma zapisanych wartości: liczy się dopiero w kontekście filtra, czyli w zestawie warunków ze strony, wiersza wykresu i fragmentatorów. Ta sama miara daje inny wynik dla 2025 roku, a inny dla całego okresu, więc nie da się z niej zrobić stałej listy do klikania. Różnicę między miarą a kolumną omawiamy w lekcji o podstawach DAX.

Parametr pól obchodzi to ograniczenie inaczej: tworzy małą tabelę, w której każdy wiersz to nazwa pozycji, odwołanie NAMEOF do miary albo kolumny i numer kolejności. Fragmentator pracuje na kolumnie tej tabeli, a wykres podmienia pokazywane pole.

Co zrobić krok po kroku

  1. Ustal, czego chce odbiorca. Jeśli ma wybierać, którą miarę widzi wykres, potrzebujesz parametru pól. Jeśli ma filtrować sklepy po klasie liczonej ze sprzedaży, potrzebujesz kolumny albo tabeli progów.
  2. Parametr pól: na karcie Modelowanie kliknij Nowy parametr i wybierz Pola. Wpisz nazwę, zaznacz miary, zostaw zaznaczone Dodaj fragmentator do tej strony i kliknij Utwórz. Power BI tworzy tabelę z definicją jak niżej. W Nordvelli tabela Miara wyboru ma trzy wiersze z kolejnością 0, 1 i 2. Pole tej tabeli przeciągnij do obszaru Oś Y. Parametr z kolumnami, u nas Wymiar analizy z polami Miasto, Kategoria i KanalSprzedazy, wstawiasz na Oś X.
    Miara wyboru = {
        ("Łączna sprzedaż", NAMEOF('FaktSprzedaz'[Łączna sprzedaż]), 0),
        ("Marża po rabacie", NAMEOF('FaktSprzedaz'[Marża po rabacie]), 1),
        ("Liczba transakcji", NAMEOF('FaktSprzedaz'[Liczba transakcji]), 2)
    }
  3. Stała klasa: kolumna obliczeniowa. Prawy przycisk na DimSklepy w panelu Dane, Nowa kolumna. Kolumna korzysta z istniejącej kolumny Sprzedaż sklepu, czyli sprzedaży z całego okresu danych. Na Nordvelli dała 1 sklep Bardzo duży, 4 Duże, 6 Średnich i 4 Małe. Tę kolumnę wstawisz do fragmentatora i na oś.
    Klasa sklepu =
    SWITCH(
        TRUE(),
        DimSklepy[Sprzedaż sklepu] >= 100000000, "Bardzo duży",
        DimSklepy[Sprzedaż sklepu] >= 30000000, "Duży",
        DimSklepy[Sprzedaż sklepu] >= 18000000, "Średni",
        "Mały"
    )
  4. Pamiętaj o ograniczeniu kolumny: nie reaguje na fragmentatory, bo jest policzona przy odświeżeniu. Z filtrem na 2025 rok kolumna nadal dzieli sklepy na 1, 4, 6 i 4, chociaż sprzedaż jednego roku jest kilka razy mniejsza od sprzedaży z całego okresu. Dla klasy liczonej z całej historii to poprawne, dla klasy w wybranym okresie już nie.
  5. Klasa zależna od filtrów: tabela progów bez relacji i miara. Na karcie Modelowanie kliknij Nowa tabela i wklej pierwszą formułę, potem dodaj do FaktSprzedaz dwie miary: liczbę sklepów w klasie i ich sprzedaż. Tabela zostaje bez relacji z resztą modelu, tak samo jak tabela parametru co-jeśli, bo miary same czytają jej progi. Kolumnę Progi[Klasa] wstawiasz do fragmentatora albo na oś, a miary do wartości.
    Progi = DATATABLE(
        "Klasa", STRING, "Od", DOUBLE, "Do", DOUBLE,
        {
            {"Mały", 0, 18000000},
            {"Średni", 18000000, 30000000},
            {"Duży", 30000000, 100000000},
            {"Bardzo duży", 100000000, 1000000000000}
        }
    )
    
    Sklepy w klasie =
    VAR Od = MIN(Progi[Od])
    VAR Do = MAX(Progi[Do])
    RETURN
        COUNTROWS(
            FILTER(
                VALUES(DimSklepy[Nazwa]),
                VAR s = [Łączna sprzedaż]
                RETURN s >= Od && s < Do
            )
        )
    
    Sprzedaż w klasie =
    VAR Od = MIN(Progi[Od])
    VAR Do = MAX(Progi[Do])
    RETURN
        SUMX(
            FILTER(
                VALUES(DimSklepy[Nazwa]),
                VAR s = [Łączna sprzedaż]
                RETURN s >= Od && s < Do
            ),
            [Łączna sprzedaż]
        )
  6. Sprawdź, czy klasa przelicza się z filtrem. Dla całego okresu miara z tabelą progów dała te same liczby co kolumna: 1, 4, 6 i 4 sklepy. Z filtrem na 2025 rok wynik zmienił się na 14 sklepów Małych i 1 Duży, bo progi ustawiliśmy dla sprzedaży z całego okresu. Wybór klasy Średni w mierze Sprzedaż w klasie dał dla całego okresu 135 119 628,01 zł, a dla 2025 pustą wartość, bo w 2025 żaden sklep nie mieścił się między 18 a 30 mln zł. Klasa Mały w 2025 to 88 748 313,18 zł. Do analizy jednego roku dobierz progi do tego okresu. Gdy miara ma czytać jedną wybraną klasę, pilnuj pustego wyboru, o czym piszemy w poście o SELECTEDVALUE przy kilku zaznaczeniach we fragmentatorze.
Definicja tabeli Miara wyboru z NAMEOF w pasku formuły Power BI i fragmentator z trzema miarami na stronie
Stan zaraz po kliknięciu Utwórz. W pasku formuły definicja z NAMEOF, pod wykresem marży nowy fragmentator Miara wyboru, a w panelu Dane tabela Miara wyboru.

Jak sprawdzić, że problem zniknął

Suma sprzedaży po klasach musi dać sprzedaż całej sieci. Na Nordvelli kolumna Klasa sklepu dała 141 772 848,59 zł dla klasy Bardzo duży, 129 398 412,54 zł dla Dużych, 135 119 628,01 zł dla Średnich i 61 484 120,03 zł dla Małych, razem 467 775 009,17 zł, czyli tyle, ile [Łączna sprzedaż]. Ta sama kontrola po klasach z tabeli progów wyszła identycznie. Z filtrem na 2025 rok tabela progów dała 88 748 313,18 zł dla 14 Małych sklepów i 37 985 957,29 zł dla jednego Dużego, razem 126 734 270,47 zł, czyli sprzedaż całego 2025 roku.

Decyzję podejmuj od razu przy projekcie strony: wybór miary to parametr pól, stała kategoria to kolumna, kategoria zależna od okresu to tabela progów z miarą. Według dokumentacji Microsoft kolumny obliczeniowe mogą spowalniać odświeżanie, bo ich wartości liczą się w jego trakcie, więc nie mnóż ich bez potrzeby. Więcej piszemy w poście o kolumnach obliczeniowych, które spowalniają odświeżanie.

Źródła i sposób sprawdzenia

  • Microsoft Learn: Let report readers use field parameters to change visuals (źródło)
  • Microsoft Learn: Slicer visual in Power BI (style i typy kolumn) (źródło)
  • Microsoft Learn: Create calculated columns in Power BI Desktop (źródło)
  • Sprawdzone zapytaniami DAX na modelu Nordvelli: zawartość tabel Miara wyboru i Wymiar analizy, miara Segment Sklepu, kolumna Klasa sklepu, tabela progów z miarą dla całego okresu i dla 2025 roku.

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

Dlaczego nie mogę dodać miary do fragmentatora w Power BI?
Fragmentator wypisuje listę wartości kolumny i filtruje tę kolumnę, a miara nie ma zapisanych wartości, tylko liczy jedną wartość dla bieżącego filtra. Według dokumentacji Microsoft fragmentator działa z kolumnami tekstowymi, liczbowymi i z datami. Kategorię z miary trzeba zamienić na kolumnę albo tabelę progów.
Jak zrobić fragmentator do wyboru miary w Power BI?
Użyj parametru pól: Modelowanie, Nowy parametr, Pola, zaznacz miary i kliknij Utwórz. Power BI tworzy tabelę z funkcją NAMEOF i fragmentator, a pole tej tabeli wstawiasz na oś Y wykresu. Wybór na fragmentatorze podmienia miarę na wykresie.
Kolumna obliczeniowa czy miara do segmentacji klientów albo sklepów?
Kolumna daje stałą klasę liczoną przy odświeżeniu i nie reaguje na fragmentatory. Gdy klasa ma zależeć od wybranego roku, zbuduj tabelę progów bez relacji i miarę, która liczy sklepy w progu. Na modelu Nordvelli kolumna dla 2025 roku została przy podziale 1, 4, 6 i 4, a miara z progami pokazała 14 i 1.
Czy miarę można wstawić na oś X wykresu w Power BI?
Na oś kategorii wstawiasz kolumnę, a miarę do wartości, czyli na oś Y. Gdy odbiorca ma przełączać wymiar na osi, użyj parametru pól z kolumnami, na przykład Miasto, Kategoria i KanalSprzedazy. Gdy oś ma pokazywać przedziały wartości miary, wstaw na nią kolumnę z tabeli progów.

Komentarze (0)

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

Brak komentarzy...