Blog JSystems - uwalniamy wiedzę!

Szukaj

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

Miara pokazuje tę samą wartość w każdym wierszu tabeli Power BI

W skrócie

  • Gdy w Power BI miara pokazuje tę samą wartość w każdym wierszu, filtr z pola w wierszach nie dochodzi do tabeli, z której miara liczy, więc w każdym wierszu wychodzi wynik całości.
  • Filtr płynie tylko po relacjach, od strony jeden do strony wiele. Pole z tabeli bez takiej drogi, miara z ALL albo kolumna obliczeniowa zamiast miary dają ten sam objaw.
  • Weź kolumnę ze wspólnego wymiaru, dodaj brakującą relację albo przenieś filtr w mierze przez TREATAS. Na modelu Nordvelli budżet po złej kolumnie kategorii pokazuje 129 209 118,49 zł w każdym wierszu.

Macierz kategorii pokazuje przy AGD/RTV, Komputerach, Telefonach i Akcesoriach ten sam budżet, 129 209 118,49 zł, czyli budżet całej sieci na 2025. Power BI nie zgłasza błędu, tylko powtarza jedną liczbę, a wszystko, co z niej wynika (odchylenia, udziały), jest błędne. Ta sama wartość w każdym wierszu pojawia się, gdy jedna wizualizacja łączy pola z kilku tabel, na przykład sprzedaż i budżet albo sprzedaż i powody zwrotów. Objaw ma trzy przyczyny, a na modelu Nordvelli rozpoznajemy każdą z nich i naprawiamy model albo miarę.

Jak to wygląda w praktyce

Macierz z polem Kategoria w obszarze Wiersze, filtrem na rok 2025 i miarami sprzedaży oraz budżetu. Łączna sprzedaż zmienia się w każdym wierszu: AGD/RTV 51 802 669,99 zł, Komputery 35 626 646,49 zł, Telefony 29 186 569,04 zł, Akcesoria 10 118 384,95 zł. Budżet sprzedaży w każdym wierszu pokazuje 129 209 118,49 zł, czyli budżet całej sieci na 2025. Miara Odchylenie od budżetu daje dla Komputerów -93 582 472,00 zł, choć kategoria jest pod planem o 608 709,02 zł.

Drugi przykład: tabela powodów zwrotów z tabeli DimPowodyZwrotow. Miara zwrotów rozkłada się na osiem powodów, a Łączna sprzedaż w każdym z ośmiu wierszy ma 467 775 009,17 zł, czyli sprzedaż całej sieci. Silnik liczy takie zapytanie bez błędu, więc jedynym sygnałem jest powtórzona liczba.

Dlaczego tak się dzieje

Wiersz tabeli filtruje kolumnę, z której pochodzi pole. Dalej filtr idzie wyłącznie po relacjach, od strony jeden do strony wiele, gdy relacja ma kierunek pojedynczy. Model Nordvelli ma dwie kolumny Kategoria: w DimProdukty (nazwa kategorii przy każdym produkcie) i w DimKategorie (słownik czterech kategorii). FaktSprzedaz łączy się z DimProdukty, a ta z DimKategorie, więc sprzedaż reaguje na obie kolumny. FaktBudzet łączy się z DimKategorie, a filtr z DimProdukty do DimKategorie nie płynie, bo relacja wiele do jednego przenosi go tylko od kategorii do produktów. Miara budżetu nie dostaje filtra kategorii i w każdym wierszu liczy cały rok. Tak samo DimPowodyZwrotow ma relację tylko z FaktZwroty, więc sprzedaż nic o powodach nie wie.

Ten sam objaw mają dwie inne przyczyny. Pierwsza to miara, która celowo zdejmuje filtr: CALCULATE([Łączna sprzedaż], ALL(DimProdukty)) daje 467 775 009,17 zł w każdym wierszu, także gdy kategorie pochodzą z DimKategorie, bo ALL na tabeli produktów zdejmuje też filtr, który przychodzi do produktów z tabeli kategorii. Druga to kolumna obliczeniowa w miejscu miary: Sprzedaż sklepu (zła) w DimSklepy, liczona samym SUM, ma w każdym sklepie 467 775 009,17 zł. Skąd ta różnica, wyjaśniamy w poście o przejściu kontekstu w kolumnie obliczeniowej.

Macierz kategorii Nordvelli: Łączna sprzedaż i Sprzedaż wszystkich kategorii 467 775 009 zł w każdym wierszu
Łączna sprzedaż zmienia się w każdym wierszu, a Sprzedaż wszystkich kategorii wszędzie pokazuje 467 775 009 zł.

Co zrobić krok po kroku

  1. Ustal, z której tabeli liczy miara. Zaznacz ją w panelu Dane i przeczytaj formułę w pasku formuły: Budżet sprzedaży to SUM(FaktBudzet[BudzetSprzedazy]), więc liczy z FaktBudzet. Potem odszukaj w panelu Dane pole z obszaru Wiersze: tabela, pod którą leży, to tabela tego pola.
  2. Otwórz Widok modelu i prześledź drogę od tabeli pola do tabeli miary. Każdy odcinek musi prowadzić od strony 1 do strony wiele relacji, zgodnie ze strzałką na linii. Z DimKategorie do FaktBudzet droga jest bezpośrednia. Z DimProdukty do FaktBudzet drogi nie ma. Listę relacji z kierunkiem filtrowania pokazuje też okno Zarządzanie relacjami.
  3. Podmień pole na kolumnę ze wspólnego wymiaru: usuń z obszaru Wiersze pole Kategoria z DimProdukty i przeciągnij Kategoria z DimKategorie. Budżet na 2025 rozkłada się wtedy na AGD/RTV 52 809 814,42 zł, Komputery 36 235 355,51 zł, Telefony 29 787 856,36 zł i Akcesoria 10 376 092,20 zł, a odchylenie Komputerów to -608 709,02 zł. Sprzedaż się nie zmienia, bo filtr z DimKategorie dochodzi do faktów przez produkty. Układ z dwiema tabelami faktów opisujemy w poście o sprzedaży i budżecie ze wspólnymi wymiarami.
  4. Żeby nikt znowu nie wybrał złej kolumny, ukryj zdublowaną Kategoria w DimProdukty: prawy przycisk na kolumnie w panelu Dane, Ukryj w widoku raportu. Kolumna zostaje w modelu, znika tylko z listy pól raportu. Ten sam błąd na wykresie kaskadowym pokazujemy w lekcji o wizualizacjach zaawansowanych, gdzie podział po złej kolumnie zepchnął oś do -40 mln zł.
  5. Gdy wspólnego wymiaru nie ma, a modelu nie możesz zmienić, przenieś filtr w mierze funkcją TREATAS. Nakłada ona wartości jednej kolumny jako filtr na kolumnę innej tabeli, bez relacji. Ta miara z wierszami z DimProdukty daje te same cztery kwoty budżetu co kolumna z DimKategorie.
    Budżet wg kategorii produktu =
    CALCULATE (
        [Budżet sprzedaży],
        TREATAS ( VALUES ( DimProdukty[Kategoria] ), DimKategorie[Kategoria] )
    )
  6. Gdy tabela nie ma żadnej relacji z faktami, utwórz ją w Widoku modelu, przeciągając kolumnę klucza na odpowiadającą jej kolumnę drugiej tabeli, albo w oknie Zarządzanie relacjami przyciskiem Nowa relacja. Wyjątkiem jest tabela parametru co-jeśli, na przykład Rabat proc: z Łączną sprzedażą daje 467 775 009,17 zł w każdym wierszu i tak ma być, bo wartość parametru czyta się w mierze, a nie przez relację.
  7. Gdy pole i miara są z właściwych tabel, przeczytaj formułę miary. ALL, REMOVEFILTERS i ALLEXCEPT celowo zdejmują filtry i taka miara powtarza wartość w każdym wierszu, bo służy za mianownik. Jeśli miara ma reagować na wiersz, usuń zdejmowanie filtra albo zawęź je do jednej kolumny, jak w poście o udziale procentowym z ALL, ALLSELECTED i REMOVEFILTERS.

Jak sprawdzić, że problem zniknął

Po poprawce każdy wiersz ma swoją wartość, a wiersze sumują się do wiersza Suma. Na modelu Nordvelli cztery kwoty budżetu z DimKategorie dają razem 129 209 118,49 zł, czyli budżet sieci na 2025. Ten sam test działa jako szybka kontrola relacji: wstaw tabelę z jedną kolumną wymiaru i jedną miarą. Gdy każdy wiersz pokazuje kwotę równą wartości miary bez żadnego filtra, filtr z tego wymiaru do miary nie dochodzi.

Wizualizacje z miarami z kilku tabel faktów buduj tylko na kolumnach wymiarów połączonych z każdą z tych tabel, a kolumny zdublowane w innych tabelach ukrywaj w widoku raportu.

Źródła i sposób sprawdzenia

  • Microsoft Learn: Model relationships in Power BI Desktop (propagacja filtrów i kierunek filtrowania krzyżowego) (źródło)
  • Microsoft Learn: TREATAS function (DAX) (źródło)
  • Microsoft Learn: ALL function (DAX) (źródło)
  • Microsoft Learn: Understand star schema and the importance for Power BI (źródło)
  • Sprawdzone zapytaniami DAX na modelu Nordvelli: budżet po kategoriach z DimProdukty i DimKategorie, sprzedaż po powodach zwrotów, miara z ALL, kolumna bez CALCULATE, TREATAS i tabela parametru.

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 miara w Power BI pokazuje tę samą wartość w każdym wierszu?
Najczęściej filtr z pola w wierszach nie dochodzi do tabeli, z której liczy miara, bo między nimi nie ma relacji albo relacja filtruje w przeciwną stronę. Miara liczy wtedy wynik bez filtra i powtarza go w każdym wierszu. Ten sam objaw daje miara z ALL albo REMOVEFILTERS oraz kolumna obliczeniowa użyta zamiast miary.
Dlaczego budżet nie dzieli się na kategorie produktów w Power BI?
Tabela budżetu jest zwykle połączona z tabelą kategorii, a nie z tabelą produktów. Pole Kategoria z tabeli produktów nie filtruje kategorii, bo relacja wiele do jednego przenosi filtr tylko od kategorii do produktów. Na modelu Nordvelli z kolumną z DimProdukty każdy wiersz pokazuje 129 209 118,49 zł, a z kolumną z DimKategorie budżet rozkłada się na cztery kategorie.
Jak połączyć dwie tabele bez relacji w jednej mierze DAX?
Użyj TREATAS w CALCULATE, na przykład CALCULATE([Budżet sprzedaży], TREATAS(VALUES(DimProdukty[Kategoria]), DimKategorie[Kategoria])). TREATAS nakłada wartości jednej kolumny jako filtr na kolumnę innej tabeli. Gdy możesz zmienić model, prostsza jest relacja albo kolumna ze wspólnego wymiaru.
Czy ta sama wartość w każdym wierszu to zawsze błąd?
Nie. Miara mianownika, na przykład sprzedaż wszystkich kategorii z ALL, ma powtarzać sumę całości, bo służy do liczenia udziału. Tak samo zachowuje się tabela parametru co-jeśli bez relacji z faktami. Błąd jest wtedy, gdy miara miała reagować na wiersz, a nie reaguje.

Komentarze (0)

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

Brak komentarzy...