Blog JSystems - uwalniamy wiedzę!
Blog JSystems - uwalniamy wiedzę!
Power BI - DAX liczy, ale nie to, czego oczekujesz
SELECTEDVALUE zwraca pustą wartość - kilka zaznaczeń we fragmentatorze
Odbiorca zaznacza we fragmentatorze rabat 10 procent, z klawiszem Ctrl dokłada 12 procent, a sprzedaż po rabacie wraca do 467 775 009,17 zł, czyli kwoty bez żadnego rabatu. Przy dwóch zaznaczeniach SELECTEDVALUE nie ma jednej wartości do zwrócenia, więc miara po cichu wraca do wartości domyślnej i liczy coś innego, niż widzi odbiorca. Tak samo psuje się nazwa sklepu w tytule i miasto w podpisie karty. Pokazujemy, kiedy SELECTEDVALUE zwraca puste, jak to sprawdzić i jakie miary napisać zamiast niej. Wyniki pochodzą z zapytań na modelu Nordvelli.
Najgroźniejszy przypadek to parametr. Miara Rabat proc wartość z kursu ma postać SELECTEDVALUE('Rabat proc'[Rabat proc], 0). Gdy fragmentator parametru ma styl Rozwijanie, tak jak w kursie przy parametrze Zmiana ceny, odbiorca może z klawiszem Ctrl zaznaczyć kilka wartości, bo według dokumentacji Microsoft wybór pojedynczy jest domyślnie wyłączony. Przy rabacie 10 miara Sprzedaż po rabacie pokazuje 420 997 508,25 zł, przy 12 pokazuje 411 642 008,07 zł. Gdy zaznaczysz naraz 10 i 12, rabat spada do domyślnego 0, a sprzedaż po rabacie wynosi 467 775 009,17 zł, czyli tyle, ile sprzedaż bez żadnego rabatu. Żaden komunikat o tym nie informuje.
Drugi objaw to tytuł. Miara Tytuł szczegółów z lekcji o stronach Drąż wskroś odczytuje SELECTEDVALUE(DimSklepy[Nazwa]) i przy pustym wyniku pisze „Wszystkie sklepy”. Dla jednego sklepu daje „Nordvella Gdańsk (Gdańsk)”, ale położona na stronie z fragmentatorem miast przy zaznaczonych Krakowie i Gdańsku też pisze „Wszystkie sklepy”, choć karta obok pokazuje 78 334 427,94 zł zamiast 467 775 009,17 zł całej sieci. Tak samo jest przy samym Krakowie (50 479 566,75 zł), bo Kraków ma dwa sklepy. Trzeci objaw widać w tabeli z wierszami po mieście: miara z SELECTEDVALUE pokazuje nazwę miasta w każdym wierszu, a w wierszu Suma puste pole.
![Pasek formuły Power BI z miarą Rabat proc wartość = SELECTEDVALUE('Rabat proc'[Rabat proc], 0)](https://jsystems.pl/new_page_resources/images/POWER_BI_KURS/L10_K11_rabat_proc_wartosc.png?v=20261010c)
Zobacz też: Szkolenie Zaawansowany DAX w Power BI
Według dokumentacji Microsoft SELECTEDVALUE zwraca wartość tylko wtedy, gdy kontekst ogranicza kolumnę do jednej odrębnej wartości, a w każdym innym przypadku zwraca drugi argument, domyślnie pustą wartość. Dokumentacja podaje też odpowiednik: IF(HASONEVALUE(kolumna), VALUES(kolumna), wartość domyślna). Kontekst filtra, czyli zestaw warunków z fragmentatorów, wierszy tabeli i filtrów strony, przy dwóch zaznaczeniach zostawia w kolumnie dwie wartości, przy braku zaznaczeń wszystkie, a w wierszu Suma kolumna nie jest filtrowana wcale. Na Nordvelli bez filtra jest 11 miast i 15 sklepów.
Liczy się liczba odrębnych wartości kolumny, a nie liczba kliknięć. Zaznaczenie dwóch sklepów, Nordvella Warszawa Centrum i Nordvella Warszawa Mokotów, zostawia jedno miasto, więc SELECTEDVALUE(DimSklepy[Miasto]) zwraca „Warszawa”, choć sam filtr dotyczy kolumny Nazwa, a ISFILTERED(DimSklepy[Miasto]) zwraca FAŁSZ. Odwrotnie zaznaczenie Krakowa zostawia dwa sklepy, więc SELECTEDVALUE po nazwie sklepu jest puste. Dlatego Tytuł szczegółów działa na stronie szczegółów, na którą wchodzi się z jednym sklepem, co opisujemy w lekcji o stronach Drąż wskroś i zakładkach, a myli na stronie z fragmentatorem miast.
Liczba wybranych miast = COUNTROWS ( VALUES ( DimSklepy[Miasto] ) ) Wybrane miasta = CONCATENATEX ( VALUES ( DimSklepy[Miasto] ), DimSklepy[Miasto], ", ", DimSklepy[Miasto], ASC )
Opis rabatu =
SWITCH (
TRUE (),
HASONEVALUE ( 'Rabat proc'[Rabat proc] ), "Rabat " & VALUES ( 'Rabat proc'[Rabat proc] ) & "%",
ISFILTERED ( 'Rabat proc'[Rabat proc] ), "Zaznaczono kilka wartości rabatu, wybierz jedną",
"Rabat 0%, nic nie zaznaczono"
)Tytuł sklepów =
VAR Wybrane = VALUES ( DimSklepy[Nazwa] )
VAR Liczba = COUNTROWS ( Wybrane )
VAR Wszystkie = COUNTROWS ( ALL ( DimSklepy[Nazwa] ) )
RETURN
SWITCH (
TRUE (),
Liczba = Wszystkie, "Wszystkie sklepy",
Liczba = 1, SELECTEDVALUE ( DimSklepy[Nazwa] ),
Liczba <= 3, CONCATENATEX ( Wybrane, DimSklepy[Nazwa], ", ", DimSklepy[Nazwa], ASC ),
Liczba & " z " & Wszystkie & " sklepów"
)DimSklepy[Nazwa], a miara czyta DimSklepy[Miasto], wynik zależy od tego, czy zaznaczone sklepy są w jednym mieście: dwa sklepy z Warszawy dają „Warszawa”, sklep z Krakowa i sklep z Gdańska dają wartość domyślną. Tak samo w wierszu Suma tabeli: jeśli ma tam być tekst, podaj go jako drugi argument, na przykład „Wszystkie miasta”.Przejdź po trzech stanach fragmentatora: brak zaznaczeń, jedna wartość i dwie wartości, i porównaj karty z miarami opisu i tytułu z kartą sprzedaży. Na Nordvelli dla Krakowa karta sprzedaży pokazuje 50 479 566,75 zł, a tytuł dwa sklepy z Krakowa, dla Krakowa i Gdańska 78 334 427,94 zł i trzy sklepy. Gdy przy dwóch zaznaczeniach widzisz wartość domyślną bez komunikatu, miara nadal opiera się na samym SELECTEDVALUE.
Przy każdej mierze z SELECTEDVALUE zapisz w opisie miary, co ma zwrócić przy kilku zaznaczeniach. Puste pole zamiast liczby to osobny temat, który opisujemy w poście o pustej wartości zamiast zera. Gdy wybór ma przełączać miary albo osie, zamiast SELECTEDVALUE użyj parametru pól, o czym piszemy w poście o miarach we fragmentatorze i 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...