Blog JSystems - uwalniamy wiedzę!

Szukaj

Power BI - Komunikaty błędów DAX

Nie można określić pojedynczej wartości dla kolumny - błąd w mierze DAX

W skrócie

  • Komunikat „Nie można określić pojedynczej wartości dla kolumny” pojawia się, gdy miara DAX odwołuje się do kolumny bez funkcji agregującej, na przykład DIVIDE([Łączna sprzedaż], DimSklepy[Powierzchnia_m2]).
  • Miara nie ma bieżącego wiersza, więc kolumna oznacza dla niej wszystkie widoczne wartości naraz. Błąd wynika z zapisu formuły, a nie z danych: pojawia się nawet wtedy, gdy w wierszu tabeli widać jeden sklep.
  • Kolumnę liczbową owiń w SUM, MIN, MAX albo COUNT, tekst odczytaj przez SELECTEDVALUE, a obliczenie wiersz po wierszu zapisz iteratorem SUMX.

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.

Jak to wygląda w praktyce

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]:”).

Komunikat błędu w Power BI o kolumnie bez agregacji w formule miary DAX
Komunikat pod paskiem formuły dla miary, która wskazuje kolumnę WartoscNetto bez funkcji agregującej. Lekarstwem jest owinięcie kolumny w SUM, AVERAGE, MIN, MAX albo COUNT, zależnie od tego, o co pytasz.

Dlaczego tak się dzieje

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.

Co zrobić krok po kroku

  1. Przeczytaj nazwę kolumny i tabeli w komunikacie, a potem znajdź to odwołanie w formule. W przykładzie to DimSklepy[Powierzchnia_m2]. Ustal, jaką jedną liczbę ma dać ta kolumna dla kilku sklepów naraz: sumę, średnią, najmniejszą wartość czy liczbę wierszy.
  2. Dla kolumny liczbowej owiń odwołanie w funkcję agregującą. Kliknij miarę w panelu Dane, popraw formułę w pasku formuły i zatwierdź. Dla sprzedaży na metr właściwa jest suma powierzchni: Nordvella Warszawa Centrum ma 850 metrów kwadratowych i 34 740 655,15 zł sprzedaży, co daje 40 871,36 zł na metr, a Nordvella Białystok przy 380 metrach 32 261,12 zł.
    Sprzedaż na m2 = DIVIDE([Łączna sprzedaż], SUM(DimSklepy[Powierzchnia_m2]))
  3. Dla kolumny tekstowej nie zgaduj funkcją MAX. Na modelu Nordvelli 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ż]
    )
  4. Gdy wynik ma nie zależeć od wyboru w raporcie, zamiast SELECTEDVALUE użyj CALCULATE z warunkiem na kolumnie: 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.
  5. Gdy obliczenie ma iść wiersz po wierszu, na przykład ilość razy cena, użyj iteratora. SUMX tworzy kontekst wiersza dla tabeli z pierwszego argumentu, więc kolumny tej tabeli wolno w nim podać bez agregacji. Na modelu Nordvelli wynik to 467 775 009,17 zł, tyle samo co miara [Łączna sprzedaż]. Iteratory szerzej omawiamy w lekcji o SUMX, AVERAGEX i zmiennych VAR.
    Wartość z iloczynu = SUMX(FaktSprzedaz, FaktSprzedaz[Ilosc] * FaktSprzedaz[CenaNetto])
  6. Gdy liczba ma się pokazywać tylko dla pojedynczego sklepu, a w wierszu sumy ma zostać pusto, połącz HASONEVALUE z SELECTEDVALUE. HASONEVALUE zwraca prawdę, gdy w kontekście jest dokładnie jedna wartość kolumny. Ta wersja daje 40 871,36 zł dla Nordvella Warszawa Centrum i pustą komórkę w sumie.
    Sprzedaż na m2 jednego sklepu =
    IF(
        HASONEVALUE(DimSklepy[Nazwa]),
        DIVIDE([Łączna sprzedaż], SELECTEDVALUE(DimSklepy[Powierzchnia_m2]))
    )
  7. Gdy wartość ma być zapisana w każdym wierszu tabeli, na przykład po to, żeby trafiła do fragmentatora, zrób kolumnę obliczeniową: prawy przycisk na tabeli w panelu Dane, Nowa kolumna. Kolumnę tej samej tabeli podajesz w niej wprost, a kolumnę z tabeli wymiaru przez RELATED.

Jak sprawdzić, że problem zniknął

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ść.

Źródła i sposób sprawdzenia

  • Microsoft Learn: SELECTEDVALUE function (DAX) (źródło)
  • Microsoft Learn: HASONEVALUE function (DAX) (źródło)
  • Microsoft Learn: DAX overview (kontekst wiersza i kontekst filtra) (źródło)
  • Sprawdzone zapytaniami DAX na modelu Nordvelli: błąd w mierze z kolumną bez agregacji, w kolumnie obliczeniowej i w iteratorze po innej tabeli oraz poprawki z SUM, SELECTEDVALUE, HASONEVALUE i SUMX.

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

Co oznacza błąd nie można określić pojedynczej wartości dla kolumny?
Miara DAX odwołuje się do kolumny bez funkcji agregującej, a miara nie ma bieżącego wiersza, z którego mogłaby odczytać jedną wartość. Silnik nie wie, czy chodzi o sumę, maksimum czy liczbę wierszy, więc odrzuca formułę. Rozwiązaniem jest SUM, MIN, MAX, COUNT, SELECTEDVALUE albo iterator taki jak SUMX.
Dlaczego formuła działa w kolumnie obliczeniowej, a w mierze nie?
Kolumna obliczeniowa ma kontekst wiersza, więc odwołanie do kolumny tej samej tabeli oznacza wartość z bieżącego wiersza. Miara liczy się w kontekście filtra wizualizacji i widzi wiele wierszy naraz. Dlatego w mierze kolumnę trzeba zagregować albo umieścić w iteratorze.
Jak pobrać wartość tekstową kolumny w mierze DAX?
Użyj SELECTEDVALUE, które zwraca wartość, gdy w kontekście jest dokładnie jedna, a w przeciwnym razie wartość zastępczą z drugiego argumentu. MAX na tekście zwraca wartość największą alfabetycznie i ukrywa sytuację, w której widocznych jest kilka wartości. Na modelu Nordvelli MAX dał w regionie Centrum typ Standard, choć jest tam też sklep typu Flagship.
Czy ten błąd zależy od tego, co jest zaznaczone w raporcie?
Nie, ten błąd wynika z zapisu formuły. Miara z kolumną DimSklepy[Typ] bez agregacji zgłosiła go nawet w tabeli z jednym sklepem w każdym wierszu, gdzie widoczny był tylko jeden typ. Inaczej działa funkcja VALUES, która zgłasza błąd dopiero w kontekście z kilkoma wartościami.

Komentarze (0)

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

Brak komentarzy...