Blog JSystems - uwalniamy wiedzę!

Szukaj

Power BI - Model danych i relacje

Power BI sam tworzy relacje po wczytaniu danych - jak wyłączyć autowykrywanie

W skrócie

  • Autowykrywanie relacji w Power BI po załadowaniu danych samo łączy tabele z kolumnami o zgodnych nazwach i samo ustawia kardynalność, kierunek filtrowania oraz aktywność relacji.
  • Automat porównuje nazwy kolumn, a nie ich znaczenie, więc potrafi połączyć dwie tabele faktów albo wymiar z wymiarem i otworzyć drugą drogę filtra.
  • Odznacz opcję w sekcji Bieżący plik, na stronie Ładowanie danych, a relacje twórz i sprawdzaj w oknie Zarządzanie relacjami.

Większość relacji, które Power BI tworzy sam po wczytaniu kilku tabel, jest poprawna, ale para kolumn o tej samej nazwie i innym znaczeniu wystarczy, żeby automat połączył tabele, które nie powinny się filtrować. Po kliknięciu Załaduj widok modelu ma wtedy linie, których nikt nie rysował. Pokazujemy, gdzie wyłączyć autowykrywanie relacji, jak rozpoznać relacje utworzone automatycznie i która z nich na modelu Nordvelli zmieniłaby sprzedaż sklepów o miliony złotych.

Jak to wygląda w praktyce

Po pierwszym wczytaniu danych w widoku modelu są relacje, których nie tworzyłeś, a okno Zarządzanie relacjami pokazuje je na liście razem z ręcznymi. W modelu Nordvelli z ostatniej lekcji kursu jest 16 relacji i 11 z nich ma w metadanych nazwę zaczynającą się od AutoDetected_. Pozostałe pięć, między innymi FaktBudzet[DataID] i FaktZwroty[DataZwrotu], dodaliśmy ręcznie i mają w nazwie sam identyfikator.

Większość automatycznych relacji jest poprawna, na przykład FaktSprzedaz[ProduktID] do DimProdukty[ProduktID]. Kłopot zaczyna się przy kolumnach o tej samej nazwie i innym znaczeniu. W kursie po wczytaniu arkusza Nordvelli każemy sprawdzić, czy na liście nie ma relacji FaktZwroty (SprzedazID) do FaktSprzedaz (SprzedazID) oraz DimPracownicy (SklepID) do DimSklepy (SklepID). Druga z nich prowadzi filtr sklepu przez pracowników. Policzyliśmy, co by to dało: Nordvella Warszawa Centrum pokazałaby 16 512 549,40 zł zamiast 34 740 655,15 zł, a Nordvella Online nic, bo w DimPracownicy nie ma ani jednej osoby przypisanej do tego sklepu.

Dlaczego tak się dzieje

Według dokumentacji Microsoft, gdy wczytujesz naraz dwie lub więcej tabel, Power BI Desktop szuka relacji po nazwach kolumn i tworzy te, co do których ma wysoką pewność. Kardynalność, kierunek filtrowania krzyżowego i aktywność relacji ustawia sam. Podpowiedź przy opcji w polskim Power BI Desktop mówi wprost: „Po załadowaniu danych spróbuj wykryć i utworzyć relacje między tabelami, które aktualnie nie mają żadnych relacji.” Z podpowiedzi wynika więc, że opcja obejmuje także tabelę dokładaną do gotowego modelu, dopóki nie ma ona żadnej relacji.

Automat nie wie, co znaczy kolumna. DimPracownicy[SklepID] to sklep, w którym pracownik jest zatrudniony, a FaktSprzedaz[SklepID] to sklep transakcji. W Nordvelli te dwa sklepy różnią się w 103 432 ze 108 675 transakcji, a każda z 32 737 transakcji sklepu Nordvella Online ma sprzedawcę przypisanego do innego sklepu. Relacja wymiaru z wymiarem tworzy drugą drogę od DimSklepy do faktów, a wtedy Power BI musi jedną z relacji wyłączyć, co opisujemy w poście niejednoznaczna ścieżka między tabelami. Z kolei SprzedazID ma unikatowe wartości po obu stronach (108 675 w sprzedaży i 2714 w zwrotach), więc pasuje na klucz, choć łączy dwie tabele faktów. Dokumentacja Microsoft odradza łączenie tabel faktów wprost i zaleca wspólne wymiary.

Na tej samej stronie opcji są jeszcze dwa ustawienia. Importuj relacje ze źródeł danych podczas pierwszego ładowania kopiuje klucze obce z bazy danych i według dokumentacji jest domyślnie włączone. Aktualizuj lub usuwaj relacje podczas odświeżania danych jest domyślnie wyłączone i może usunąć relacje utworzone ręcznie.

Co zrobić krok po kroku

  1. Otwórz Plik > Opcje i ustawienia > Opcje. W lewej kolumnie, w sekcji Bieżący plik, kliknij Ładowanie danych. W grupie Relacje zobaczysz trzy pola: Importuj relacje ze źródeł danych podczas pierwszego ładowania, Aktualizuj lub usuwaj relacje podczas odświeżania danych i Automatycznie wykrywaj nowe relacje po załadowaniu danych.
  2. Odznacz Automatycznie wykrywaj nowe relacje po załadowaniu danych i zatwierdź okno. Ustawienie należy do bieżącego pliku, więc w każdym nowym projekcie sprawdzasz je od nowa. Pole Aktualizuj lub usuwaj relacje podczas odświeżania danych zostaw odznaczone. Podpowiedź Power BI ostrzega, że zabezpieczenia na poziomie wiersza oparte na usuniętej relacji mogą przestać działać, a jak takie zabezpieczenia budujemy, pokazujemy w lekcji o rolach RLS.
  3. Przejrzyj relacje, które już powstały. Na karcie Modelowanie kliknij Zarządzanie relacjami. Kolumna Stan mówi, czy relacja jest aktywna. Szukaj par, które łączą dwie tabele faktów albo dwa wymiary. W Nordvelli relacje FaktZwroty (SprzedazID) do FaktSprzedaz (SprzedazID) i DimPracownicy (SklepID) do DimSklepy (SklepID), jeśli się pojawiły, zaznacz i usuń przyciskiem Usuń. Gdy któraś potrzebna relacja jest nieaktywna, przeczytaj kiedy relacja jest przerywana i do czego służy USERELATIONSHIP.
  4. Przy dużym modelu wypisz relacje zapytaniem w widoku zapytań w języku DAX (czwarta ikona na pasku po lewej stronie okna). Relacje utworzone automatycznie mają nazwę z przedrostkiem AutoDetected_. Na modelu Nordvelli zapytanie zwraca 16 wierszy, w tym 11 z tym przedrostkiem i jedną relację nieaktywną, FaktZwroty[DataZakupu] do DimKalendarz[DataID].
    EVALUATE
    SELECTCOLUMNS(
        INFO.VIEW.RELATIONSHIPS(),
        "Nazwa", [Name],
        "Z", [FromTable] & "[" & [FromColumn] & "]",
        "Do", [ToTable] & "[" & [ToColumn] & "]",
        "Kardynalność", [FromCardinality] & ":" & [ToCardinality],
        "Kierunek", [CrossFilteringBehavior],
        "Aktywna", [IsActive]
    )
  5. Zanim zostawisz podejrzaną relację, porównaj obie drogi filtra na liczbach. Zapytanie liczy sprzedaż sklepu raz po sklepie transakcji, a raz po sklepie, do którego przypisany jest pracownik. Dla Nordvelli Warszawa Centrum wychodzi 34 740 655,15 zł i 16 512 549,40 zł, dla Nordvelli Kraków Galeria 18 933 826,98 zł i 51 586 434,19 zł. Tak duża różnica znaczy, że relacja odpowiada na inne pytanie i nie może filtrować sprzedaży.
    EVALUATE
    ADDCOLUMNS(
        SUMMARIZE(DimSklepy, DimSklepy[SklepID], DimSklepy[Nazwa]),
        "Przez sklep transakcji", [Łączna sprzedaż],
        "Przez sklep pracownika",
            VAR Sklep = DimSklepy[SklepID]
            RETURN CALCULATE(
                SUMX(
                    FILTER(FaktSprzedaz, RELATED(DimPracownicy[SklepID]) = Sklep),
                    FaktSprzedaz[WartoscNetto]
                ),
                REMOVEFILTERS(DimSklepy)
            )
    )
  6. Brakujące relacje dodaj ręcznie: w oknie Zarządzanie relacjami kliknij Nowa relacja, wybierz obie tabele i kolumny klucza. Automat nie połączy kolumn o różnych nazwach, dlatego w Nordvelli relację DimKalendarz[DataID] do FaktZwroty[DataZwrotu] trzeba utworzyć samemu. Gdy chcesz jednorazowo poszukać relacji w gotowym modelu, użyj przycisku Autowykrywanie w tym samym oknie i od razu obejrzyj każdą nową pozycję.
Okno Zarządzanie relacjami w Power BI: lista relacji Nordvelli i przyciski Nowa relacja, Autowykrywanie, Edytuj, Usuń
Okno Zarządzanie relacjami z listą relacji modelu Nordvelli. Kolumna Stan mówi, czy relacja jest aktywna, a przyciski Nowa relacja, Autowykrywanie, Edytuj i Usuń służą do ręcznej kontroli każdej relacji.

Jak sprawdzić, że problem zniknął

Po zmianie dodaj do pliku tabelę z kolumną o takiej samej nazwie jak klucz w modelu i po załadowaniu otwórz Zarządzanie relacjami. Gdy opcja jest odznaczona, a tabela nie pochodzi z bazy danych z kluczami obcymi, na liście nie powinna przybyć żadna pozycja. Potem uruchom zapytanie z kroku 4 i porównaj wynik z planem modelu. W pliku końcowym kursu każda z 16 relacji ma w kolumnie Kardynalność wartość Many:One, a w kolumnie Kierunek OneDirection, czyli jest relacją wiele do jednego z filtrem od strony jeden do strony wiele. Nieaktywna jest tylko relacja po dacie zakupu.

Przy każdej nowej tabeli rysuj relacje sam i sprawdzaj je dwiema liczbami: sumą miary po wymiarze i tą samą sumą policzoną jawnym warunkiem w FILTER, bez udziału sprawdzanej relacji, tak jak w kroku 5. Gdy obie się zgadzają, relacja filtruje to, co miała filtrować.

Źródła i sposób sprawdzenia

  • Microsoft Learn: Create and manage relationships in Power BI Desktop (Autodetect during load, Automatic relationship updates) (źródło)
  • Microsoft Learn: Many-to-many relationship guidance (Relate many-to-many facts) (źródło)
  • Sprawdzone zapytaniami DAX na modelu Nordvelli: 16 relacji, 11 z nazwą AutoDetected_, sprzedaż sklepów po sklepie transakcji i po sklepie pracownika.

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 wyłączyć autowykrywanie relacji w Power BI?
Otwórz Plik, Opcje i ustawienia, Opcje, a w sekcji Bieżący plik wybierz Ładowanie danych. W grupie Relacje odznacz pole Automatycznie wykrywaj nowe relacje po załadowaniu danych i zatwierdź okno. Ustawienie dotyczy bieżącego pliku, więc w nowym projekcie trzeba je sprawdzić od nowa.
Dlaczego Power BI sam tworzy relacje między tabelami?
Gdy wczytujesz naraz kilka tabel, Power BI Desktop szuka kolumn o zgodnych nazwach i tworzy relacje, co do których ma wysoką pewność, a przy pierwszym ładowaniu tabel z bazy danych kopiuje też klucze obce. Automat patrzy na nazwy kolumn, a nie na ich znaczenie, dlatego każdą taką relację warto przejrzeć.
Jak sprawdzić, które relacje Power BI utworzył automatycznie?
W widoku zapytań w języku DAX uruchom zapytanie na INFO.VIEW.RELATIONSHIPS() z kolumną Name. Relacje utworzone automatycznie mają nazwę zaczynającą się od AutoDetected_. W modelu Nordvelli takich relacji jest 11 z 16.
Czy automatycznie wykryta relacja może dać złe sumy?
Tak, gdy łączy kolumny o tej samej nazwie i innym znaczeniu. Na modelu Nordvelli relacja DimPracownicy do DimSklepy po SklepID prowadziłaby filtr sklepu przez pracowników i Nordvella Warszawa Centrum pokazałaby 16 512 549,40 zł zamiast 34 740 655,15 zł.

Komentarze (0)

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

Brak komentarzy...