Blog JSystems - uwalniamy wiedzę!

Szukaj

Power BI - Komunikaty błędów DAX

RELATED nie działa w Power BI - kolumna nie istnieje albo nie ma relacji

W skrócie

  • Gdy RELATED nie działa w Power BI, silnik zgłasza „Kolumna „DimSklepy[Miasto]” nie istnieje lub nie ma relacji z żadną tabelą dostępną w bieżącym kontekście”. Ten sam tekst oznacza kilka różnych przyczyn.
  • RELATED potrzebuje bieżącego wiersza i relacji wiele do jednego, po której idzie od strony wiele do strony jeden. Nie zadziała w mierze bez iteratora, w tabeli wymiaru, bez relacji, przy literówce, a według dokumentacji Microsoft także po relacji ograniczonej.
  • Użyj RELATED w kolumnie tabeli faktów albo w SUMX, z tabeli wymiaru sięgaj przez RELATEDTABLE, a bez relacji albo po relacji nieaktywnej przez LOOKUPVALUE.

Gdy RELATED nie działa w Power BI, komunikat silnika brzmi tak samo bez względu na to, czy zabrakło relacji, czy formuła jest w złym miejscu. Pokazujemy, jak odróżnić pięć przyczyn tego błędu, jak poprawić każdą z nich i w jakiej sytuacji RELATED nie zgłasza błędu, a i tak zwraca wartość z innej relacji, niż zakładasz.

Jak to wygląda w praktyce

Komunikat pojawia się pod paskiem formuły miary albo kolumny obliczeniowej. Na modelu Nordvelli miara RELATED(DimSklepy[Miasto]) zgłosiła: „Kolumna „DimSklepy[Miasto]” nie istnieje lub nie ma relacji z żadną tabelą dostępną w bieżącym kontekście.” (w angielskiej wersji: „The column 'DimSklepy[Miasto]' either doesn't exist or doesn't have a relationship to any table available in the current context.”).

Ten sam tekst, z inną nazwą kolumny, dały cztery kolejne formuły: kolumna obliczeniowa RELATED(FaktSprzedaz[KanalSprzedazy]) w tabeli DimSklepy, kolumna RELATED(DimSklepy[Miasto]) w tabeli DimPracownicy, kolumna z literówką RELATED(DimSklepy[Miast]) i miara SUMX(DimSklepy, RELATED(FaktSprzedaz[WartoscNetto])). Dlatego sama treść komunikatu nie wystarczy do diagnozy. Trzeba sprawdzić, w jakiej tabeli jest formuła i jak wyglądają relacje.

Dlaczego tak się dzieje

Według dokumentacji Microsoft RELATED potrzebuje kontekstu wiersza, czyli bieżącego wiersza tabeli, więc działa w kolumnie obliczeniowej albo wewnątrz funkcji przechodzącej po tabeli, takiej jak SUMX. Z tego wiersza idzie po istniejącej relacji wiele do jednego do strony jeden. Miara bez iteratora nie ma bieżącego wiersza, a z tabeli DimSklepy, która jest po stronie jeden relacji z FaktSprzedaz, RELATED nie zejdzie do wielu transakcji sklepu. Tabela DimPracownicy ma kolumnę SklepID, ale w modelu Nordvelli nie ma relacji z DimSklepy, więc RELATED nie ma po czym przejść.

Dokumentacja wymienia jeszcze relację ograniczoną: RELATED nie pobierze po niej wartości ze strony jeden. Relacja jest ograniczona, gdy ma kardynalność wiele do wielu albo łączy tabele z różnych grup źródeł w modelu złożonym, a w widoku modelu poznasz ją po nawiasach na końcach linii, co pokazujemy w lekcji o modelach złożonych. Osobny przypadek to kolumna z innej tabeli wpisana bez RELATED: Miasto sklepu = DimSklepy[Miasto] w tabeli DimPracownicy daje komunikat o pojedynczej wartości, który opisujemy w poście nie można określić pojedynczej wartości dla kolumny.

Co zrobić krok po kroku

  1. Sprawdź, w jakiej tabeli i w jakim obiekcie jest formuła. W mierze RELATED musi być wewnątrz iteratora po tabeli po stronie wiele, na przykład SUMX po FaktSprzedaz. W kolumnie obliczeniowej musi być w tabeli po stronie wiele, czyli w tabeli faktów, a nie w wymiarze.
  2. W mierze użyj RELATED wewnątrz SUMX. Miara poniżej mnoży ilość z każdej transakcji przez marżę jednostkową z cennika i na modelu Nordvelli daje 72 287 835 zł, tyle samo co miara [Marża katalogowa] zapisana w modelu.
    Marża katalogowa =
    SUMX(
        FaktSprzedaz,
        FaktSprzedaz[Ilosc] * RELATED(DimProdukty[MarzaNetto])
    )
  3. W kolumnie obliczeniowej tabeli faktów RELATED działa bez dodatków i może przejść przez kilka relacji po kolei. Kolumna z miastem sklepu daje dla pierwszej transakcji „Warszawa”, a kolumna z kategorią z tabeli DimKategorie idzie przez DimProdukty i dzieli 108 675 transakcji na Akcesoria (25 377), AGD/RTV (36 168), Komputery (29 154) i Telefony (17 976).
    Miasto sklepu = RELATED(DimSklepy[Miasto])
    
    Kategoria produktu = RELATED(DimKategorie[Kategoria])
  4. W tabeli wymiaru sięgaj do faktów przez RELATEDTABLE, które zwraca wiersze ze strony wiele, i zagreguj wynik. Kolumna poniżej w tabeli DimSklepy daje 8145 transakcji dla Nordvella Warszawa Centrum i 32 737 dla Nordvella Online, a suma po 15 sklepach to 108 675.
    Liczba transakcji sklepu = COUNTROWS(RELATEDTABLE(FaktSprzedaz))
  5. Gdy relacji nie ma, utwórz ją w oknie Zarządzanie relacjami przyciskiem Nowa relacja, jak w lekcji o modelu gwiazdy i relacjach, albo pobierz wartość przez LOOKUPVALUE. W Nordvelli wybieramy LOOKUPVALUE, bo według dokumentacji Microsoft między dwiema tabelami może być tylko jedna aktywna ścieżka filtrowania, a relacja pracowników ze sklepami dodałaby drugą drogę ze sklepów do sprzedaży, o czym piszemy w poście niejednoznaczna ścieżka między tabelami. Kolumna poniżej znalazła sklep dla wszystkich 200 pracowników.
    Miasto sklepu = LOOKUPVALUE(DimSklepy[Miasto], DimSklepy[SklepID], DimPracownicy[SklepID])
  6. Uważaj na relację nieaktywną, bo tu RELATED nie zgłasza błędu. Tabela FaktZwroty ma dwie relacje z DimKalendarz: aktywną po dacie zwrotu i nieaktywną po dacie zakupu. RELATED idzie po aktywnej, więc dla zwrotu nr 3 zwraca 22.01.2022, czyli datę zwrotu, a nie 04.01.2022, datę zakupu. Datę po kolumnie z relacją nieaktywną pobierz przez LOOKUPVALUE, a w miarach przełączaj relacje funkcją USERELATIONSHIP, o której piszemy w poście relacja nieaktywna i funkcja USERELATIONSHIP.
    Data zakupu = LOOKUPVALUE(DimKalendarz[Data], DimKalendarz[DataID], FaktZwroty[DataZakupu])
  7. Gdy formuła jest w dobrym miejscu, a błąd zostaje, porównaj nazwę kolumny w komunikacie z panelem Dane. Literówka DimSklepy[Miast] daje ten sam komunikat co brak relacji. Wpisz nazwę tabeli i nawias kwadratowy, a IntelliSense podpowie istniejące kolumny.
Pasek formuł Power BI z miarą Marża katalogowa: SUMX po FaktSprzedaz z RELATED do DimProdukty[MarzaNetto]
Ilość z faktów razy marża jednostkowa z cennika, sięgnięta przez RELATED wewnątrz SUMX. Pole Tabela główna na wstążce pokazuje FaktSprzedaz.

Jak sprawdzić, że problem zniknął

Po poprawce sprawdź wynik na sumie, którą znasz z innej miary. Na modelu Nordvelli SUMX(DimSklepy, COUNTROWS(RELATEDTABLE(FaktSprzedaz))) daje 108 675, tyle samo co miara [Liczba transakcji], a marża katalogowa z RELATED zgadza się z miarą w modelu co do złotówki. Gdy filtrujesz fakty po atrybucie wymiaru, RELATED w FILTER nie jest potrzebny: CALCULATE([Łączna sprzedaż], FILTER(FaktSprzedaz, RELATED(DimSklepy[Typ]) = "E-commerce")) i prostsze CALCULATE([Łączna sprzedaż], DimSklepy[Typ] = "E-commerce") dają te same 141 772 848,59 zł.

Przed napisaniem RELATED otwórz widok modelu i sprawdź, czy między tabelami jest aktywna relacja i po której stronie jest gwiazdka. RELATED piszesz po stronie gwiazdki, czyli wiele, i sięgasz nim do strony z cyfrą 1.

Źródła i sposób sprawdzenia

  • Microsoft Learn: RELATED function (DAX) (źródło)
  • Microsoft Learn: RELATEDTABLE function (DAX) (źródło)
  • Microsoft Learn: Model relationships in Power BI Desktop (relacje ograniczone, aktywne i nieaktywne) (źródło)
  • Microsoft Learn: LOOKUPVALUE function (DAX) (źródło)
  • Sprawdzone zapytaniami DAX na modelu Nordvelli: RELATED w mierze, w wymiarze, bez relacji, z literówką i po relacji nieaktywnej oraz poprawki z SUMX, RELATEDTABLE i LOOKUPVALUE.

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

Dlaczego RELATED nie działa w mierze Power BI?
RELATED potrzebuje bieżącego wiersza tabeli, a miara bez iteratora go nie ma. Na modelu Nordvelli miara z samym RELATED zgłosiła komunikat, że kolumna nie istnieje lub nie ma relacji. RELATED w mierze umieść wewnątrz SUMX albo innego iteratora po tabeli faktów.
Jaka jest różnica między RELATED a RELATEDTABLE?
RELATED zwraca jedną wartość ze strony jeden relacji i piszesz go w tabeli po stronie wiele, na przykład w tabeli faktów. RELATEDTABLE zwraca wiersze ze strony wiele i używasz go w tabeli wymiaru, na przykład z COUNTROWS albo SUMX. Na modelu Nordvelli COUNTROWS(RELATEDTABLE(FaktSprzedaz)) dało 8145 transakcji dla sklepu Warszawa Centrum.
Czy RELATED działa przy relacji nieaktywnej?
RELATED idzie po aktywnej relacji i nie zgłasza błędu, gdy obok jest relacja nieaktywna. W tabeli FaktZwroty Nordvelli zwraca datę zwrotu z aktywnej relacji, a nie datę zakupu z nieaktywnej. Wartość po kolumnie z relacją nieaktywną pobierz przez LOOKUPVALUE.
Co zrobić, gdy między tabelami nie ma relacji, a potrzebna jest wartość z drugiej tabeli?
Utwórz relację w oknie Zarządzanie relacjami albo, gdy relacja zaburzyłaby filtrowanie modelu, pobierz wartość przez LOOKUPVALUE. Na modelu Nordvelli LOOKUPVALUE po kolumnie SklepID znalazł miasto sklepu dla wszystkich 200 pracowników, mimo że tabela DimPracownicy nie ma relacji z DimSklepy.

Komentarze (0)

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

Brak komentarzy...