Blog JSystems - uwalniamy wiedzę!

Szukaj

Power BI - Potoki wdrażania, Fabric, Copilot i telefon

Miara DAX od Copilota w Power BI - jak sprawdzić ją przed użyciem

W skrócie

  • Miara DAX od Copilota w Power BI wygląda poprawnie, ale może odwoływać się do kolumny, której nie ma, porównywać złe typy albo liczyć coś innego, niż chcesz. Część błędów pokaże pasek formuły, część zdradzą dopiero liczby.
  • Copilot buduje formułę z nazw i struktury modelu, a nie z wartości w tabelach. Nie wie, że zwroty są w Nordvelli kwotami ujemnymi, że flaga CzyZwrot ma wartości 0 i 1 ani że dana nazwa w tabeli to miara, a nie kolumna.
  • Wklejasz propozycję jako nową miarę, poprawiasz miejsca wskazane przez pasek formuły, sprawdzasz znaki i typy, a na koniec uruchamiasz zapytanie DAX, które zwraca miarę razem ze składnikami w całości i w podziale na lata.

Copilot w Power BI podał w kursie miarę DAX sprzedaży netto pomniejszonej o zwroty, a pasek formuły po jej wklejeniu zgłosił, że nie może odnaleźć wskazanej kolumny w tabeli FaktZwroty. Propozycja z wyjaśnieniem każdego kroku wygląda wiarygodnie, ale o tym, czy miara liczy dobrze, decyduje model, a nie opis. Na tej mierze w modelu Nordvelli pokazujemy, co trzeba było dopasować i jakimi zapytaniami DAX potwierdziliśmy liczby. Kontrola zostaje po stronie autora raportu.

Jak to wygląda w praktyce

W kursie poprosiliśmy Copilota o miarę sprzedaży netto pomniejszonej o zwroty. Propozycja miała dwie zmienne, SprzedazNetto i ZwrotyNetto, a druga sumowała FaktZwroty[Wartosc zwrotow wg daty zakupu]. Po wklejeniu jej jako nowej miary pasek formuły pokazał komunikat „Nie można odnaleźć kolumny „Wartosc zwrotow wg daty zakupu” w tabeli „FaktZwroty” lub nie można jej użyć w tym wyrażeniu.” (w angielskiej wersji: „Column 'Wartosc zwrotow wg daty zakupu' in table 'FaktZwroty' cannot be found or may not be used in this expression.”). Ten sam komunikat zwróciło nasze zapytanie kontrolne na modelu z projektu końcowego kursu.

Wariant dla modeli z flagą zwrotu w tabeli sprzedaży filtrował FaktSprzedaz[CzyZwrot] = TRUE (). W zapytaniu kontrolnym silnik zgłosił błąd przy obliczaniu miary: „Operacje porównania języka DAX nie obsługują porównywania wartości typu Integer z wartościami typu True/False. 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 Integer with values of type True/False. Consider using the VALUE or FORMAT function to convert one of the values.”). Trzeci przypadek nie daje żadnego komunikatu: miara bez ABS zwróciła 481 797 104,61 zł, więcej niż cała sprzedaż 467 775 009,17 zł, choć zwroty miały ją zmniejszyć.

Pasek formuły Power BI Desktop z miarą od Copilota i komunikatem o kolumnie, której nie znaleziono w tabeli FaktZwroty
Komunikat paska formuły po wklejeniu propozycji Copilota. Ramka: treść komunikatu.

Dlaczego tak się dzieje

Copilot pisze formułę na podstawie polecenia oraz nazw tabel, kolumn i miar. Według dokumentacji Microsoft do usługi trafiają między innymi polecenie i struktura danych, czyli schemat, a zawartość tabel tylko wtedy, gdy o to poprosisz. Copilot nie widzi więc, że w Nordvelli wszystkie 2714 kwot w kolumnie FaktZwroty[WartoscZwrotu] są ujemne, od -61 811,56 zł do -225,32 zł, razem -14 022 095,44 zł, a odjęcie ujemnej sumy podnosi wynik zamiast go obniżać. Nie wie też, że FaktSprzedaz[CzyZwrot] ma typ liczby całkowitej z wartościami 0 i 1 ani że Wartosc zwrotow wg daty zakupu to miara z lekcji o modelu danych i relacjach, a nie kolumna. Funkcja SUM przyjmuje tylko kolumnę, stąd komunikat o kolumnie, której nie ma. Ten typ błędu opisujemy w poście o kolumnie, której nie można odnaleźć.

Ta miara liczy zwroty według daty zakupu: CALCULATE z USERELATIONSHIP włącza nieaktywną relację FaktZwroty[DataZakupu] z DimKalendarz[DataID]. To też decyzja, którą Copilot podejmuje za Ciebie. W całości obie daty dają te same -14 022 095,44 zł zwrotów, ale w latach już nie: sprzedaż po zwrotach w 2026 to 48 973 405,47 zł według daty zakupu i 48 575 310,24 zł według daty zwrotu. Wariant z flagą odpowiada na inne pytanie: odejmuje wartość sprzedaży oznaczonych wierszy, 11 571 020,19 zł w 2714 wierszach, a nie wartość zwrotów. Daje więc 456 203 988,98 zł zamiast 453 752 913,73 zł. Obie formuły wyglądają rozsądnie, a różnią się o 2 451 075,25 zł.

Co zrobić krok po kroku

  1. Wklej propozycję jako nową miarę, nie zastępuj istniejącej. Kliknij tabelę FaktSprzedaz w panelu Dane, wybierz Nowa miara, wklej formułę i przeczytaj komunikat pod paskiem formuły. Każde wskazane miejsce zapisz, zanim zaczniesz poprawiać.
  2. Sprawdź, czy nazwy z formuły to kolumny, czy miary. Zapytanie poniżej, uruchomione w widoku zapytań w języku DAX, zwraca wyrażenia miar o podanych nazwach. U nas dla miary zwrotów zwróciło CALCULATE z USERELATIONSHIP, więc zamiast funkcji SUM z nazwą miary wpisujesz samo odwołanie do miary w nawiasach kwadratowych.
    EVALUATE
    SELECTCOLUMNS (
        FILTER (
            INFO.VIEW.MEASURES (),
            [Name] IN { "Wartosc zwrotow wg daty zakupu", "Sprzedaż netto po zwrotach", "Wartość zwrotów" }
        ),
        "M", [Name],
        "E", [Expression]
    )
  3. Sprawdź znak i zakres kwot, zanim cokolwiek odejmiesz. Zapytanie zwróciło u nas 2714 wierszy, sumę -14 022 095,44 zł, najmniejszą kwotę -61 811,56 zł i największą -225,32 zł. Wszystkie zwroty są ujemne, więc odejmujesz je z ABS.
    EVALUATE
    ROW (
        "wiersze_FaktZwroty", COUNTROWS ( FaktZwroty ),
        "suma_WartoscZwrotu", SUM ( FaktZwroty[WartoscZwrotu] ),
        "min", MIN ( FaktZwroty[WartoscZwrotu] ),
        "max", MAX ( FaktZwroty[WartoscZwrotu] )
    )
  4. Sprawdź typ i wartości flagi. Kolumna CzyZwrot ma u nas typ liczby całkowitej i dwie wartości: 0 w 105 961 wierszach i 1 w 2714 wierszach. Warunek = TRUE () zamień na = 1. Sama zmiana typu nie wystarczy, bo ten wariant odejmuje wartość sprzedaży zwróconych pozycji, a nie wartość zwrotów. Wybierz definicję, której potrzebuje odbiorca raportu. Błąd porównania typów opisujemy w poście o porównaniu wartości różnych typów w DAX.
    EVALUATE
    SUMMARIZECOLUMNS (
        FaktSprzedaz[CzyZwrot],
        "Wiersze", COUNTROWS ( FaktSprzedaz ),
        "Wartosc", SUM ( FaktSprzedaz[WartoscNetto] )
    )
  5. Złóż miarę po poprawkach. W kursie wygląda tak jak niżej i ma format #,0.00 zł. Taką samą formułę ma miara Sprzedaż netto po zwrotach w modelu z projektu końcowego kursu, tylko jej format jest tam bez groszy.
    Sprzedaż netto po zwrotach =
    VAR SprzedazNetto =
        SUM ( FaktSprzedaz[WartoscNetto] )
    VAR ZwrotyNetto =
        ABS ( [Wartosc zwrotow wg daty zakupu] )
    RETURN
        SprzedazNetto - ZwrotyNetto
  6. Potwierdź liczby zapytaniem, które zwraca miarę razem z jej składnikami. U nas: 467 775 009,17 zł sprzedaży, -14 022 095,44 zł zwrotów i 453 752 913,73 zł po zwrotach, czyli dokładnie różnica składników.
    EVALUATE
    ROW (
        "Łączna sprzedaż", [Łączna sprzedaż],
        "Zwroty wg daty zakupu", [Wartosc zwrotow wg daty zakupu],
        "Sprzedaż netto po zwrotach", [Sprzedaż netto po zwrotach]
    )
  7. Sprawdź miarę w kontekście, nie tylko w sumie. Kontekst filtra, czyli zestaw warunków nałożonych przez wiersz tabeli albo fragmentator, zmienia wynik każdej miary. Zapytanie z podziałem na lata i wierszem sumy pokazało u nas pięć lat, od 80 854 445,80 zł w 2022 do 48 973 405,47 zł w niepełnym 2026, i sumę 453 752 913,73 zł, równą wynikowi z poprzedniego kroku.
    EVALUATE
    SUMMARIZECOLUMNS (
        ROLLUPADDISSUBTOTAL ( DimKalendarz[Rok], "Razem" ),
        "Sprzedaz", [Łączna sprzedaż],
        "ZwrotyZakup", [Wartosc zwrotow wg daty zakupu],
        "Netto", [Sprzedaż netto po zwrotach]
    )

Jak sprawdzić, że problem zniknął

Miara jest gotowa do użycia, gdy pasek formuły nie pokazuje komunikatu, wynik w całości równa się różnicy składników, suma lat równa się wynikowi bez podziału, a wartość dla wybranego wiersza zgadza się z obliczeniem ręcznym. U nas dla Warszawy 222 818 294,93 zł sprzedaży minus 6 724 354,04 zł zwrotów daje 216 093 940,89 zł. Pomaga też drugie, niezależne obliczenie: w modelu Nordvelli miara Wartość zwrotów liczy ABS ( SUM ( FaktZwroty[WartoscZwrotu] ) ) wprost z kolumny, co przy sumie kolumny -14 022 095,44 zł daje te same 14 022 095,44 zł.

Żeby kolejne propozycje wymagały mniej poprawek, nadawaj kolumnom i miarom nazwy, z których widać, co zawierają, i opisuj w modelu umowy, takie jak ujemny znak zwrotów. Zapytanie kontrolne zostaw w pliku w widoku zapytań w języku DAX, tak jak w kursie, i uruchamiaj je po każdej zmianie miary. Gdy Copilot w ogóle nie odpowiada, przyczyny opisujemy w poście o niedostępnym Copilocie w Power BI.

Źródła i sposób sprawdzenia

  • Microsoft Learn: Overview of Copilot in Fabric (jakie dane trafiają do usługi) (źródło)
  • DAX Guide: USERELATIONSHIP (źródło)
  • Sprawdzone zapytaniami DAX na modelu Nordvelli (projekt końcowy kursu): błąd SUM z miarą, błąd porównania Integer z True/False, wynik bez ABS, składniki, lata, miasta
  • Kurs Power BI, lekcja 27: miara z Copilotem, polecenie, propozycja, komunikat paska formuły, dopasowanie i zapytanie sprawdzające

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

Jak sprawdzić miarę DAX wygenerowaną przez Copilota?
Wklej ją jako nową miarę i przeczytaj komunikat paska formuły, potem uruchom zapytanie DAX, które zwraca miarę razem z jej składnikami. W modelu Nordvelli sprzedaż 467 775 009,17 zł minus zwroty 14 022 095,44 zł dała 453 752 913,73 zł, a suma wyników z podziałem na lata była równa wynikowi całości.
Dlaczego miara od Copilota zwraca błąd, że nie można odnaleźć kolumny?
Copilot mógł użyć nazwy miary tak, jakby była kolumną, na przykład wewnątrz funkcji SUM, która przyjmuje tylko kolumnę. Tak było w modelu Nordvelli. Wtedy zamiast SUM wpisujesz samo odwołanie do miary w nawiasach kwadratowych. Wyrażenie miary sprawdzisz zapytaniem z funkcją INFO.VIEW.MEASURES w widoku zapytań w języku DAX.
Czy Copilot widzi dane w moich tabelach Power BI?
Według dokumentacji Microsoft do usługi trafiają między innymi polecenie i struktura modelu, a zawartość tabel tylko wtedy, gdy o to poprosisz. Dlatego Copilot nie wie, czy kwoty zwrotów są ujemne ani jakie wartości ma kolumna flagi. Takie rzeczy sprawdzasz sam zapytaniem DAX przed użyciem miary.
Dlaczego miara od Copilota daje wynik większy niż sprzedaż?
Bo odejmuje liczbę ujemną. W modelu Nordvelli zwroty są zapisane jako kwoty ujemne, więc formuła bez ABS dała 481 797 104,61 zł przy sprzedaży 467 775 009,17 zł. Po dodaniu ABS przy zwrotach wynik spadł do 453 752 913,73 zł.

Komentarze (0)

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

Brak komentarzy...