Blog JSystems - uwalniamy wiedzę!

Szukaj
Strona Dashboard raportu Nordvelli bez roli i w trybie Wyświetl jako rola Sprzedawca: karta sprzedaży działa, karta marży i tabela pokazują błąd
Ta sama strona Dashboard dwa razy. Po lewej bez roli: 468 mln zł sprzedaży, marża 16,46% i tabela miast. Po prawej w trybie Wyświetl jako rola Sprzedawca: sprzedaż i średnia ocena zostają, a karta marży i cała tabela pokazują błąd, bo dla tej roli kolumna MarzaNetto nie istnieje. Plakietki nad zrzutami dodaliśmy my.

W skrócieOLS (Object Level Security, zabezpieczenia na poziomie obiektu) ukrywa wskazane kolumny przed wybraną rolą. Dla tej roli kolumna nie istnieje: zapytanie DAX z jej nazwą kończy się błędem, a miary i wizualizacje, które z niej liczą, przestają działać. Ukrycie kolumny w raporcie tego nie daje, a etykieta poufności chroni cały plik, nie kolumnę.

Lekcja 22 z 28 bezpłatnego kursu Power BI, od pierwszego raportu do Fabric i Copilota, na jednym zestawie danych sieci Nordvella.

<-- Spis wszystkich lekcji
<-- Lekcja 21: RLS: bezpieczeństwo na poziomie wierszaLekcja 23: Power BI Service: publikowanie, workspace, aplikacje -->

W Nordvelli sprzedawca ma wiedzieć, ile sprzedał, ale nie ile firma na tym zarobiła. W tym rozdziale dodamy do modelu z lekcji 21 rolę Sprzedawca i w Tabular Editorze schowamy przed nią kolumnę marży. Efekt sprawdzimy na stronie Dashboard i w widoku zapytań DAX, a potem znajdziemy przeciek: marżę da się policzyć z dwóch innych kolumn. Zamkniemy go, pokażemy, czego Power BI nie pozwala łączyć, i wyjaśnimy, dlaczego przycisk Poufność bywa wyszarzony.

Z tej lekcji dowiesz się:

Pliki do tej lekcji

Gotowy efekt: plik Power BI Desktop w stanie z końca tej lekcji, z tymi samymi zapytaniami, modelem i stronami raportu, które widać na zrzutach. Etykiety poufności w nim nie ma: nadaje się ją dopiero po włączeniu etykiet w organizacji (sekcja o etykietach).

Pobierz nordvella_22_ols.pbix

Plik startowy: stan z końca poprzedniej lekcji. Otwórz go, jeśli chcesz wykonywać kroki tej lekcji od razu, bez odtwarzania wcześniejszych.

Pobierz nordvella_21_rls.pbix

Dane źródłowe:
Nordvella_dane.xlsx - dziewięć tabel Nordvelli w arkuszu Excel.

Pobierz Nordvella_dane.xlsx

Trzy poziomy ochrony: etykieta, kolumna, wiersz

Power BI ma trzy mechanizmy, które potocznie nazywa się zabezpieczeniem raportu. Działają na różnych poziomach i odpowiadają na różne pytania, więc jeden nie zastąpi drugiego.

Infografika trzy warstwy ochrony danych w Power BI: etykieta poufności chroni cały plik, OLS wybrane kolumny, RLS wybrane wiersze
Etykieta poufności opisuje i chroni cały plik, OLS działa na kolumnach, RLS na wierszach. W tym rozdziale zajmujemy się głównie środkową warstwą, bo to ona odpowiada na pytanie, jak schować marżę.
MechanizmCo chroniGdzie się go ustawiaCo widzi osoba bez dostępu
Etykieta poufnościcały plik .pbix i pliki eksportowane do Excela, PowerPointa i PDFMicrosoft Purview (administrator), potem przycisk Poufność w Desktopieoznaczenie pliku; ochrona zależy od ustawień etykiety
OLSwybrane kolumny i tabeleTabular Editor (Desktop nie ma do tego okna)błąd zamiast danych: kolumna dla roli nie istnieje
RLSwybrane wierszeokno Zarządzaj rolami w Desktopie (lekcja 21)mniej wierszy, ale wszystkie kolumny

Model z lekcji 21 ma już pięć ról RLS: Region Południe, Sklep Warszawa, E-commerce, Flagowce Kraków i Katowice oraz Manager sklepu. Dokładamy szóstą rolę, Sprzedawca, która nie ogranicza wierszy, tylko kolumny.

Rola Sprzedawca w oknie Zarządzaj rolami

Co chcemy osiągnąć. Chcemy dodać do modelu rolę Sprzedawca bez filtra wierszy, obok pięciu ról z lekcji 21. OLS zawsze ustawia się dla konkretnej roli, więc bez niej nie ma czego zabezpieczać.

Otwórz plik startowy nordvella_21_rls.pbix. Na karcie Modelowanie kliknij Zarządzaj rolami. W oknie Zarządzaj rolami zabezpieczeń, w kolumnie Role, zobaczysz pięć ról z lekcji 21.

Okno Zarządzaj rolami zabezpieczeń w Power BI Desktop z pięcioma rolami z lekcji 21: E-commerce, Flagowce Kraków i Katowice, Manager sklepu, Region Południe, Sklep Warszawa
Punkt wyjścia: pięć ról RLS z lekcji 21 w porządku alfabetycznym. Środkowa kolumna to tabele modelu, prawa to reguły wybranej roli i tabeli.

Kliknij Nowy. Na górze listy pojawi się rola Bez tytułu i tu jest pierwsza pułapka tego okna. Pisanie zaraz po kliknięciu niczego nie zmienia, bo fokus zostaje na przycisku Nowy. Jeśli wpiszesz nazwę i naciśniesz Enter, Power BI potraktuje Enter jak kolejne kliknięcie Nowy i doda drugą rolę.

Okno Zarządzaj rolami po wpisaniu nazwy i naciśnięciu Enter: na liście dwie nowe role, Bez tytułu i Bez tytułu (2)
Tak kończy się wpisanie nazwy i Enter zaraz po kliknięciu Nowy: zamiast roli Sprzedawca są dwie role, Bez tytułu i Bez tytułu (2). Wpisany tekst nigdzie nie trafił.

Nadmiarową rolę usuniesz z menu trzech kropek obok jej nazwy: kliknij kropki przy Bez tytułu (2) i wybierz Usuń. Power BI nie pyta o potwierdzenie.

Menu trzech kropek przy roli Bez tytułu (2) w oknie Zarządzaj rolami z poleceniami Zmień nazwę, Duplikuj i Usuń, wskazane Usuń
Menu roli ma trzy polecenia: Zmień nazwę, Duplikuj i Usuń. Usuń kasuje rolę od razu, bez okna z pytaniem.

Nazwę nadajesz tym samym menu. Kliknij trzy kropki przy roli Bez tytułu, wybierz Zmień nazwę, wpisz Sprzedawca i naciśnij Enter. W trybie zmiany nazwy Enter zatwierdza nazwę i nie tworzy nowej roli. Lista od razu sortuje się alfabetycznie, więc Sprzedawca przeskoczy na koniec.

Menu trzech kropek przy nowej roli Bez tytułu z podświetlonym poleceniem Zmień nazwę w oknie ról Power BI Desktop
Zmień nazwę to jedyna droga do nazwy roli. Kliknięcie samej nazwy na liście i pisanie po zaznaczonym wierszu niczego nie zmieniają.

Roli Sprzedawca nie dodawaj żadnej reguły. Panel Reguły zostaje pusty, więc rola widzi wszystkie wiersze. Kliknij Zapisz. Nad listą pojawi się zielony pasek Pomyślnie zastosowano zmiany ról, a przycisk Zapisz zrobi się nieaktywny. Zamknij okno przyciskiem Zamknij.

Okno Zarządzaj rolami z sześcioma rolami i zielonym paskiem Pomyślnie zastosowano zmiany ról po zapisaniu roli Sprzedawca
Sześć ról, Sprzedawca na końcu listy i zielony pasek potwierdzenia. Ten pasek jest jedynym sygnałem, że rola trafiła do modelu.

OLS w Tabular Editorze: kolumna MarzaNetto znika dla roli

Co chcemy osiągnąć. Kolumna FaktSprzedaz[MarzaNetto] ma zniknąć dla roli Sprzedawca i zostać widoczna dla wszystkich pozostałych ról.

Power BI Desktop nie ma okna do OLS, tak samo jak nie ma okna do grup obliczeniowych. Ustawiasz je w bezpłatnym Tabular Editorze, który łączy się z modelem otwartym w Desktopie. Instalację i podłączenie opisaliśmy w lekcji 17. Przejdź na kartę Narzędzia zewnętrzne i kliknij Tabular Editor.

Karta Narzędzia zewnętrzne w Power BI Desktop z ikonami DAX Studio i Tabular Editor
Karta Narzędzia zewnętrzne z DAX Studio i Tabular Editorem. Narzędzie podłącza się do modelu z pliku, który właśnie masz otwarty.

Tabular Editor otworzy się z drzewem modelu po lewej. Na pasku tytułu zobaczysz nazwę pliku i adres localhost z numerem portu: to ten sam model, który masz otwarty w Desktopie. W polu Filter na górze okna wpisz MarzaNetto i naciśnij Enter.

Tabular Editor 2 z filtrem MarzaNetto: w drzewie modelu dwie kolumny MarzaNetto, w tabelach DimProdukty i FaktSprzedaz, zaznaczona kolumna z FaktSprzedaz
Filtr znalazł dwie kolumny o tej samej nazwie. MarzaNetto w DimProdukty to marża katalogowa produktu w pełnych złotych, MarzaNetto w FaktSprzedaz to marża z każdej transakcji. Zabezpieczamy tę drugą, więc zaznacz kolumnę pod FaktSprzedaz.

Pod drzewem, w prawym dolnym rogu okna, jest panel właściwości zaznaczonej kolumny. Zjedź w nim na sam dół, do sekcji Translations, Perspectives, Security. Pozycja Object Level Security ma opis Value assigned to 0 out of 6 Model Roles. Rozwiń ją strzałką po lewej: zobaczysz wszystkie sześć ról modelu, każdą z wartością Default.

Panel właściwości Tabular Editora dla kolumny FaktSprzedaz MarzaNetto: Object Level Security z sześcioma rolami, każda z wartością Default, opis 0 out of 6 Model Roles
Sześć ról, bo model z lekcji 21 ma pięć ról RLS, a dodaliśmy Sprzedawcę. Default znaczy, że rola nie ma dla tej kolumny osobnego ustawienia i widzi ją normalnie. Ramkę wokół kolumny dodaliśmy my, bo po kliknięciu w panel właściwości zaznaczenie w drzewie blednie.

Kliknij wartość Default w wierszu Sprzedawca, a potem strzałkę na prawym końcu pola. Lista ma trzy pozycje:

Rozwinięta lista wartości Object Level Security dla roli Sprzedawca w Tabular Editorze: Default, None, Read
Trzy wartości do wyboru. Wybierz None.

Default znaczy brak osobnego ustawienia, więc kolumna jest widoczna. Read jawnie ją dopuszcza i też zostawia widoczną. Po wybraniu None kolumny nie ma w modelu, który widzi rola.

Po wybraniu None opis pozycji zmieni się na Value assigned to 1 out of 6 Model Roles, a w wierszu Sprzedawca zobaczysz None.

Object Level Security kolumny MarzaNetto w Tabular Editorze po zmianie: rola Sprzedawca z wartością None, opis 1 out of 6 Model Roles
Zabezpieczenie zapisuje się przy kolumnie, nie przy roli. Pozostałe pięć ról zostaje na Default, więc dla nich nic się nie zmienia.

Naciśnij Ctrl+S w Tabular Editorze. Na pasku stanu w lewym dolnym rogu pojawi się Changes saved., czyli zmiana trafiła do modelu w Desktopie. Do pliku .pbix trafi dopiero wtedy, gdy zapiszesz plik w Power BI Desktop (Ctrl+S w oknie Desktopu). Tabular Editor zostaw otwarty, przyda się jeszcze w tym rozdziale.

Test roli: Wyświetl jako i widok zapytań DAX

Co chcemy osiągnąć. Chcemy zobaczyć raport i model oczami roli Sprzedawca, bez publikowania i bez drugiego konta.

Wróć do Power BI Desktop, na stronę Dashboard. Na karcie Modelowanie kliknij Wyświetl jako. W oknie Wyświetl jako role zaznacz Sprzedawca i kliknij OK.

Okno Wyświetl jako role w Power BI Desktop z listą: Brak, Inni użytkownicy i sześć ról, zaznaczona rola Sprzedawca
Brak oznacza podgląd bez roli, a Inni użytkownicy służy do ról dynamicznych z lekcji 21. Dla OLS wystarczy zaznaczyć samą rolę.

Raport przeliczy się tak, jak zobaczy go sprzedawca. Nad stroną pojawi się pasek Oglądasz jako: Sprzedawca z przyciskiem Zatrzymaj wyświetlanie po prawej. Gdy pasek przykrywa górę strony, zmniejsz powiększenie przyciskiem minus w prawym dolnym rogu okna. My pracowaliśmy na 70%.

Strona Dashboard w trybie Wyświetl jako rola Sprzedawca: karty Łączna sprzedaż 468 mln zł i Średnia ocena 4,08 działają, karta Marża % i tabela miast pokazują błąd
Karty Łączna sprzedaż (468 mln zł) i Średnia ocena (4,08) działają, bo nie korzystają z marży. Karta Marża % i cała tabela pokazują Wystąpił problem z co najmniej jednym polem. Tabela znika w całości, choć marżę liczy tylko jedna z jej pięciu kolumn.

To pierwszy wniosek: OLS nie zostawia pustego miejsca w kolumnie Marża %, tylko wyłącza cały wizual, który z niej korzysta. Raport dla roli Sprzedawca nie może więc pokazywać miar opartych na marży. Wrócimy do tego przy przecieku.

Drugi test zrobisz w widoku zapytań DAX (ikona na lewym pasku, pod widokiem modelu). Widok zapytań działa pod rolą wybraną w Wyświetl jako, choć nie pokazuje paska roli. Wklej zapytanie i kliknij Uruchom:

// Czy rola Sprzedawca widzi miarę Łączna marża?
EVALUATE
ROW ( "Łączna marża", [Łączna marża] )
Widok zapytań DAX w Power BI Desktop pod rolą Sprzedawca: zapytanie o miarę Łączna marża kończy się błędem, że kolumna nie istnieje
Wynik: Nie można określić wartości elementu „Łączna marża”. Kolumna nie istnieje lub nie ma bieżącego wiersza dla tej kolumny. Miara Łączna marża to SUM(FaktSprzedaz[MarzaNetto]), więc razem z kolumną zniknęła dla roli także miara.

Komunikaty błędów, które kierują w złą stronę

Gdy ktoś zgłosi, że raport się zepsuł, pierwsze pytanie brzmi, co dokładnie widzi. Power BI pokazuje różne komunikaty zależnie od wizualizacji i tylko część z nich wspomina o uprawnieniach.

Karta i tabela: Missing_References

Pod rolą Sprzedawca kliknij Zobacz szczegóły na karcie Marża %, a w oknie Pola, które trzeba naprawić rozwiń Zobacz szczegóły.

Okno Pola, które trzeba naprawić w Power BI Desktop: problem z polem (FaktSprzedaz) Marża % lub brak uprawnień, podstawowy błąd Missing_References
Ten komunikat jest uczciwy: mówi o polu albo o braku uprawnień i podaje nazwę pola, (FaktSprzedaz) Marża %. W szczegółach technicznych jest kod Missing_References. Tabela na tej stronie pokazuje to samo okno.

Na stronie Python i R to samo okno pojawia się przy wizualizacji R. Ona korzysta z kolumny bezpośrednio, więc w komunikacie pada nazwa kolumny: (FaktSprzedaz) MarzaNetto.

Drzewo dekompozycji: komunikat o sztucznej inteligencji

Strona 5 ma drzewo dekompozycji, które analizuje miarę Łączna marża. Bez roli działa normalnie i rozbija marżę na regiony, kategorie i miasta.

Drzewo dekompozycji Power BI na Stronie 5 bez roli: miara Łączna marża rozbita na regiony, kategorie i miasta
Drzewo dekompozycji bez roli: Łączna marża rozbita według Region, Kategoria i Miasto.

Pod rolą Sprzedawca w miejscu drzewa pojawia się komunikat, który z uprawnieniami nie ma nic wspólnego. Po kliknięciu Zobacz szczegóły zobaczysz to okno:

Okno błędu drzewa dekompozycji pod rolą Sprzedawca: Podziały sztucznej inteligencji są obecnie nieobsługiwane, podstawowy błąd DecompositionTree_AnalysisUnsupported_Description
Tytuł mówi, że podziały sztucznej inteligencji są nieobsługiwane, a opis wspomina o połączeniu na żywo z Analysis Services i złożonych miarach. O uprawnieniach nie ma ani słowa. Kod w szczegółach to DecompositionTree_AnalysisUnsupported_Description.

Osoba, która szuka przyczyny po treści komunikatu, zacznie sprawdzać tryb połączenia i miary, których nikt nie ruszał.

Wskazówka: gdy wizualizacja działa u Ciebie, a u kogoś innego pokazuje błąd, najpierw włącz Wyświetl jako z jego rolą. Jeśli błąd się powtarza, przyczyną są uprawnienia, nie model.

Ukrycie kolumny to nie zabezpieczenie

Najczęstsze nieporozumienie w tym temacie brzmi: ukryłem kolumnę w raporcie, więc nikt jej nie zobaczy. Ukrycie (prawy przycisk myszy na kolumnie w panelu Dane, Ukryj w widoku raportu) zmienia tylko listę pól. Kolumna zostaje w modelu.

Infografika ukrycie kolumny kontra OLS w Power BI: ukryta kolumna dalej jest w modelu i odpowiada na zapytania DAX, kolumna z OLS dla roli nie istnieje
Ukrycie porządkuje listę pól, OLS zabezpiecza. Najważniejszy jest ostatni punkt po prawej: chroń też kolumny, z których da się wyliczyć ukrywaną wartość.

Sprawdzisz to na kolumnie FaktSprzedaz[ProduktID], która w modelu jest ukryta. Uruchom w widoku zapytań DAX, nadal pod rolą Sprzedawca:

// Kolumna ukryta (ProduktID) to nie kolumna zabezpieczona
EVALUATE
TOPN (
    5,
    SELECTCOLUMNS (
        FaktSprzedaz,
        "SprzedazID", FaktSprzedaz[SprzedazID],
        "ProduktID (ukryta)", FaktSprzedaz[ProduktID],
        "KosztWlasny", FaktSprzedaz[KosztWlasny]
    ),
    [SprzedazID], ASC
)
ORDER BY [SprzedazID]
Widok zapytań DAX pod rolą Sprzedawca: zapytanie zwraca pięć wierszy z ukrytą kolumną ProduktID i kolumną KosztWlasny
Pięć wierszy z wartościami ukrytej kolumny ProduktID: 23, 3, 10, 7 i 18. Ukrycie nie zatrzymało zapytania. Zwróć też uwagę na ostatnią kolumnę: rola widzi koszt własny każdej transakcji, a to otwiera drogę do marży.

Przeciek: marżę da się wyliczyć z innych kolumn

Co chcemy osiągnąć. Sprawdzimy, czy rola Sprzedawca policzy marżę bez kolumny MarzaNetto, i zamkniemy tę drogę.

OLS chroni dokładnie te kolumny, które wskażesz. W tabeli faktów Nordvelli marża to wartość netto transakcji minus koszt własny, a obie te kolumny rola Sprzedawca nadal widzi. Sprawdź to pod rolą:

// Czy rola Sprzedawca odtworzy marżę z innych kolumn?
EVALUATE
ROW (
    "Sprzedaż", [Łączna sprzedaż],
    "Wartość minus koszt",
        SUMX (
            FaktSprzedaz,
            FaktSprzedaz[WartoscNetto] - FaktSprzedaz[KosztWlasny]
        ),
    "Marża katalogowa", [Marża katalogowa]
)
Widok zapytań DAX pod rolą Sprzedawca: sprzedaż 467775009,17, wartość minus koszt 77028109,17 i marża katalogowa 72287835
Pod rolą Sprzedawca: sprzedaż 467 775 009,17 zł, wartość minus koszt 77 028 109,17 zł i marża katalogowa 72 287 835 zł. Kolumna MarzaNetto jest schowana, a marżę i tak widać.

Bez roli miara Łączna marża daje 76 974 181,16 zł. Wyliczenie z kosztu różni się o 53 928,01 zł, czyli o 0,07%. Różnica bierze się stąd, że KosztWlasny jest zaokrąglony do pełnych złotych: na pojedynczej transakcji to najwyżej 0,99 zł, średnio 0,50 zł. Dla sprzedawcy to ta sama informacja, którą chcieliśmy schować. Drugą drogą jest miara Marża katalogowa, która liczy z kolumny DimProdukty[MarzaNetto], czyli z marży z cennika.

Dlatego OLS na jednej kolumnie to dopiero demonstracja mechanizmu. W prawdziwym modelu chronisz wszystkie kolumny, z których da się policzyć ukrywaną wartość. W Nordvelli są to cztery kolumny:

KolumnaDlaczego ją chronimy
FaktSprzedaz[MarzaNetto]marża z każdej transakcji, czyli sama chroniona wartość
FaktSprzedaz[KosztWlasny]WartoscNetto minus KosztWlasny daje marżę z dokładnością do złotówki
DimProdukty[MarzaNetto]marża katalogowa produktu w złotych; razem z ilością daje marżę katalogową 72,29 mln zł
DimProdukty[MarzaProc]marża katalogowa produktu w procentach

Kolumny planu, FaktBudzet[BudzetMarzy] i FaktBudzet[BudzetKosztow], zostawiliśmy widoczne. To plan, a nie wynik, a to, czy plan marży ma widzieć sprzedawca, decyduje firma, nie model.

Zanim zmienisz cokolwiek w Tabular Editorze, kliknij w Desktopie Zatrzymaj wyświetlanie. Zmiana modelu przy włączonym podglądzie roli kończy się komunikatem, że bieżąca sesja nie jest już prawidłowa. Potem w Tabular Editorze wpisz w filtrze Koszt, zaznacz kolumnę KosztWlasny pod FaktSprzedaz i ustaw dla roli Sprzedawca wartość None, tak samo jak przy marży.

Tabular Editor z filtrem Koszt: zaznaczona kolumna FaktSprzedaz KosztWlasny, Object Level Security z rolą Sprzedawca ustawioną na None
Filtr Koszt znajduje też kolumnę planu FaktBudzet[BudzetKosztow] i tabelę Podwyżka kosztów. Zabezpieczamy tylko KosztWlasny z FaktSprzedaz.

Następnie wpisz w filtrze Marza i ustaw None dla roli Sprzedawca na kolumnach MarzaNetto i MarzaProc pod DimProdukty. Każdą kolumnę ustawiasz osobno: gdy zaznaczysz dwie kolumny naraz, pole Object Level Security jest puste i nie da się go rozwinąć. Na koniec Ctrl+S w Tabular Editorze i Ctrl+S w Desktopie.

Włącz ponownie Wyświetl jako z rolą Sprzedawca i uruchom tę część zapytania, która liczyła marżę z kosztu:

// Czy rola Sprzedawca odtworzy marżę z innych kolumn?
EVALUATE
ROW (
    "Wartość minus koszt",
        SUMX (
            FaktSprzedaz,
            FaktSprzedaz[WartoscNetto] - FaktSprzedaz[KosztWlasny]
        )
)
Widok zapytań DAX pod rolą Sprzedawca po zabezpieczeniu kosztu: błąd, nie można odnaleźć kolumny KosztWlasny w tabeli FaktSprzedaz
Teraz zapytanie kończy się błędem: Nie można odnaleźć kolumny „KosztWlasny” w tabeli „FaktSprzedaz” lub nie można jej użyć w tym wyrażeniu. Pełne zapytanie z poprzedniego kroku też się nie wykona, bo dla roli zniknęła również miara Marża katalogowa.

Ceną są kolejne wyłączone wizualizacje. Miary liczone z zabezpieczonych kolumn, bezpośrednio albo przez inne miary, przestają działać dla roli. W modelu Nordvelli jest ich jedenaście:

MiaraDlaczego przestaje działać
Łączna marżaSUM z FaktSprzedaz[MarzaNetto]
Marża % i Marża % (VAR)liczą z Łącznej marży albo wprost z MarzaNetto
Ocena Marzykorzysta z miary Marża %
Marża katalogowa, Marża katalogowa % i Marża katalogowa bez VARliczą z DimProdukty[MarzaNetto]
Marża jednostkowa przy cenie testowejkorzysta z DimProdukty[MarzaNetto]
Marża po rabaciekorzysta z FaktSprzedaz[KosztWlasny]
Marża proc po rabacie i Ocena scenariuszaliczą z Marży po rabacie

W pliku kursu te miary są na stronach Dashboard, Strona 5, Strona 7, Strona 8, Iteratory i Wydajność miar, a kolumnę MarzaNetto wprost wykorzystuje wizualizacja R na stronie Python i R. W prawdziwym wdrożeniu sprzedawcy dostają osobny raport na tym samym modelu, zbudowany bez tych miar, żeby nikt nie zaczynał dnia od komunikatów o błędach.

RLS i OLS dla jednej osoby: tylko w jednej roli

Sprzedawca z regionu Południe ma widzieć tylko swój region i nie widzieć marży. Pierwszy odruch to przypisać go do dwóch ról: Region Południe z lekcji 21 i Sprzedawca. Sprawdź to w Wyświetl jako, zaznaczając obie role naraz:

Komunikat Power BI Desktop Nie można wyświetlić jako wybrane role: nie można łączyć zabezpieczeń na poziomie wiersza i obiektu z różnych ról
Power BI odmawia: Wybrana kombinacja ról nie jest obsługiwana, ponieważ nie można łączyć zabezpieczeń na poziomie wiersza i zabezpieczeń na poziomie obiektu z różnych ról. Dwie role z samym RLS łączą się bez problemu, co pokazaliśmy w lekcji 21.

Rozwiązaniem jest jedna rola, która ma i filtr wierszy, i OLS. Załóż w oknie Zarządzaj rolami rolę Sprzedawca Południe z regułą na tabeli DimSklepy (w edytorze DAX okna ról):

[Region] == "Południe"

Potem w Tabular Editorze ustaw dla niej None na tych samych czterech kolumnach co dla roli Sprzedawca. My sprawdziliśmy taką rolę z OLS na kolumnie MarzaNetto:

Strona Dashboard w trybie Wyświetl jako rola Sprzedawca Południe: sprzedaż 83 mln zł regionu Południe, karta marży i tabela z błędem
Jedna rola, dwa zabezpieczenia. Filtr wierszy ogranicza sprzedaż do regionu Południe (83 mln zł, tyle samo co rola Region Południe z lekcji 21), a OLS wyłącza marżę. Tej roli nie zapisaliśmy w pliku do pobrania; dodaj ją sam, jeśli chcesz przećwiczyć ten wariant.

Etykiety poufności i wyszarzony przycisk Poufność

Trzecia warstwa to etykieta poufności, czyli oznaczenie całego pliku, na przykład Poufne albo Tylko do użytku wewnętrznego. Etykietę nadaje się na karcie Narzędzia główne przyciskiem Poufność. Jest spora szansa, że u siebie zobaczysz go wyszarzonego, tak jak my:

Wstążka Narzędzia główne w Power BI Desktop z wyszarzonym przyciskiem Poufność w grupie Poufność
Przycisk Poufność w grupie o tej samej nazwie jest nieaktywny. To nie usterka Power BI, tylko stan organizacji: etykiet nie ma albo nie są dostępne dla Twojego konta. Ramkę dodaliśmy my.

Przycisk ożyje dopiero wtedy, gdy organizacja zrobi dwie rzeczy po stronie administracji. Pierwsza: administrator Microsoft 365 tworzy etykiety w portalu Microsoft Purview i publikuje je zasadą dla użytkowników. W naszym środowisku demonstracyjnym lista etykiet jest pusta:

Portal Microsoft Purview, Ochrona informacji, Etykiety poufności: lista pusta, liczba elementów 0, przyciski Utwórz etykietę i Opublikuj etykiety
Microsoft Purview, Ochrona informacji, Etykiety poufności: Liczba elementów: 0. Przyciski Utwórz etykietę i Opublikuj etykiety to dwa kroki, od których zaczyna się cała konfiguracja.

Druga: administrator Power BI włącza w portalu administracyjnym, w Ustawieniach dzierżawy, w sekcji Ochrona informacji, ustawienie Zezwalaj użytkownikom na stosowanie etykiet poufności dla zawartości. Można je włączyć dla całej organizacji albo dla wybranych grup.

Portal administracyjny Power BI, Ustawienia dzierżawy, Ochrona informacji: ustawienie Zezwalaj użytkownikom na stosowanie etykiet poufności dla zawartości wyłączone
Ustawienie jest wyłączone dla całej organizacji. Opis przypomina, że etykiety pochodzą z Microsoft Purview Information Protection i że przed włączeniem trzeba wykonać kroki wstępne.

Dopiero po obu krokach przycisk Poufność pokaże listę etykiet. Nadana etykieta zostaje w pliku .pbix i przechodzi na pliki Excela, PowerPointa i PDF eksportowane z raportu, zgodnie z opisem tego ustawienia. Dlatego na pytanie, czemu nie da się nadać etykiety, odpowiedź prawie nigdy nie leży w samym Desktopie. W pliku do pobrania etykiety nie ma.

Podsumowanie i lista kontrolna

W modelu jest teraz szósta rola, Sprzedawca, i cztery kolumny, które dla niej nie istnieją. Całość widać w drzewie Tabular Editora: pod rolą są dwie pozycje, FaktSprzedaz i DimProdukty, czyli tabele, w których rola ma ustawienia kolumn.

Tabular Editor: gałąź Roles z sześcioma rolami, pod rolą Sprzedawca pozycje FaktSprzedaz i DimProdukty, w panelu właściwości Members 0 i Model Permission Read
Rola jest częścią modelu, tak jak tabele i relacje, więc zabezpieczenie jedzie razem z plikiem do usługi Power BI. Licznik Table Permissions: OLS enabled on 0 out of 18 tables liczy tylko OLS na całych tabelach, a nasze zabezpieczenie dotyczy kolumn. Members 0, bo osoby przypisuje się do ról dopiero po publikacji.

Lista kontrolna przed publikacją modelu z OLS:

  • każda rola z OLS sprawdzona w Wyświetl jako, strona po stronie;
  • zapytanie DAX pod rolą próbuje odtworzyć chronioną wartość z pozostałych kolumn i kończy się błędem;
  • raport dla roli nie korzysta z miar opartych na zabezpieczonych kolumnach;
  • osoba, która ma mieć filtr wierszy i OLS, ma jedną rolę z oboma zabezpieczeniami;
  • plik zapisany w Desktopie po zmianach z Tabular Editora.

Osoby przypisuje się do ról w usłudze Power BI, na stronie Zabezpieczenia modelu, tak jak w lekcji 21. W następnym rozdziale publikujemy raport w usłudze Power BI: obszary robocze, aplikacje i udostępnianie.

✕

Najczęściej zadawane pytania

Czym różni się OLS od RLS w Power BI?
RLS (zabezpieczenia na poziomie wiersza) ogranicza wiersze: rola widzi wszystkie kolumny, ale tylko część danych, na przykład jeden region. OLS (zabezpieczenia na poziomie obiektu) ogranicza kolumny i tabele: dla roli wskazana kolumna nie istnieje, więc zapytania, miary i wizualizacje, które z niej korzystają, kończą się błędem. Oba mechanizmy ustawia się w modelu, dla konkretnej roli.
Czy ukrycie kolumny w Power BI zabezpiecza dane?
Nie. Ukryta kolumna znika tylko z listy pól. Zapytanie DAX nadal zwraca jej wartości, także pod rolą, a miary dalej z niej liczą. Zabezpieczeniem jest dopiero OLS z wartością None dla roli.
Jaki błąd pokazuje Power BI, gdy rola nie ma dostępu do kolumny?
Zależy od wizualizacji. Karta i tabela pokazują komunikat Wystąpił problem z co najmniej jednym polem, a w szczegółach nazwę pola i kod Missing_References. Drzewo dekompozycji pokazuje mylący komunikat, że podziały sztucznej inteligencji są nieobsługiwane (DecompositionTree_AnalysisUnsupported_Description). Zapytanie DAX zwraca błąd, że kolumna nie istnieje. Gdy wizualizacja działa u Ciebie, a u kogoś nie, zacznij od Wyświetl jako z jego rolą.
Dlaczego OLS na jednej kolumnie nie wystarczy?
Bo poufną wartość często da się wyliczyć z innych kolumn. W modelu Nordvelli rola bez dostępu do MarzaNetto policzyła marżę jako WartoscNetto minus KosztWlasny: 77 028 109,17 zł wobec 76 974 181,16 zł, czyli z dokładnością do złotówki na transakcji. Zabezpiecz także kolumny, z których da się policzyć chronioną wartość, i sprawdź to zapytaniem DAX pod rolą.
Czy jedna osoba może mieć jednocześnie RLS i OLS?
Tak, ale w jednej roli. Power BI Desktop odmawia podglądu dwóch ról, z których jedna ma filtr wierszy, a druga OLS, bo nie można łączyć zabezpieczeń na poziomie wiersza i obiektu z różnych ról. Jedna rola z filtrem regionu i OLS na marży działa: pokazuje sprzedaż regionu i błąd na karcie marży.
Dlaczego przycisk Poufność w Power BI Desktop jest nieaktywny?
Etykiety poufności tworzy administrator w Microsoft Purview i publikuje je dla użytkowników, a w portalu administracyjnym Power BI musi być włączone ustawienie Zezwalaj użytkownikom na stosowanie etykiet poufności dla zawartości. Dopóki organizacja tego nie zrobi, przycisk Poufność jest wyszarzony i w samym Desktopie nic tego nie zmieni.

Komentarze (0)

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

Brak komentarzy...