Blog JSystems - uwalniamy wiedzę!
Blog JSystems - uwalniamy wiedzę!
Power BI - Model danych i relacje
Power BI sam tworzy relacje po wczytaniu danych - jak wyłączyć autowykrywanie
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.
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.
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.
Zobacz też: Szkolenie Power BI - Desktop, DAX i Online + Copilot
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]
)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)
)
)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ę.
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ć.
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...