Blog JSystems - uwalniamy wiedzę!
Blog JSystems - uwalniamy wiedzę!
Power BI - Komunikaty błędów DAX
Nie można określić pojedynczej wartości dla kolumny - błąd w mierze DAX
Komunikat Nie można określić pojedynczej wartości dla kolumny pojawia się w Power BI, gdy formuła miary DAX wygląda rozsądnie, a silnik ją odrzuca. Pokazujemy, co dokładnie oznacza ten komunikat, dlaczego ta sama składnia działa w kolumnie obliczeniowej, a w mierze nie, i jak poprawić miarę w zależności od tego, czy kolumna zawiera liczby, czy tekst.
Power BI Desktop pokazuje komunikat pod paskiem formuły, a w panelu Dane przy nazwie miary pojawia się ikona ostrzeżenia. Na modelu Nordvelli zarząd chce znać sprzedaż na metr kwadratowy sklepu, więc powstaje miara:
Sprzedaż na m2 = DIVIDE([Łączna sprzedaż], DimSklepy[Powierzchnia_m2])
Silnik odpowiada dosłownie: „Nie można określić pojedynczej wartości dla kolumny „Powierzchnia_m2” w tabeli „DimSklepy”. Może się tak zdarzyć, gdy formuła miary lub funkcji odwołuje się do kolumny zawierającej wiele wartości bez określania agregacji, takiej jak min, max, count lub sum, w celu uzyskania pojedynczego wyniku.” (w angielskiej wersji: „A single value for column 'Powierzchnia_m2' in table 'DimSklepy' cannot be determined. This can happen when a measure or function formula refers to a column that contains many values without specifying an aggregation such as min, max, count, or sum to get a single result.”).
Ten sam tekst dostaje miara z lekcji o podstawach DAX, która wskazuje samo FaktSprzedaz[WartoscNetto] bez żadnej funkcji, i to niezależnie od tabeli głównej miary: zapisana w DimKalendarz zgłasza go tak samo jak w FaktSprzedaz. W zapytaniu DAX silnik poprzedza komunikat nazwą miary, na przykład „Błąd obliczania w mierze „FaktSprzedaz”[Sprzedaż na m2]:” (w angielskiej wersji: „Calculation error in measure 'FaktSprzedaz'[Sprzedaż na m2]:”).

Zobacz też: Szkolenie Zaawansowany DAX w Power BI
Miara nie ma kontekstu wiersza, czyli bieżącego wiersza tabeli, z którego mogłaby odczytać jedną wartość. Liczy się w kontekście filtra, czyli w zestawie warunków nałożonych przez wizualizację, fragmentatory i relacje. Odwołanie DimSklepy[Powierzchnia_m2] oznacza dla niej wszystkie widoczne powierzchnie naraz, a silnik nie zgaduje, czy chodzi o sumę, maksimum czy jedną z nich. W karcie z całą siecią kolumna WartoscNetto ma 108 675 wartości, tyle, ile transakcji.
Błąd wynika z zapisu formuły, a nie z danych. Miara IF(DimSklepy[Typ] = "E-commerce", [Łączna sprzedaż]) policzona w tabeli z wierszem na każdy sklep, gdzie w każdym wierszu widać dokładnie jeden typ, i tak zgłosiła komunikat o kolumnie Typ. Inaczej zachowuje się funkcja VALUES, która zgłasza błąd dopiero w kontekście z kilkoma wartościami, o czym piszemy w poście tabela wielu wartości tam, gdzie potrzebna jedna.
W kolumnie obliczeniowej ta sama składnia działa, bo kolumna ma kontekst wiersza: FaktSprzedaz[WartoscNetto] * 1.23 dała w pierwszym wierszu 7 624,13 zł z 6 198,48 zł netto. Kontekst wiersza obejmuje jednak tylko tabelę, w której jest kolumna albo po której przechodzi iterator. Dlatego SUMX(DimSklepy, FaktSprzedaz[WartoscNetto]) i kolumna DimSklepy[Miasto] wpisana wprost w kolumnie obliczeniowej tabeli FaktSprzedaz dają ten sam komunikat. Drugi przypadek rozwiązuje funkcja RELATED, opisana w poście RELATED nie działa w Power BI.
DimSklepy[Powierzchnia_m2]. Ustal, jaką jedną liczbę ma dać ta kolumna dla kilku sklepów naraz: sumę, średnią, najmniejszą wartość czy liczbę wierszy.Sprzedaż na m2 = DIVIDE([Łączna sprzedaż], SUM(DimSklepy[Powierzchnia_m2]))
MAX(DimSklepy[Typ]) w regionie Centrum zwraca „Standard”, choć jest tam też sklep typu Flagship, bo MAX na tekście bierze wartość największą w porządku alfabetycznym. SELECTEDVALUE zwraca wartość tylko wtedy, gdy w kontekście jest dokładnie jedna, a w przeciwnym razie wartość zastępczą, u nas „kilka typów”. Miara poniżej pokazuje 141 772 848,59 zł dla typu E-commerce i pustą wartość dla pozostałych typów oraz w sumie.Sprzedaż sklepu internetowego =
IF(
SELECTEDVALUE(DimSklepy[Typ]) = "E-commerce",
[Łączna sprzedaż]
)CALCULATE([Łączna sprzedaż], DimSklepy[Typ] = "E-commerce") daje 141 772 848,59 zł także w wierszu sumy. Warunek na kolumnie wewnątrz CALCULATE nie wymaga agregacji, bo działa jako filtr, a nie jako odczyt wartości.[Łączna sprzedaż]. Iteratory szerzej omawiamy w lekcji o SUMX, AVERAGEX i zmiennych VAR.Wartość z iloczynu = SUMX(FaktSprzedaz, FaktSprzedaz[Ilosc] * FaktSprzedaz[CenaNetto])
Sprzedaż na m2 jednego sklepu =
IF(
HASONEVALUE(DimSklepy[Nazwa]),
DIVIDE([Łączna sprzedaż], SELECTEDVALUE(DimSklepy[Powierzchnia_m2]))
)Po poprawce komunikat pod paskiem formuły znika, a wizualizacja pokazuje liczby. Sprawdź wynik na dwóch poziomach: w wierszu jednego sklepu i w sumie. Na modelu Nordvelli Sprzedaż na m2 z SUM daje w sumie 53 891,13 zł na metr, bo dzieli sprzedaż całej sieci, 467 775 009,17 zł, przez 8680 metrów kwadratowych. Nordvella Online ma powierzchnię 0 i 141 772 848,59 zł sprzedaży, więc podnosi wynik sieci. Zdecyduj, czy sklep internetowy ma być w tej mierze, zanim pokażesz ją zarządowi.
Żeby błąd nie wracał, każdą kolumnę w mierze zapisuj z funkcją agregującą albo wewnątrz iteratora, a pojedynczy tekst odczytuj przez SELECTEDVALUE. Pamiętaj, że SELECTEDVALUE przy kilku zaznaczeniach we fragmentatorze zwraca wartość zastępczą albo pustą, o czym piszemy w poście SELECTEDVALUE zwraca pustą wartość.
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...