Blog JSystems - uwalniamy wiedzę!

Szukaj

Power BI - Komunikaty błędów DAX

DAX nie obsługuje porównywania wartości typu Text z wartościami typu Integer - błąd typów w Power BI

W skrócie

  • Błąd DAX przy porównaniu tekstu z liczbą brzmi „Operacje porównania języka DAX nie obsługują porównywania wartości typu Text z wartościami typu Integer” i pojawia się, gdy warunek zestawia kolumnę tekstową z liczbą, liczbę z TRUE() albo datę z tekstem.
  • Operatory porównania w DAX nie zamieniają typów same. Dodawanie i mnożenie zamieniają tekst na liczbę, porównanie zestawia tylko liczbę z liczbą, tekst z tekstem i wartość logiczną z logiczną.
  • Najtrwalsza poprawka to właściwy typ kolumny w Power Query. Gdy typu nie zmienisz, użyj VALUE albo porównaj z tekstem w cudzysłowie, pamiętając, że tekst porządkuje się inaczej niż liczby.

Wystarczy, że identyfikator przyszedł ze źródła jako tekst, a warunek w CALCULATE, FILTER, IF lub SWITCH porównuje go z liczbą: DAX przerywa wtedy obliczenie komunikatem, że nie obsługuje porównywania wartości typu Text z wartościami typu Integer. Podobny błąd porównania daje flaga 0 i 1 zestawiona z TRUE(). Pokazujemy dokładny komunikat, jego odmiany i poprawki sprawdzone na modelu Nordvelli.

Jak to wygląda w praktyce

Zapytanie albo miara kończy się komunikatem silnika: „Operacje porównania języka DAX nie obsługują porównywania wartości typu Text z wartościami typu Integer. Rozważ użycie funkcji VALUE lub FORMAT w celu przekonwertowania jednej z tych wartości.” (w angielskiej wersji: „DAX comparison operations do not support comparing values of type Text with values of type Integer. Consider using the VALUE or FORMAT function to convert one of the values.”). W komunikatach, które zwrócił nam silnik z polskimi ustawieniami, nazwy typów zostały po angielsku: Text, Integer, Date, True/False.

Na modelu Nordvelli dodaliśmy kolumnę SklepID tekst, czyli numer sklepu zapisany jako tekst. Warunek DimSklepy[SklepID tekst] = 1 w CALCULATE dał dokładnie ten komunikat. W mierze ten sam tekst dostaje przedrostek z nazwą miary: „Błąd obliczania w mierze „FaktSprzedaz”[Test typu]:”, a dalej idzie komunikat o porównaniu bez zmian.

Odmiany, które dostaliśmy na tym samym modelu: przy FaktSprzedaz[CzyZwrot] = TRUE() komunikat mówi o typach Integer i True/False, przy DimKalendarz[Data] >= "2026-01-01" o typach Date i Text. SWITCH zgłasza „Funkcja „SWITCH” nie obsługuje porównywania wartości typu Text z wartościami typu Integer.”, a operator IN pokazuje się w komunikacie jako funkcja „CONTAINSROW”.

Dlaczego tak się dzieje

Według dokumentacji Microsoft operatory porównania w DAX obsługują trzy pary typów: liczbę z liczbą, wartość logiczną z logiczną i tekst z tekstem. Liczbą dla porównania są Integer, liczba dziesiętna, waluta, data i godzina oraz wartość pusta. Każda inna para kończy się błędem. Operatory arytmetyczne działają inaczej: na modelu Nordvelli "1" + 0 dało 1, a "5" * 2 dało 10, bo przy dodawaniu i mnożeniu DAX sam zamienia tekst na liczbę. Stąd zaskoczenie: formuła z mnożeniem działa, a ta sama kolumna w warunku już nie.

Tekst trafia do modelu najczęściej ze źródła. W kursie przepływ danych oddaje identyfikatory Nordvelli jako tekst, więc po podłączeniu w Power BI Desktop SklepID ma typ Tekst, co pokazujemy w lekcji o przepływach danych. Drugie źródło to sama formuła: FORMAT zawsze zwraca tekst. Trzecie to flagi, które w modelu są liczbami 0 i 1, a autor albo Copilot porównuje je z TRUE(). Kolumna CzyZwrot w Nordvelli ma typ Liczba całkowita, więc warunek z TRUE() nie przechodzi.

Co zrobić krok po kroku

  1. Przeczytaj w komunikacie kolejność typów. Pierwszy typ to lewa strona porównania, drugi prawa. „Text z wartościami typu Integer” znaczy, że kolumna jest tekstem, a po prawej jest liczba. Przy operatorze IN kolejność jest odwrotna: warunek DimSklepy[SklepID tekst] IN {1, 2} dał komunikat o typach Integer i Text. Zaznacz kolumnę w panelu Dane i na karcie Narzędzia kolumn sprawdź pole Typ danych. Dla SklepID tekst jest tam Tekst.
  2. Gdy kolumna powinna być liczbą, zmień typ u źródła, w Power Query: Przekształć dane, zaznacz kolumnę i na liście Typ danych wybierz Liczba całkowita. Po załadowaniu warunek = 1 działa bez zmian w formułach. Gdy Power Query sam ustawił zły typ, przeczytaj dlaczego Power Query wykrywa typ na podstawie pierwszych 200 wierszy.
  3. Gdy typu nie możesz zmienić, porównuj tekst z tekstem. Na Nordvelli obie wersje poniżej dały 34 740 655,15 zł, czyli sprzedaż sklepu Nordvella Warszawa Centrum, tyle samo co warunek na liczbowej kolumnie SklepID. Ta droga nadaje się tylko do równości.
    Sprzedaż sklepu 1 =
    CALCULATE([Łączna sprzedaż], DimSklepy[SklepID tekst] = "1")
    
    Sprzedaż sklepu 1 (FORMAT) =
    CALCULATE([Łączna sprzedaż], FORMAT(DimSklepy[SklepID], "0") = "1")
  4. Do zakresów użyj VALUE, bo tekst porządkuje się znak po znaku. Warunek DimSklepy[SklepID tekst] > "10" zwrócił 13 sklepów (numery 2-9 i 11-15), a wersja z VALUE poprawne 5. Z tego samego powodu MAX na tej kolumnie dał 9, a nie 15.
    Sklepy powyżej 10 =
    COUNTROWS(
        FILTER(DimSklepy, VALUE(DimSklepy[SklepID tekst]) > 10)
    )
  5. Gdy w kolumnie trafiają się wartości, które nie są liczbą, sama VALUE też zgłosi błąd: „Nie można przekonwertować wartości „brak” typu Text na typ Number.” (w angielskiej wersji: „Cannot convert value 'brak' of type Text to type Number.”). Owiń ją w IFERROR. W teście z kodami 12, 7 i „brak” dostaliśmy 12, 7 i pustą wartość.
    Kod liczbowy = IFERROR(VALUE([Kod]), BLANK())
  6. Flagę 0 i 1 porównuj z liczbą, nie z TRUE(). Na modelu Nordvelli warunek z jedynką dał 11 571 020,19 zł sprzedaży zakończonej zwrotem, a z zerem 456 203 988,98 zł.
    Sprzedaż zwrócona = CALCULATE([Łączna sprzedaż], FaktSprzedaz[CzyZwrot] = 1)
  7. Dla dat porównuj datę z datą. DimKalendarz[Data] >= DATE(2026, 1, 1) zwróciło 365 dni kalendarza, a ten sam warunek z tekstem „2026-01-01” skończył się błędem typów Date i Text. Gdy daty przyszły jako tekst, zacznij od posta o konwersji tekstu na datę w DAX.
Edytor Power Query w Power BI Desktop: kolumna SklepID z przepływu i lista Typ danych z pozycją Liczba całkowita
SklepID przychodzi z przepływu danych jako tekst. Na liście Typ danych w Edytorze Power Query wybierasz Liczba całkowita.

Jak sprawdzić, że problem zniknął

Po poprawce porównaj wynik z wersją na kolumnie o właściwym typie. W widoku zapytań w języku DAX uruchom EVALUATE ROW("Sklep 1", CALCULATE([Łączna sprzedaż], DimSklepy[SklepID] = 1)): na Nordvelli to 34 740 655,15 zł, tyle samo co poprawione miary z kroku 3. Dla zakresów policz wiersze, na przykład 5 sklepów o numerze powyżej 10.

Żeby błąd nie wracał, ustaw typy w Power Query zaraz po wczytaniu źródła, identyfikatory i flagi trzymaj jako liczby, a wynik FORMAT traktuj jako tekst do wyświetlania, nie do warunków. Gdy taki błąd siedzi w mierze, wizualizacja, która ją liczy, nie dostaje danych. Jak to rozpoznać na stronie raportu, opisujemy w poście o komunikacie Nie można wyświetlić elementu wizualnego.

Źródła i sposób sprawdzenia

  • Microsoft Learn: DAX operators (sekcja o porównaniach i konwersji typów) (źródło)
  • Microsoft Learn: VALUE function (DAX) (źródło)
  • Microsoft Learn: Data types in Power BI Desktop (źródło)
  • Sprawdzone zapytaniami DAX na modelu Nordvelli: porównania tekst z liczbą, liczba z TRUE(), data z tekstem, SWITCH i IN oraz poprawki z VALUE, FORMAT i tekstem w cudzysłowie.

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 znaczy błąd operacje porównania języka DAX nie obsługują porównywania wartości typu Text z wartościami typu Integer?
Warunek w formule zestawia tekst z liczbą całkowitą, na przykład kolumnę tekstową z liczbą 1. Operatory porównania w DAX nie zamieniają typów same, więc silnik przerywa obliczenie. Przy operatorach porównania pierwszy typ w komunikacie to lewa strona, drugi prawa.
Jak porównać kolumnę tekstową z liczbą w DAX?
Najlepiej zmienić typ kolumny w Power Query na Liczba całkowita. Gdy to niemożliwe, przy równości porównaj z tekstem w cudzysłowie, a przy zakresach użyj VALUE, bo tekst porządkuje się znak po znaku. Na modelu Nordvelli warunek tekstowy większy niż 10 zwrócił 13 sklepów zamiast 5.
Dlaczego dodawanie tekstu i liczby działa w DAX, a porównanie nie?
Przy dodawaniu i mnożeniu DAX sam zamienia tekst na liczbę, więc wyrażenie z tekstem 1 plus 0 daje 1. Porównanie obsługuje tylko pary tego samego rodzaju typów: liczbę z liczbą, tekst z tekstem i wartość logiczną z logiczną. Każda inna para kończy się błędem typów.
Dlaczego CzyZwrot = TRUE() daje błąd w Power BI?
Kolumna z flagą 0 i 1 ma typ Liczba całkowita, a TRUE() jest wartością logiczną, więc komunikat mówi o typach Integer i True/False. Porównaj flagę z liczbą 1. Na modelu Nordvelli taki warunek dał 11 571 020,19 zł sprzedaży zakończonej zwrotem.

Komentarze (0)

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

Brak komentarzy...