Blog JSystems - uwalniamy wiedzę!

Szukaj

Power BI - Model danych i relacje

Kierunek filtrowania Oba w relacji Power BI - kiedy włączyć i czym grozi

W skrócie

  • Filtrowanie dwukierunkowe w Power BI, czyli kierunek filtrowania krzyżowego Oba, sprawia, że filtr przechodzi relacją także od tabeli faktów do tabeli wymiaru, a stamtąd do innych tabel faktów.
  • Wymiar przefiltrowany przez sprzedaż filtruje potem budżet, zwroty i ankiety, więc wyniki zależą od tego, kiedy i gdzie akurat była sprzedaż. Dokumentacja Microsoft ostrzega też przed spadkiem wydajności i niejednoznacznymi ścieżkami.
  • Zostaw na relacjach kierunek Pojedyncza, a przepływ w drugą stronę włączaj w jednej mierze funkcją CROSSFILTER. Fragmentator z wartościami tylko z danymi zrobisz filtrem wizualizacji, a Oba zostaw dla tabeli pomostowej.

Po filtrowanie dwukierunkowe w Power BI sięga autor modelu, który chce, żeby fragmentator produktów pokazywał tylko produkty sprzedane w wybranym sklepie, albo żeby wymiar dało się policzyć w kontekście innego wymiaru. Kierunek Oba to załatwia, ale na całym modelu, nie tylko w tej jednej wizualizacji. Pokazujemy na modelu Nordvelli, kiedy ten kierunek jest uzasadniony, jak zmienia liczby i czym go zastąpić.

Jak to wygląda w praktyce

Kierunek ustawiasz w oknie Edytowanie relacji w polu Kierunek filtrowania krzyżowego: Pojedyncza albo Oba. Według dokumentacji Microsoft na diagramie relacja z kierunkiem Oba ma podwójny grot strzałki. W modelu Nordvelli wszystkie relacje mają kierunek pojedynczy.

Skutki widać w liczbach. Włączyliśmy w mierze funkcją CROSSFILTER kierunek Oba na relacji FaktSprzedaz z DimKalendarz i pokazaliśmy [Budżet sprzedaży] według produktu. Dla Laptop Kelvani Vela 13 wyszło 384 376 364,00 zł zamiast 541 917 189,40 zł, a suma 30 wierszy produktów dała 12 243 144 723,26 zł. Produkty dostały budżet tylko z części miesięcy, ten laptop z 42 z 60, i żadnej z tych kwot nie da się wytłumaczyć odbiorcy raportu.

Okno Edytowanie relacji: FaktSprzedaz i DimProdukty po ProduktID, kardynalność Wiele do jednego, filtrowanie Pojedyncza
Okno Edytowanie relacji. Poniżej podglądu tabel lista Kardynalność ustawiona na Wiele do jednego (*:1) oraz lista Kierunek filtrowania krzyżowego na Pojedyncza. Zaznaczone pole Aktywuj tę relację włącza relację.

Dlaczego tak się dzieje

Według dokumentacji Microsoft w relacji jeden do wielu filtr zawsze płynie od strony jeden, a kierunek Oba dodaje drogę od strony wiele. Filtr produktu zawęża FaktSprzedaz, a dalej, przez relację z kierunkiem Oba, także DimKalendarz do dni, w których ten produkt się sprzedał. Kalendarz filtruje następnie wszystkie tabele, z którymi jest połączony: FaktBudzet, FaktZwroty i FaktSatysfakcja. Budżet Nordvelli ma datę pierwszego dnia miesiąca, więc zostają tylko miesiące, w których laptop akurat sprzedał się pierwszego dnia.

Dokumentacja Microsoft zaleca ograniczać relacje dwukierunkowe, bo obciążają zapytania i bywają mylące dla odbiorców. Dokumentacja tworzenia relacji w Desktopie mówi wprost, żeby unikać ustawienia Oba (w angielskiej wersji Both), gdy wspólna tabela odnośników łączy dwie tabele faktów, na przykład sprzedaż i budżet, a tak zbudowany jest model Nordvelli. Wytyczne Microsoft dla relacji dwukierunkowych wymieniają trzy sytuacje, w których kierunek Oba rozwiązuje konkretną potrzebę: specjalne relacje (jeden do jednego i pomost wiele do wielu), fragmentator z wartościami tylko z danymi oraz analiza wymiaru w kontekście innego wymiaru. W dwóch ostatnich zaleca zamiast niego filtr wizualizacji albo CROSSFILTER. Kilka relacji Oba tworzy też drugą drogę filtra, co kończy się komunikatem opisanym w poście o niejednoznacznej ścieżce między tabelami.

Co zrobić krok po kroku

  1. Sprawdź, które relacje mają kierunek Oba. Otwórz Widok modelu i szukaj linii z grotami w obie strony, a pełną listę ustawień daje okno Zarządzanie relacjami i przycisk Edytuj przy każdej relacji. Relacja jeden do jednego według dokumentacji zawsze filtruje w obie strony.
  2. Gdy chcesz policzyć wymiar w kontekście innego wymiaru, na przykład ile produktów sprzedał sklep danego dnia, przywróć Pojedyncza na relacji i włącz drugi kierunek w mierze. CROSSFILTER działa tylko na czas liczenia tej miary. 3 marca 2025 bez niego każdy sklep miał 30 produktów, a z nim Nordvella Katowice 8, Nordvella Online 20, a Nordvella Białystok pustą wartość, bo tego dnia nic nie sprzedał. Ten sam wynik daje DISTINCTCOUNT na kolumnie FaktSprzedaz[ProduktID], bez zmiany kierunku.
    Sprzedane produkty =
    CALCULATE(
        DISTINCTCOUNT(DimProdukty[ProduktID]),
        CROSSFILTER(FaktSprzedaz[ProduktID], DimProdukty[ProduktID], BOTH)
    )
  3. Gdy fragmentator ma pokazywać tylko wartości z danymi, dokumentacja Microsoft zaleca filtr na poziomie wizualizacji zamiast relacji Oba. Zaznacz fragmentator, w panelu Filtry w sekcji Filtry dla tej wizualizacji dodaj miarę, na przykład Łączna sprzedaż, i ustaw warunek nie jest pusta. Szczegóły w poście o fragmentatorze z wartościami bez danych.
  4. Oba na relacji zostaw tam, gdzie jest potrzebne z budowy modelu: przy tabeli pomostowej między dwoma wymiarami powiązanymi wiele do wielu dokumentacja Microsoft wymaga jednej relacji dwukierunkowej, żeby filtr przeszedł przez pomost. Nie ustawiaj go na relacji tabeli faktów ze wspólnym wymiarem, takim jak DimKalendarz czy DimSklepy. Pole Zastosuj filtr zabezpieczeń w obu kierunkach, aktywne tylko przy kierunku Oba, dotyczy filtrów ról RLS, a nie zwykłych filtrów, i opisujemy je w poście o RLS i filtrowaniu dwukierunkowym.
  5. Po każdej zmianie kierunku porównaj sumę wierszy z wierszem sumy na wizualizacji z kolumną wymiaru i miarą z innej tabeli faktów. Na Nordvelli z Oba na relacji z kalendarzem suma wierszy produktów przekroczyła budżet całości ponad dwudziestokrotnie, co od razu pokazuje, że filtr dochodzi do budżetu drogą, której nikt nie planował.

Jak sprawdzić, że problem zniknął

Po przywróceniu kierunku Pojedyncza filtr produktu przestaje dochodzić do FaktBudzet, a cały budżet to znowu 541 917 189,40 zł. Budżet nie ma wymiaru produktu, więc pokazuj go według kategorii z DimKategorie, jak w poście o relacji wiele do wielu. Miara z CROSSFILTER daje te same liczby co DISTINCTCOUNT na kolumnie faktów, więc łatwo ją sprawdzić.

Przyjmij zasadę: relacje w modelu gwiazdy mają kierunek pojedynczy, a każdy wyjątek z kierunkiem Oba ma uzasadnienie zapisane w opisie relacji albo miary. Gdy raport zwalnia, otwórz Analizator wydajności i zmierz czas zapytań przed zmianą kierunku i po niej.

Źródła i sposób sprawdzenia

  • Microsoft Learn: Bi-directional relationship guidance (źródło)
  • Microsoft Learn: Model relationships in Power BI Desktop (Cross filter direction) (źródło)
  • Microsoft Learn: Create and manage relationships in Power BI Desktop (Cross filter direction) (źródło)
  • Microsoft Learn: CROSSFILTER function (DAX) (źródło)
  • Sprawdzone zapytaniami DAX na modelu Nordvelli: budżet według produktu z kierunkiem Oba na relacji z kalendarzem, sprzedane produkty z CROSSFILTER, kierunki wszystkich relacji z INFO.VIEW.RELATIONSHIPS.

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

Kiedy włączyć filtrowanie dwukierunkowe w Power BI?
Według dokumentacji Microsoft w trzech sytuacjach: przy specjalnych relacjach (jeden do jednego i tabela pomostowa wiele do wielu), przy fragmentatorze z wartościami tylko z danymi i przy analizie jednego wymiaru w kontekście drugiego. W dwóch ostatnich dokumentacja zaleca zamiast Oba filtr na poziomie wizualizacji albo CROSSFILTER w mierze.
Czym grozi kierunek filtrowania Oba w relacji Power BI?
Wymiar przefiltrowany przez fakty filtruje potem inne tabele faktów. Na modelu Nordvelli Oba na relacji sprzedaży z kalendarzem dało budżet laptopa 384 376 364,00 zł zamiast 541 917 189,40 zł, a suma produktów przekroczyła budżet ponad dwudziestokrotnie. Takie relacje obciążają też zapytania.
Czym zastąpić kierunek Oba w relacji Power BI?
Funkcją CROSSFILTER z argumentem BOTH wewnątrz CALCULATE w jednej mierze. Drugi kierunek działa wtedy tylko podczas liczenia tej miary, a relacja w modelu zostaje pojedyncza. Na Nordvelli taka miara policzyła produkty sprzedane w sklepie tak samo jak DISTINCTCOUNT na kolumnie faktów.
Jak pokazać we fragmentatorze tylko wartości z danymi bez filtrowania dwukierunkowego?
Dodaj do fragmentatora filtr na poziomie wizualizacji z miarą, na przykład Łączna sprzedaż, i warunkiem nie jest pusta. Dokumentacja Microsoft zaleca to zamiast relacji z kierunkiem Oba, bo relacje dwukierunkowe obciążają zapytania i bywają mylące dla odbiorców raportu.

Komentarze (0)

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

Brak komentarzy...