Blog JSystems - uwalniamy wiedzę!
Blog JSystems - uwalniamy wiedzę!
Power BI - DAX liczy, ale nie to, czego oczekujesz
CALCULATE nadpisuje wybór we fragmentatorze - KEEPFILTERS
We fragmentatorze miast zaznaczasz Kraków i Gdańsk: karta Łączna sprzedaż spada do 78 334 427,94 zł, a karta obok z miarą Sprzedaż Warszawa i Kraków dalej pokazuje 273 297 861,68 zł. CALCULATE z warunkiem na kolumnie, po której odbiorca filtruje stronę, zastępuje wybór z fragmentatora własnym warunkiem. Rozróżniamy zachowanie zamierzone od błędu i sprawdzamy, jak KEEPFILTERS zmienia wynik. Wszystkie kwoty pochodzą z zapytań na modelu Nordvelli z 15 sklepami w 11 miastach.
Weźmy miarę Sprzedaż Warszawa i Kraków z warunkiem DimSklepy[Miasto] IN { "Warszawa", "Kraków" } w CALCULATE, czyli CALCULATE([Łączna sprzedaż], DimSklepy[Miasto] IN { "Warszawa", "Kraków" }). Na modelu Nordvelli bez żadnego filtra daje 273 297 861,68 zł, czyli 222 818 294,93 zł Warszawy (z Nordvellą Online) i 50 479 566,75 zł Krakowa. Gdy we fragmentatorze z polem DimSklepy[Miasto] zaznaczysz Kraków i Gdańsk, karta Łączna sprzedaż pokazuje 78 334 427,94 zł, a karta z miarą miast dalej 273 297 861,68 zł. Przy samym Gdańsku jest tak samo: Gdańsk ma 27 854 861,19 zł sprzedaży, a miara nadal pokazuje Warszawę i Kraków.
W macierzy z miastami w wierszach objaw wygląda jeszcze inaczej: ta sama kwota 273 297 861,68 zł pojawia się przy każdym z 11 miast, także przy Białymstoku i Lublinie. W kursie ten sam efekt widać na kategoriach produktów: przy zaznaczonych Telefonach miara Sprzedaż komputery dalej liczy komputery.

Zobacz też: Szkolenie Zaawansowany DAX w Power BI
Kontekst filtra, czyli zestaw warunków z fragmentatorów, wierszy macierzy i filtrów strony, trafia do CALCULATE z zewnątrz. Według dokumentacji Microsoft argumenty filtrujące CALCULATE zastępują wszystkie istniejące filtry na tych samych kolumnach, a filtry na kolumnach, których argumenty nie wymieniają, zostają bez zmian. Warunek na DimSklepy[Miasto] usuwa więc zaznaczenie miast z fragmentatora i wstawia w jego miejsce Warszawę i Kraków. Zapis z FILTER(ALL(DimSklepy[Miasto]), ...) działa tak samo, sprawdziliśmy: przy Krakowie i Gdańsku daje 273 297 861,68 zł.
Inaczej jest, gdy fragmentator filtruje inną kolumnę. Przy zaznaczonych sklepach Nordvella Gdańsk i Nordvella Kraków Galeria, czyli filtrze na DimSklepy[Nazwa], miara miast daje 18 933 826,98 zł, sam Kraków Galeria, bo filtr na nazwie zostaje i przecina się z warunkiem. Tak samo przy regionie Południe (Kraków i Katowice) wynik to 50 479 566,75 zł. KEEPFILTERS według dokumentacji Microsoft zmienia to zachowanie: istniejący filtr na tej samej kolumnie zostaje, a do kontekstu trafia przecięcie obu warunków. Ten sam mechanizm w macierzy z jedną kwotą w każdym wierszu opisujemy też w poście o mierze z tą samą wartością w każdym wierszu.
DimSklepy[Miasto], warunek miary zastępuje wybór użytkownika.Sprzedaż Warszawa i Kraków (przecięcie) =
CALCULATE (
[Łączna sprzedaż],
KEEPFILTERS ( DimSklepy[Miasto] IN { "Warszawa", "Kraków" } )
)Sprzedaż Warszawa i Kraków (VALUES) =
CALCULATE (
[Łączna sprzedaż],
FILTER ( VALUES ( DimSklepy[Miasto] ), DimSklepy[Miasto] IN { "Warszawa", "Kraków" } )
)DimSklepy[Miasto] w obszarze Wiersze, w Wartości obie wersje miary. Wersja bez KEEPFILTERS ma 273 297 861,68 zł w każdym wierszu. Wersja z KEEPFILTERS ma 222 818 294,93 zł przy Warszawie, 50 479 566,75 zł przy Krakowie, puste pola przy pozostałych miastach i 273 297 861,68 zł w wierszu Suma.DimSklepy[Miasto], miara nadal będzie respektować wybór.Przetestuj miarę trzema zaznaczeniami fragmentatora i porównaj z kartą Łączna sprzedaż. Bez zaznaczeń miara z KEEPFILTERS daje 273 297 861,68 zł, przy Krakowie i Gdańsku 50 479 566,75 zł, czyli mniej niż 78 334 427,94 zł łącznej sprzedaży obu miast, a przy samym Gdańsku pustą wartość. Wynik większy niż łączna sprzedaż zaznaczonych miast oznacza, że warunek w CALCULATE nadal zastępuje wybór.
Przy każdej mierze z warunkiem w CALCULATE zapisz w jej opisie, czy ma reagować na fragmentatory, i sprawdź ją z fragmentatorem po tej samej kolumnie co warunek. Gdy fragmentator nie zmienia wizualizacji z innego powodu, na przykład przez brak relacji, przeczytaj post o fragmentatorze, który nie filtruje wykresu.
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...