Blog JSystems - uwalniamy wiedzę!
Blog JSystems - uwalniamy wiedzę!
Power BI - Komunikaty błędów DAX
DAX oczekuje tabeli, a dostaje wartość - błąd w FILTER, SUMX i CALCULATETABLE
Komunikat, że DAX oczekuje wyrażenia tabeli, dostaje autor miary, który do iteratora albo do FILTER przekazał miarę, liczbę lub kolumnę zamiast tabeli. Pokazujemy, jak przeczytać numer argumentu w komunikacie, czym ten błąd różni się od błędu kolumny bez agregacji i jak przepisać formułę, żeby funkcja dostała tabelę, której potrzebuje.
Power BI pokazuje komunikat z nazwą funkcji i numerem argumentu. Na modelu Nordvelli miara SUMX([Łączna sprzedaż], 1) zgłosiła: „Funkcja SUMX oczekuje wyrażenia tabeli dla argumentu 1, ale zostało użyte wyrażenie ciągu lub liczbowe.” (w angielskiej wersji: „The SUMX function expects a table expression for argument '1', but a string or numeric expression was used.”). Ten sam wzór dostały COUNTROWS([Łączna sprzedaż]), FILTER(15, TRUE()) i CALCULATETABLE(SUM(FaktSprzedaz[WartoscNetto]), DimSklepy[Typ] = "E-commerce"), każdy z nazwą swojej funkcji.
Gdy w miejscu tabeli jest zmienna z liczbą, numer argumentu znika: VAR s = SUM(FaktSprzedaz[WartoscNetto]) RETURN COUNTROWS(s) daje „Funkcja COUNTROWS oczekuje wyrażenia tabeli dla argumentu , ale zostało użyte wyrażenie ciągu lub liczbowe.” W zapytaniu DAX, na przykład w widoku zapytań w języku DAX, ten sam problem ma inną postać: EVALUATE [Łączna sprzedaż] kończy się komunikatem „Wyrażenie określone w zapytaniu nie jest prawidłowym wyrażeniem tabeli.” (w angielskiej wersji: „The expression specified in the query is not a valid table expression.”).
DAX rozróżnia wyrażenia zwracające tabelę i wyrażenia zwracające jedną wartość, czyli wartość skalarną. Pierwszy argument SUMX, FILTER i COUNTROWS ma być tabelą: według dokumentacji Microsoft może to być tabela modelu albo wyrażenie, które zwraca tabelę. Miara zawsze zwraca jedną wartość, więc nie da się po niej iterować. CALCULATETABLE liczy w zmienionym kontekście wyrażenie tabelowe, a do wyrażenia z jedną wartością służy CALCULATE.
Zobacz też: Szkolenie Zaawansowany DAX w Power BI
Kolumna wpisana wprost w miejsce tabeli daje inny komunikat. COUNTROWS(DimSklepy[Miasto]), FILTER(DimSklepy[Miasto], [Łączna sprzedaż] > 30000000) i SUMX(FaktSprzedaz[WartoscNetto], FaktSprzedaz[WartoscNetto] * 1.23) zgłosiły na modelu Nordvelli komunikat zaczynający się od słów „Nie można określić pojedynczej wartości dla kolumny „Miasto” w tabeli „DimSklepy”.” (przy SUMX z kolumną „WartoscNetto” w tabeli „FaktSprzedaz”), czyli błąd kolumny bez agregacji, który opisujemy w poście nie można określić pojedynczej wartości dla kolumny. Silnik traktuje goły zapis kolumny jako odwołanie do wartości z bieżącego wiersza, a nie jako listę wartości. Listę daje dopiero funkcja tabelowa, na przykład VALUES.
SUMX([Łączna sprzedaż], 1) problemem jest miara na pierwszym miejscu. Pusty numer argumentu dostaliśmy wtedy, gdy do funkcji tabelowej trafiła zmienna VAR z liczbą, więc szukaj takiej zmiennej.[Łączna sprzedaż]. Ten sam wzorzec służy do średniej albo maksimum z miast.Sprzedaż po miastach = SUMX(VALUES(DimSklepy[Miasto]), [Łączna sprzedaż])
Sprzedaż miast powyżej 30 mln =
CALCULATE(
[Łączna sprzedaż],
FILTER(VALUES(DimSklepy[Miasto]), [Łączna sprzedaż] > 30000000)
)COUNTROWS(VALUES(DimSklepy[Miasto])) daje 3, a COUNTROWS(ALL(DimSklepy[Miasto])) daje 11.Liczba transakcji online = CALCULATE(COUNTROWS(FaktSprzedaz), DimSklepy[Typ] = "E-commerce") Miasta flagowe = CALCULATETABLE(VALUES(DimSklepy[Miasto]), DimSklepy[Typ] = "Flagship")
Sprzedaż telefoniczna =
SUMX(
FILTER(FaktSprzedaz, FaktSprzedaz[KanalSprzedazy] = "Telefon"),
FaktSprzedaz[WartoscNetto]
)EVALUATE { [Łączna sprzedaż] } zwraca jedną kolumnę z wartością 467 775 009,17 zł.Po poprawce komunikat znika, a miara zwraca liczbę. Sprawdź ją na znanej wartości: dla miary sumującej, takiej jak sprzedaż, suma po miastach przez SUMX i VALUES musi być równa mierze [Łączna sprzedaż], na modelu Nordvelli 467 775 009,17 zł. Gdy obie liczby się różnią, sprawdź, po jakiej liście wartości przechodzi iterator.
Przy każdej funkcji DAX sprawdzaj w dokumentacji, czy argument ma być tabelą, czy wartością. Odwrotną sytuację, czyli tabelę wielu wartości podaną tam, gdzie potrzebna jest jedna, opisujemy w poście tabela wielu wartości tam, gdzie potrzebna jedna.
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...