Blog JSystems - uwalniamy wiedzę!

Szukaj

Power BI - Bezpieczeństwo: RLS, OLS i etykiety poufności

Wyświetl jako rola pokazuje pusty raport - adres spoza tabeli mapującej albo wartość spoza danych

W skrócie

  • Power BI pokazuje pusty raport pod rolą RLS, gdy reguła nie zostawia w tabeli DimSklepy żadnego wiersza. Karty mają dwie kreski, a tabele są puste, choć bez roli raport Nordvelli pokazuje 467,78 mln zł.
  • Najczęściej adres nie został przyjęty w oknie Wyświetl jako role, nie ma go w tabeli mapującej albo różni się spacją lub domeną. Rola statyczna daje pusty raport przy wartości spoza danych, na przykład Krakow bez ogonka. Reguła na tabeli mapującej daje odwrotny objaw: dane całej sieci.
  • Sprawdzasz pasek Oglądasz jako, uruchamiasz pod rolą zapytanie DAX z USERPRINCIPALNAME i licznikiem sklepów, porównujesz adres z mapą i poprawiasz dane albo regułę na tabeli DimSklepy.

Dwie kreski zamiast liczb na kartach, puste tabele i wykresy: tak wygląda pusty raport pod rolą RLS po włączeniu Wyświetl jako w Power BI Desktop. Rola działa, tylko jej reguła nie przepuszcza żadnego wiersza. Na modelu Nordvelli ustalamy w kilka minut, czy winny jest adres spoza tabeli mapującej, dane w tej tabeli, czy wartość w regule, której nie ma w danych.

Jak to wygląda w praktyce

W kursie wyglądało to tak: pasek nad raportem pokazywał Oglądasz jako: Manager sklepu, bez adresu, karty sprzedaży i transakcji miały dwie kreski, a wizualizacje były puste. Bez roli ten sam raport pokazuje 467 775 009,17 zł z 15 sklepów. Taki sam obraz daje kierownik zalogowany adresem, którego nie ma w tabeli MapaManagerow, oraz rola statyczna z wartością, której nie ma w danych.

Power BI nie zgłasza przy tym żadnego błędu, bo z punktu widzenia zabezpieczeń wszystko jest w porządku: osoba bez przypisanego sklepu nie ma czego oglądać. To odróżnia pusty raport od komunikatu „Wystąpił problem z co najmniej jednym polem.”, który pojawia się na wizualizacjach przy zabezpieczeniu kolumn.

Raport Nordvelli w podglądzie roli Manager sklepu bez adresu na pasku: karty z dwiema kreskami i puste wizualizacje
Pusty raport w Desktopie. Pasek mówi tylko Oglądasz jako: Manager sklepu, bez adresu, bo adres w oknie Wyświetl jako role nie został zatwierdzony klawiszem Tab. USERPRINCIPALNAME zwraca wtedy pusty tekst, lista sklepów z mapy jest pusta i karty pokazują dwie kreski.

Dlaczego tak się dzieje

Reguła roli to wyrażenie DAX, które dla każdego wiersza tabeli zwraca prawdę albo fałsz. Pusty raport znaczy, że dla wszystkich 15 wierszy DimSklepy wyszedł fałsz, a relacje przeniosły ten pusty wynik na sprzedaż. W roli dynamicznej Manager sklepu reguła porównuje kolumnę Email z wynikiem USERPRINCIPALNAME (). Sprawdziliśmy na modelu, podstawiając adresy do wyrażenia reguły, kiedy porównanie zawodzi: pusty tekst (adres niezatwierdzony w oknie), nazwa konta Windows POWERBI-KURS\powerbi, adres ze spacją na końcu i adres w domenie .com dały po 0 sklepów. Wielkie litery nie przeszkadzają, bo porównanie tekstów w DAX ich nie rozróżnia.

W roli statycznej pusty raport daje wartość, której nie ma w kolumnie. Warunek [Miasto] = "Krakow" bez ogonka zostawił 0 sklepów, a z ogonkiem 2. Tak samo kończy się porównanie ze złą kolumną: DimSklepy ma kolumnę Manager z imieniem i nazwiskiem, na przykład Piotr Nowak, więc porównanie jej z adresem nie znajduje nikogo.

Reguła na tabeli mapującej nie daje pustego raportu, tylko odwrotny objaw. W lekcji 21 reguła postawiona na MapaManagerow zostawiła w mapie jeden wiersz, a raport z podstawionym adresem pokazywał całą sieć, 468 mln zł i 109 tys. transakcji, bo relacja ma kierunek od DimSklepy do mapy i filtr nie dochodzi do sprzedaży. Ten przypadek i opcję relacji, która go dotyczy, opisujemy w poście o filtrze zabezpieczeń w obu kierunkach.

Co zrobić krok po kroku

  1. Przeczytaj pasek nad raportem. Przy roli dynamicznej ma pokazać rolę i adres, na przykład Oglądasz jako: Manager sklepu, piotr.nowak@nordvella.pl. Gdy widzisz samą rolę, adres przepadł. Otwórz ponownie Wyświetl jako, zaznacz Inni użytkownicy, wpisz adres, naciśnij Tab, dopiero potem zaznacz rolę i kliknij OK.
  2. Pod podglądem roli otwórz widok zapytań w języku DAX i uruchom zapytanie poniżej. Widok działa pod rolą wybraną w Wyświetl jako, więc pokazuje to, co widzi silnik. Dla piotr.nowak@nordvella.pl w kursie wyszedł ten adres, 1 sklep i 1 wiersz mapy. Gdy Sklepy widoczne pokazuje 0, przepisz adres z pierwszej kolumny do kolejnego kroku.
    EVALUATE
    ROW (
        "Zalogowany", USERPRINCIPALNAME (),
        "Sklepy widoczne", COUNTROWS ( DimSklepy ) + 0,
        "Wiersze mapy", COUNTROWS ( MapaManagerow ) + 0
    )
  3. Wyjdź z podglądu przyciskiem Zatrzymaj wyświetlanie i wypisz całą mapę zapytaniem poniżej. Pod rolą zobaczysz tylko wiersz zalogowanej osoby, dlatego uruchamiasz je bez roli. W Nordvelli wynik ma 6 wierszy, a RELATED dopisuje nazwę sklepu, na przykład Nordvella Kraków Stare Miasto przy sklepie 4, więc relacja z DimSklepy działa. Gdy adresu z kroku 2 nie ma na liście, problem jest w danych, nie w regule.
    EVALUATE
    SELECTCOLUMNS (
        MapaManagerow,
        "Email", MapaManagerow[Email],
        "SklepID", MapaManagerow[SklepID],
        "Nazwa sklepu", RELATED ( DimSklepy[Nazwa] )
    )
    ORDER BY [SklepID]
  4. Porównaj adresy znak po znaku. Spacja na końcu, inna domena albo alias zamiast loginu wystarczą, żeby reguła nie znalazła sklepu. Spacje usuń w Power Query przed załadowaniem mapy, co opisujemy w poście o funkcji Przytnij i niewidocznych znakach. Na tabeli testowej z adresem zakończonym spacją wyrażenie reguły bez przycięcia zostawiło 0 sklepów, a z TRIM po stronie mapy 1 sklep.
  5. Przy roli statycznej otwórz Zarządzaj rolami, kliknij tabelę z ikoną lejka i porównaj wartość w regule z danymi w widoku tabeli. Sprawdź pisownię z polskimi znakami (Kraków, nie Krakow) i kolumnę, której dotyczy warunek. Wielkość liter możesz pominąć: kraków małą literą też zostawił 2 sklepy.
  6. Gdy po poprawieniu adresu raport pokazuje całą sieć, 468 mln zł, zamiast jednego sklepu, reguła leży na tabeli mapującej, a nie na wymiarze DimSklepy. W roli Manager sklepu poprawna reguła czyta mapę wewnątrz wyrażenia: DimSklepy[SklepID] IN SELECTCOLUMNS ( FILTER ( MapaManagerow, MapaManagerow[Email] = USERPRINCIPALNAME () ), "SklepID", MapaManagerow[SklepID] ). Z adresem Piotra Nowaka zostawia sklep 4 i 31 545 739,77 zł sprzedaży.

Jak sprawdzić, że problem zniknął

Naprawione, gdy pod rolą z adresem kierownika zapytanie z kroku 2 pokazuje 1 sklep, a raport jego sprzedaż. W kursie każdy z sześciu adresów mapy dawał inny sklep. Pusty raport dla adresu spoza mapy jest poprawnym zachowaniem: kto nie ma przypisanego sklepu, nie widzi danych. Gdy dyrektor ma widzieć całą sieć, dopisz mu osobny warunek w regule tej samej roli, jak w lekcji 21, zamiast przypisywać go do kilku ról.

Przed publikacją testuj rolę dynamiczną dla co najmniej dwóch kierowników i jednego adresu spoza mapy, a w usłudze sprawdź, jaką wartość funkcja zwraca dla prawdziwego konta, co opisujemy w poście o USERPRINCIPALNAME i koncie Windows. Według dokumentacji Microsoft osoba, której w usłudze nie przypisano do żadnej roli, zwykle też nie widzi danych.

Źródła i sposób sprawdzenia

  • Microsoft Learn: Row-level security (RLS) with Power BI (Test as role, mapa użytkowników, brak przypisania do roli) (źródło)
  • Microsoft Learn: Row-level security (RLS) guidance in Power BI Desktop (Troubleshoot RLS) (źródło)
  • Microsoft Learn: USERPRINCIPALNAME function (DAX) (źródło)
  • Kurs Power BI, lekcja 21: reguła roli dynamicznej (podejście na MapaManagerow i na DimSklepy), dynamiczny RLS zwraca pusty raport
  • Sprawdzone zapytaniami DAX na modelu Nordvelli: reguła Manager sklepu dla różnych adresów, wartości w regułach statycznych, TRIM po stronie mapy

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 raport Power BI jest pusty pod rolą RLS?
Reguła roli nie zostawia w filtrowanej tabeli żadnego wiersza, a relacje przenoszą ten pusty wynik na fakty. Przy roli dynamicznej zwykle chodzi o adres, którego nie ma w tabeli mapującej albo który różni się spacją lub domeną. Przy roli statycznej o wartość w regule, której nie ma w danych, na przykład nazwę miasta bez polskich znaków.
Dlaczego Wyświetl jako nie przyjmuje adresu e-mail w Power BI Desktop?
W kursie Power BI adres wpisany w polu Inni użytkownicy przepadał, gdy nie został zatwierdzony klawiszem Tab przed zaznaczeniem roli. Pasek nad raportem pokazywał wtedy samą rolę, bez adresu, a funkcja USERPRINCIPALNAME zwracała pusty tekst. Poprawny pasek pokazuje rolę i adres po przecinku.
Czy RLS w Power BI rozróżnia wielkość liter w adresie?
Nie. Porównanie tekstów w DAX nie rozróżnia wielkości liter, więc adres zapisany wielkimi literami znalazł w tabeli mapującej Nordvelli właściwy sklep. Liczą się za to spacje i polskie znaki: adres ze spacją na końcu i nazwa Krakow bez ogonka nie pasowały do żadnego wiersza.
Co widzi osoba, której adresu nie ma w tabeli mapującej RLS?
Pusty raport. Reguła roli dynamicznej nie znajduje dla takiego adresu żadnego sklepu, więc karty pokazują dwie kreski, a tabele są puste. To poprawne zachowanie zabezpieczeń. Gdy ktoś ma widzieć całą sieć, dopisuje się mu osobny warunek w regule tej samej roli.

Komentarze (0)

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

Brak komentarzy...