Row-level security en security filtering behavior
Met row-level security kan eenvoudig op data gebaseerde filtering worden toegevoegd aan een semantisch model. Door gebruik te maken van de gebruikersnaam van de ingelogde gebruiker kan dit ook dynamisch worden gemaakt. Hier is natuurlijk al veel over geschreven. Laatst werd me echter gevraagd om de security zo in te richten dat men op een hoger niveau altijd alle data mocht zien, maar alleen de detail informatie van het eigen team of afdeling. Ter verduidelijking: Op hoofdniveau mag men alle omzet zien, maar op detailniveau alleen de klanten van Nederland.

Wat is RLS
Rol-level security is het filteren van de data op basis van bepaalde security regels. Dit wordt binnen Power BI vaak toegepast door middel van het definiëren van verschillende rollen. Binnen deze rollen kan de data dan gefilterd worden. Men mag alleen data zien van een bepaald bedrijf, een bepaald land of een bepaalde Business Unit. Door deze security afhankelijk te maken van de gebruiker kan het onderhoud en de hoeveelheid rollen sterk worden verminderd.
Security filtering behavior
De manier waarop de security wordt geïnterpreteerd door het model kan beïnvloed worden met de setting "security filtering behavior". Deze setting kan per relatie worden ingesteld. Door middel van scripting kan dit eventueel worden geautomatiseerd. In de basis zijn er 3 instellingen mogelijk:
- OneDirection
De records die zijn gefilterd aan de "To" kant van de relatie filteren automatisch de records aan de "From" kant - BothDirections
De filtering aan beide kanten van de relatie heeft invloed op de filtering aan de andere kant. - None
Er vindt geen filtering plaats aan beide kanten van de relatie.
Als voorbeeld heb ik een model genomen met dynamische filtering op het land van de klant. De row-level filtering is ingesteld op de klanttabel. De testgebruiker heeft alleen toegang tot de klanten in Nederland. De overige klanten mag deze gebruiker niet zien.

OneDirection
De standaard instelling voor de security setting is "OneDirection". Dit betekent dus dat de klanttabel wordt gefilterd op de klanten in Nederland. De relatie ligt vanaf de feitentabel (omzet) naar de klant. Dus de feiten tabel wordt ook gefilterd op de klanten uit Nederland. De omzet die getoond wordt in de verschillende tabellen is dus alleen de omzet ven Nederland. De filtering werkt alleen op de relaties met de klanttabel, dus de slicer met functies van contactpersonen wordt niet gefilterd.
BothDirections
Door de setting "BothDirections" te gebruiken worden de tabellen aan beide kanten van een relatie gefilterd. De relatie tussen de feitentabel en de klantentabel wordt met RLS aan de "To" kant al gefilterd. Deze relatie hoeft dus niet op "BothDirections" te worden gezet. Als we echter de relatie tussen de feitentabel en de contacttabel op "BothDirections" zetten zien we dat ook de slicer op de functie van de klant wordt gefilterd. De gebruiker ziet nu dus ook alleen nog maar contacten gerelateerd aan Nederlandse klanten.


None
Door de security setting op "None" te zetten wordt er dus niet meer gefilterd door middel van een relatie. Omdat de row-level security op de klanttabel staat kan men in de feitentabel dus de volledige omzet zien, maar zodra deze op klantniveau wordt bekeken ziet men alleen Nederland. Op deze manier kan er dus voor worden gezorgd dat de volledige cijfers wel op hoofdniveau te raadplegen zijn, maar niet op detailniveau.
Security testen
Met de Power BI service kan de security eenvoudig worden getest. Daarover kan je meer lezen in een eerdere blog die ik geschreven heb. https://www.ensior.com/actueel/blogs/1566-security-in-de-power-bi-service Inmiddels is het testen van de security iets aangepast. Tegenwoordig kan er ook geschakeld worden tussen rapporten bij het testen van de rol als een bepaalde gebruiker. De rapporten moeten dan wel in dezelfde werkruimte staan.
Conclusie
Door met de verschillende security parameters te spelen kan de filtering volledig naar eigen hand worden ingeregeld. Vaak voldoet de standaard filtering al voor de meeste behoeftes, maar indien nodig kan dit gedrag worden aangepast. Vooral voor het verbergen van bepaalde detail informatie kan dit erg handig zijn.