Apache Iceberg
Apache Iceberg is een open tabelformaat voor grote analytische datasets op object storage. Het transformeert een map met Parquet-bestanden i...
Lees meerRow Level Security zorgt ervoor dat gebruikers enkel die rijen van je dataset zien waarvoor ze rechten hebben. Het is een simpele manier om één dataset veilig te delen met verschillende teams. Je bepaalt per gebruiker of groep welke data zichtbaar wordt, zonder dat je extra rapporten moet bouwen. Hiermee hou je controle, transparantie en veiligheid in Power BI en Fabric.
Row Level Security (RLS) is een manier om gegevens te beperken tot de rijen in je dataset die een gebruiker mag zien. Je kan een rapport bouwen maar iemand die het rapport opent zal enkel de data zien waarvoor hij of zij toegang heeft.
Het principe is eenvoudig. Je hebt één centrale dataset. Gebruikers zien elk hun eigen deel. Een verkoper ziet enkel de klanten van zijn zone. Een filiaalmanager ziet enkel de cijfers uit zijn eigen winkel. De directie ziet alles. RLS bepaalt dat automatisch op basis van de identiteit van de gebruiker.
RLS werkt door rollen en filters te combineren. In elke rol leg je vast welke rijen toegelaten zijn. Dat gebeurt met een DAX-filter, meestal op een dimensietabel zoals regio, filiaal of klant. De relatie naar de facttabellen zorgt ervoor dat het filter verder doorstroomt naar alle cijfers.
Als je geen RLS gebruikt, moet je vaak aparte rapporten maken voor elke afdeling. Dat geeft meer werk en meer risico op fouten. Met RLS hou je alles centraal en blijft het model overzichtelijk. Nu bouw je eigenlijk één template en iedereeijnnlijk rapport.
Een herkenbaar voorbeeld is een KMO met meerdere magazijnen. De onderneming wil één rapport voor voorraad en bestellingen. Dankzij Row Level Security krijgt elk magazijn alleen zijn eigen producten en transacties te zien. Het model is hetzelfde voor iedereen, maar de zichtbare rijen verschillen per gebruiker.
Row Level Security helpt je om betrouwbare rapporten te delen zonder dat gevoelige gegevens zichtbaar worden voor de verkeerde personen. Je hoeft geen aparte datasets of kopieën te maken voor verschillende teams. Eén goed model volstaat voor iedereen. Dat maakt beheer eenvoudiger en vermindert de kans op fouten.
Voor veel KMO’s is dit een groot voordeel. Denk aan een bedrijf met verschillende winkels. Je wil dat elke winkelmanager zijn eigen omzet bekijkt, maar niet die van de andere winkels. Tegelijk wil je dat de directie het totaaloverzicht behoudt. Met RLS regel je dat netjes zonder extra werk.
RLS ondersteunt ook privacyregels en interne afspraken. Afdelingen zoals HR, finance en sales hebben niet altijd dezelfde rechten nodig. Door RLS te gebruiken, toon je alleen de rijen die passen bij hun rol. Dat verhoogt het vertrouwen in het rapport en zorgt ervoor dat je geen gegevens lekt.
Een bijkomend voordeel is dat je geen technische kopieën van het datamodel moet aanmaken. Minder modellen betekent minder onderhoud. Als je bron wijzigt, hoeft dat maar op één plek aangepast te worden. Dat maakt je rapportage stabieler en beter schaalbaar.
Row Level Security werkt met rollen en filters. Een rol bevat de regels die bepalen welke rijen zichtbaar zijn. Het filter zelf is een DAX-expressie die je meestal plaatst op een dimensietabel. Denk aan tabellen zoals regio, filiaal of klant. De relaties in het model zorgen ervoor dat het filter automatisch doorloopt naar de facttabellen.
De gebruiker wordt herkend via USERPRINCIPALNAME(). Dat is meestal het e-mailadres waarmee iemand inlogt in Power BI of Fabric. Die waarde gebruik je om te bepalen welke rijen mogen blijven en welke niet. Zo kan je per persoon, team of Entra groep de juiste subset tonen.
In Power BI Desktop maak je rollen aan in het model. In de Power BI Service en Fabric worden die rollen toegepast zodra iemand het rapport opent of verbinding maakt met het semantisch model. Het werkt dus even goed voor visuele rapporten als voor connecties via Excel of externe tools. Zo hou je de beveiliging centraal en consistent.
Er zijn verschillende manieren om RLS in te richten. Elke aanpak heeft zijn eigen voordelen afhankelijk van hoe je organisatie werkt. Hieronder vind je de meest gebruikte patronen. Ze bouwen allemaal verder op hetzelfde idee: filter op een dimensie en gebruik de relaties in het model om de rest te beveiligen / filteren.
Bij statische RLS leg je in de rol zelf vast welke waarde zichtbaar is. Dit is handig als je een vaste groep hebt met steeds dezelfde toegang.
Voorbeeld:
'DimRegio'[Regio] = "Vlaanderen"Deze rol toont enkel de rijen voor Vlaanderen.
Geschikt voor kleine modellen of tijdelijke scenario’s.
Bij dynamische RLS geef je elke gebruiker zijn toegangsrechten in een aparte tabel. In plaats van gebruikers manueel toe te wijzen aan bepaalde groepen zorg je ervoor dat dit dyna;msch gebeurt op basis van op basis van de username. Je filtert op basis van USERPRINCIPALNAME().
Voorbeeld van een rol:
'DimRegio'[Regio] IN
CALCULATETABLE(
VALUES('UserRegion'[Regio]),
'UserRegion'[Email] = USERPRINCIPALNAME()
)In dit voorbeeld heb je een tabel 'UserRegion' nodig. Die bevat per gebruiker de regio’s waarvoor hij toegang heeft. Zo heeft Ava hier toegang tot de regio's Antwerpen en Vlaams-Brabant. Bob heeft enkel toegang tot Antwerpen. In een kleine omgeving kan je rechten beheren in een simpele Excel en die inladen als je basis voor Row Level Security. Vaak komen de rechten echter uit een andere applicatie of uit Entra AD. Op die manier kan je gebruikers beheren in een andere applicatie en de rechten laten doorstromen naar Power Bi en Microsoft Fabric.
|-------------------|-------------------|
| Email | Region |
|-------------------|-------------------|
| ava@datapanda.eu | Antwerpen |
| ava@datapanda.eu | Vlaams-Brabant |
| bob@datapanda.eu | Antwerpen |
|-------------------|-------------------|Er is meestal geen directe relatie nodig tussen 'UserRegion' en 'DimRegio'. De DAX-filter doet dat werk.
Dynamische RLS werkt goed voor grotere groepen en organisaties waar rechten vaak wijzigen.
Hiërarchische RLS gebruik je wanneer iemand niet alleen zijn eigen gegevens mag zien, maar ook die van iedereen onder hem. Denk aan een teamleider die zijn teamleden mag zien, maar niet de teams van andere leidinggevenden. Of een regiomanager die alle provincies in zijn regio mag bekijken. Het model volgt de boomstructuur van je organisatie en geeft op basis daarvan toegang.
Wat heb je nodig in het model?
Je hebt een tabel zoals 'DimEmployee' met minstens:
[EmployeeID]
[ManagerID]
[Email]
Daarmee kan je een hiërarchische lijn opbouwen. In Power BI maak je vervolgens een berekende kolom met PATH(). Die functie maakt een soort spoor van medewerker naar zijn managers of omgekeerd.
Voorbeeld:
Path = PATH('DimEmployee'[EmployeeID], 'DimEmployee'[ManagerID])Gebruik de DAX PATH() functie in een calculated column. Nu heeft elke rij een volledig pad van boven naar beneden in de structuur.
Vervolgens maak je een RLS rol aan met deze filter:
VAR MeID =
LOOKUPVALUE(
'DimEmployee'[EmployeeID],
'DimEmployee'[Email], USERPRINCIPALNAME()
)
RETURN
PATHCONTAINS('DimEmployee'[Path], MeID)Met deze DAX krijgt een gebruiker toegang tot zichzelf (zijn eigen EmployeeID) en iedereen waarvan zijn ID voorkomt in het pad. Dus je ziet je eigen rijen plus alles wat onder je hangt.
Stel dat je een verkoopafdeling hebt met drie niveaus:
Sales Director
Regiomanagers
Verkopers
Een verkoper ziet enkel zijn eigen gegevens.
Een regiomanager ziet zichzelf én alle verkopers in zijn regio.
De Sales Director ziet het volledige team.
Je hoeft geen aparte rollen te maken voor elk niveau. Het pad bepaalt automatisch wie welke rijen krijgt.
Een goed RLS-model werkt pas echt als je het makkelijk kan beheren. Hoe meer gebruikers en rollen je hebt, hoe belangrijker het wordt om alles overzichtelijk te houden. Hieronder vind je de meest praktische manieren om je RLS-structuur proper te organiseren en te controleren, zowel in Power BI als in Fabric.
Het maakt niet uit of je rechten op basis van regio, klant, filiaal of tenant beheert. Gebruik altijd één security-tabel per domein, of combineer alles in een bredere tabel zoals UserAccess.
Voorbeeldkolommen:
[Email]
[Sleutel] (bijv. Regio, Klant, Tenant, Filiaal)
optioneel: [RoleType] of [AccessLevel]
Voordeel: je beheert rechten op één plek. Je hoeft nooit DAX of rollen aan te passen in het model. Je past gewoon de security-tabel aan en publiceert opnieuw.
In Power BI Desktop zie je alle rollen via Modeling → Manage roles. Leg die vast in een intern document of wiki. Beschrijf:
welke tabellen gefilterd worden
welke kolommen gebruikt worden
welke DAX-logica erachter zit
welke security-bron de tabel voedt
Bij grote modellen maakt dit het leven van beheerders veel makkelijker.
Via het XMLA-endpoint kan je alle rollen en DAX-filters uitlezen. Dat kan met PowerShell, SSMS of Tabular Editor.
Je kan bijvoorbeeld dagelijks een export draaien en opslaan in een Git-repo. Zo zie je elke wijziging en kan je RLS-drift opsporen.
Voorbeeldcontrole:
rol zonder leden
tabel zonder filter
filter die TRUE() of leeg is
externe domeinen in e-mailadressen
dubbele of tegenstrijdige regels
Zo bouw je een basis voor audit en compliance.
Via XMLA kan je een RLS dashboard bouwen om de rechten op je verschillende datamodellen centraal op te volgen.
Met Tabular Editor kan je rollen sneller bekijken en aanpassen. Je ziet alle filters in één overzicht en kan DAX makkelijk kopiëren of herwerken. Je kan ook scripts maken om rollen te exporteren, na te kijken of automatisch te genereren.
Voordeel: je behandelt RLS meer als “code”, wat goed werkt bij grotere modellen.
In Power BI Desktop gebruik je View as om te testen hoe een rol zich gedraagt.
Test minstens drie scenario’s:
gebruiker met één waarde
gebruiker met meerdere waarden
gebruiker die niet in de security-tabel zit
Bekijk telkens of alle gevoelige tabellen goed worden gefilterd en of de rijen kloppen. Voeg ook een testgebruiker toe die helemaal niets mag zien, zodat je zeker bent dat RLS geen data lekt.
RLS werkt alleen zoals bedoeld wanneer gebruikers Viewer zijn.
Contributors, Members of Admins omzeilen RLS altijd. Documenteer dit duidelijk en zorg dat gebruikers de juiste rechten krijgen op workspaces en apps.
Met Power Automate, Azure Functions of Fabric pipelines kan je de security-tabel automatisch voeden vanuit een HR-systeem, CRM of Entra AD. Zo vermijd je handmatige fouten.
Combineer dat met een automatische refresh van je dataset, en je RLS is altijd up-to-date.
De beste modellen hebben een fallback: een standaardrol of expliciete “geen toegang”-logica voor gebruikers die niet in de security-tabel staan. Zo behandelen rapporten die gevallen veilig, zonder onverwachte resultaten.
Een RLS-model moet je niet alleen configureren, maar ook bewijzen dat het goed werkt. Testen is dus even belangrijk als het bouwen zelf. Je wil zeker zijn dat gebruikers enkel zien wat ze mogen zien, ook wanneer ze verbinding maken via Excel, Analyze in Excel of rechtstreeks op het semantisch model in Fabric. Hieronder vind je de meest praktische manieren om RLS betrouwbaar te testen.
Dit is de snelste manier om te controleren of je filters juist zitten.
Ga naar Modeling → View as.
Kies de rol die je wil testen.
Bekijk of de rijen in je rapport kloppen.
Test ook gebruikers die niet voorkomen in de security-tabel.
Gebruik tijdens het testen een paar eenvoudige visuals:
een kaart met COUNTROWS() van je belangrijkste facttabellen
een tabel met alle toegestane waarden (regio’s, klanten, filialen)
een measure die het e-mailadres toont:
Gebruiker = USERPRINCIPALNAME()Zo zie je meteen welke filter actief is.
Desktop is handig, maar in de Service werkt USERPRINCIPALNAME() altijd correct. Daarom moet je de rollen ook testen met echte gebruikers of testaccounts.
Publiceer het model
Deel het rapport met een testgebruiker
Geef die gebruiker Viewer-rechten
Laat hem het rapport openen en bevestigen of de data klopt
Zo weet je zeker dat RLS ook werkt in dashboards, apps en gedeelde rapporten.
Gebruikers kunnen in Excel of externe tools verbinden met je dataset. RLS moet ook daar actief blijven.
Test dus:
Analyze in Excel
Get Data → Power BI Dataset in Excel
Query via Fabric semantisch model
Controleer of dezelfde aantallen en dezelfde toegestane rijen zichtbaar zijn. Als iemand via Excel meer ziet dan in Power BI, zit er een probleem in rollen of workspace-rechten.
Soms ziet de data er afgeschremd uit in een Power Bi rapport maar heeft een gebruiker achterliggend toch meer toegang tot de data dan je zou denken.
Via het XMLA-endpoint kan je dezelfde test automatiseren. Dit is handig voor grotere modellen. Je stuurt een query uit die telt hoeveel rijen iemand ziet.
Voorbeeld:
EVALUATE
ROW(
"User", USERPRINCIPALNAME(),
"RijenDimKlant", COUNTROWS('DimKlant'),
"RijenFactSales", COUNTROWS('FactSales')
)
Je voert deze query uit voor elke rol of gebruiker. Zo krijg je harde cijfers waarmee je kan bevestigen dat filters goed doorkomen.
Bij organisaties met een sterke nood aan data governance kan een automatisch test systeem via XMLA queries helpen om de compliance op een hoog niveau te houden zonder een al te zare last voor IT. Je kan dit best wel zo vroeg mogelijk in het ontwikkelproces beginnen implementeren zodat je niets vergeet te testen.
Sommige tabellen zijn gevoeliger dan andere, zoals personeelsgegevens, klantenlijsten of financiële info. Controleer voor deze tabellen extra grondig:
zijn alle rijen netjes beperkt?
zijn er geen lege filters of onbedoeld brede filters?
staan deze tabellen in de juiste relatie met de dimensies waarop RLS zit?
Een kleine fout kan hier snel tot datalekken leiden.
Als je ook Object Level Security toepast, moet je beide samen testen.
Kan een gebruiker een kolom zien die verborgen moest blijven?
Kunnen gebruikers via Excel kolommen opvragen die niet zichtbaar mogen zijn?
Is er overlap tussen rollen die onverwachte toegang geeft?
RLS en OLS zijn aparte lagen. Test ze altijd allebei.
Elke RLS-setup moet duidelijk gedrag hebben voor “vergeten” gebruikers.
Test minstens:
gebruiker wel in security-tabel → krijgt juiste subset
gebruiker met meerdere rijen → krijgt gecombineerde subset
gebruiker zonder match → moet niets of een lege dataset zien
Zo vermijd je verrassingen wanneer nieuwe collega’s of externe partners toegang krijgen.
Row Level Security en Object Level Security vullen elkaar mooi aan. RLS bepaalt welke rijen een gebruiker mag zien. OLS bepaalt welke kolommen of volledige tabellen zichtbaar zijn. Samen zorgen ze voor een veilige en duidelijke scheiding tussen verschillende gebruikersgroepen. RLS alone is vaak niet genoeg, zeker wanneer er persoonsgegevens of financiële gegevens in het model zitten.
RLS filtert de data binnen een tabel. Je beperkt dus de rijen op basis van een waarde zoals regio, klant, filiaal of medewerker. Een verkoper ziet alleen zijn eigen klanten. Een filiaalmanager ziet de cijfers van zijn winkel. De directie ziet alle rijen.
RLS werkt in DAX met filters zoals:
'DimRegio'[Regio] IN
CALCULATETABLE(
VALUES('UserRegion'[Regio]),
'UserRegion'[Email] = USERPRINCIPALNAME()
)
De filter bepaalt welke rijen overblijven zodra iemand het rapport opent.
OLS verbergt volledige objecten: kolommen of tabellen. Dat gebeurt niet met DAX, maar via de metadata van het model.
Enkele voorbeelden:
kolom [Loon] enkel zichtbaar voor HR
kolom [Email] verbergen voor externe partners
volledige tabel DimPersoon alleen tonen aan de directie
Als een kolom verborgen is via OLS, dan kan die zelfs niet rechtstreeks opgevraagd worden via Excel, DAX Studio of het XMLA-endpoint. Dat is een belangrijke extra beveiligingslaag.
Gebruik RLS wanneer gebruikers dezelfde kolommen mogen zien, maar niet dezelfde rijen. Bijvoorbeeld:
verkopers met toegang tot hun regio
klanten die enkel hun eigen data mogen bekijken
werknemers die enkel hun teamrapporten zien
RLS is ideaal om data op te splitsen op basis van een sleutel zoals regio of klant.
Gebruik OLS wanneer een deel van je data te gevoelig is om breed te tonen. Denk aan:
loongegevens
rijksregisternummer
medische info
persoonlijke adressen
of kolommen die je liever intern houdt
Met OLS verberg je die kolommen volledig. Gebruikers weten zelfs niet dat ze bestaan.
De sterke combinatie is als volgt:
RLS bepaalt welke rijen zichtbaar zijn.
OLS bepaalt welke kolommen überhaupt bestaan voor die rol.
Voorbeeld:
Een manager mag de rijen van zijn team zien, maar niet de kolom [Loon].
RLS filtert het team.
OLS verbergt de kolom.
Zo krijgt de manager alleen de info die hij echt nodig heeft.
Een KMO met tien teams wil één HR-rapport gebruiken voor alle medewerkers.
HR ziet alles: alle rijen en alle kolommen.
Teamleiders zien alleen rijen van hun team (RLS).
Teamleiders mogen geen loongegevens zien, dus [Loon] wordt verborgen via OLS.
Externe consultants mogen enkel anonieme gegevens zien. Voor hen worden kolommen zoals [Naam] en [Email] verborgen via OLS.
Resultaat: één dataset, drie types gebruikers, allemaal veilig.
Een goed RLS-model blijft alleen betrouwbaar als je het slim opbouwt en beheert. Hieronder vind je praktische richtlijnen die ervoor zorgen dat je RLS duidelijk, stabiel en eenvoudig te onderhouden blijft. Ze werken voor zowel Power BI als Fabric en passen bij kleine en grote organisaties.
In plaats van individuele e-mailadressen te beheren, kan je beter werken met Entra Security Groups. Je maakt per groep een duidelijke naam, zoals RLS_Sales_Vlaanderen of RLS_KlantA.
Voordelen:
beheer gebeurt in Entra, niet in Power BI of Fabric
nieuwe gebruikers krijgen automatisch de juiste rechten
minder risico op fouten
Let op dat je echte Security Groups gebruikt, geen Microsoft 365-groepen met mailbox.
Gebruik een tabel zoals UserAccess, UserRegion of TenantMap om rechten te bepalen. Dat werkt goed voor scenario’s waar gebruikers vaak veranderen of waar je verschillende sleutels tegelijk wil beheren.
Deze aanpak maakt RLS flexibel: je past enkel de tabel aan en niet het model zelf.
Plaats RLS altijd op een dimensietabel, niet op facttabellen. De relaties naar de feiten zorgen voor de rest van de filtering. Dit maakt je DAX eenvoudiger en vermindert het risico op datalekken.
Vermijd bidirectionele relaties, want die kunnen onverwachte filterpaden creëren..
RLS werkt alleen correct wanneer gebruikers “Viewer” zijn in een workspace of via een app.
Viewer: RLS actief
Member/Contributor: RLS genegeerd
Gebruik dus apps om rapporten te delen met eindgebruikers en vermijd brede rechten op workspaces.
Wanneer je CI/CD gebruikt, voeg je best checks toe:
controleer of elke RLS-rol minstens één filter heeft
controleer of kritieke tabellen een filter of OLS-regel hebben
meld rollen zonder leden of security-tabel met ontbrekende waarden
Zo vermijd je dat verkeerde versies in productie komen.
Hou de RLS-logic zo eenvoudig mogelijk. Gebruik geen zware berekeningen of teksttransformaties in je filter.
Zoiets vermijd je best:
LEFT(UPPER(TRIM('DimRegio'[Regio])), 5) IN ...Werk liever met opgeschoonde kolommen of met een aangepaste tabel in Power Query.
Eenvoudige, rechtstreekse vergelijkingen zijn sneller en veiliger.
Nieuwe medewerkers, consultants of externe partners staan soms nog niet in je security-tabel. Test wat er dan gebeurt.
Beste praktijk: laat zulke gebruikers gewoon geen rijen zien.
Naast de basisprincipes zijn er enkele minder bekende punten die vaak pas naar boven komen in grotere of gevoelige omgevingen. Deze aandachtspunten helpen je om je RLS-model robuust, betrouwbaar en toekomstbestendig te maken. Ze zijn vooral nuttig voor scenario’s waar veel gebruikers, complexe datastromen of hoge beveiligingseisen spelen.
Dataset-eigenaars, workspace-admins en gebruikers met bewerkingsrechten zien altijd alle data. Zij vallen buiten RLS. Zorg er dus voor dat eindgebruikers enkel Viewer zijn, en dat beheerders beperkt blijven tot wie het echt nodig heeft. Documenteer dit duidelijk zodat er geen verwarring ontstaat.
Bij Composite Models geldt RLS alleen voor de geïmporteerde tabellen. Tabelllen die via DirectQuery komen, moeten hun beveiliging uit de bron halen. Als je zowel RLS in Power BI als in de databron gebruikt, moet je controleren dat beide lagen op elkaar aansluiten.
Wanneer meerdere rapporten dezelfde dataset gebruiken, neemt elk rapport automatisch de RLS over. Dit is handig, maar vraagt wel discipline. Als je een belanrijke wijziging in RLS maakt, moet je ook controleren hoe dat invloed heeft op alle rapporten die aan dezelfde dataset hangen.
Sommige rollen kunnen trager zijn, zeker wanneer ze veel toegangsrechten hebben. Gebruik DAX Studio om te zien welke rollen zware query’s veroorzaken.
Tips:
Vermijd functies die kolommen bewerken (zoals UPPER of TRIM) in de RLS-filter
Filter altijd op de sleutelkolom van een dimensie
Hou berekeningen zo licht mogelijk. Als transformaties nodig zijn voer ze dan uit tijdens de data load.
Voor erg gevoelige datasets kan je in de bron zelf extra beperkingen toevoegen, zoals data masking of row filtering in SQL. Zo heb je twee lagen beveiliging: één in Power BI en één in de databron. Dit is vooral nuttig wanneer je rapporten bouwt die extern gedeeld worden.
Behandel RLS als code. In een DevOps-pijplijn kan je scripts laten draaien die controleren of alle RLS-rollen bestaan, of de filters niet leeg zijn en of gevoelige tabellen een juiste regel hebben. Zo vermijd je fouten bij automatische deploys.
Hou een eenvoudig overzicht bij van wijzigingen in RLS:
welke rollen bestaan
welke filters eraan gekoppeld zijn
welke tabellen gevoelig zijn
welke security-tabel als bron gebruikt wordt
Zo voorkom je dat kennis alleen in het hoofd van één beheerder zit.
Bij uitbreidingen van je model moet je RLS mee laten evolueren. Nieuwe tabellen, relaties of dimensies kunnen invloed hebben op bestaande RLS-filters. Maak RLS daarom een onderdeel van je standaard reviewproces wanneer je het datamodel uitbreidt.
Een concreet voorbeeld maakt snel duidelijk hoe RLS er in de praktijk uitziet. Denk aan een KMO met meerdere vestigingen. Het bedrijf wil één centraal Power BI-rapport voor verkoop, voorraad en personeelsinfo. De data zit in één semantisch model in Fabric. Toch mogen niet alle gebruikers alles zien. Elke filiaalmanager mag enkel zijn eigen winkel zien, accountmanagers mogen enkel hun eigen klanten zien en het hoofdkantoor moet het volledige overzicht behouden.
Het bedrijf werkt met drie belangrijke dimensies:
DimStore met alle winkels en hun StoreID
DimCustomer met klanten per regio
DimEmployee met teamstructuur en managerlijnen
Daarnaast is er één security-tabel UserAccess die per gebruiker de toegangsrechten bevat. Die tabel wordt elke nacht automatisch gevuld vanuit het HR-systeem en bevat kolommen zoals:
[Email]
[StoreID]
[CustomerID]
[RoleType]
Een gebruiker kan meerdere rijen hebben. Zo kan een regiomanager meerdere winkels krijgen en een key account manager meerdere klanten.
Voor de filiaalmanagers wordt RLS toegepast op de tabel DimStore. De DAX-filter bepaalt welke winkels zichtbaar zijn:
'DimStore'[StoreID] IN
CALCULATETABLE(
VALUES('UserAccess'[StoreID]),
'UserAccess'[Email] = USERPRINCIPALNAME()
)Een filiaalmanager van Brugge ziet dus alleen StoreID 103, terwijl een regiomanager misschien 103, 104 en 105 tegelijk ziet.
De accountmanagers krijgen toegang via dezelfde aanpak, maar nu op DimCustomer:
'DimCustomer'[CustomerID] IN
CALCULATETABLE(
VALUES('UserAccess'[CustomerID]),
'UserAccess'[Email] = USERPRINCIPALNAME()
)Het bedrijf hoeft niet meerdere modellen te maken. Alles gebeurt in één dataset, dankzij dynamische filtering.
De HR-afdeling gebruikt een hiërarchische structuur. Teamleiders mogen hun eigen team zien en alles daaronder. Hiervoor wordt een berekende kolom Path gebruikt in DimEmployee. De rol bevat:
VAR MeID =
LOOKUPVALUE(
'DimEmployee'[EmployeeID],
'DimEmployee'[Email], USERPRINCIPALNAME()
)
RETURN
PATHCONTAINS('DimEmployee'[Path], MeID)Zo krijgt elk teamlid een helder en afgebakend zicht op zijn medewerkers.
Loongegevens, rijksregisternummers en privé-adressen worden volledig beschermd via Object Level Security. Enkel HR ziet deze kolommen. Teamleiders en managers zien dezelfde rijen maar zonder deze gevoelige velden. Zo blijft het rapport veilig, terwijl het model centraal blijft.
Eindgebruikers openen hun Power BI-app. Ze zien automatisch enkel de data die bij hen hoort. Een filiaalmanager merkt niet eens dat er andere winkels bestaan. De directie ziet uiteraard alles. HR ziet alles, maar met extra kolommen zichtbaar. Accountmanagers hebben alleen zicht op hun eigen portfolio.
Wanneer iemand intern van rol verandert, past HR enkel de UserAccess-tabel aan. Bij de volgende refresh is de RLS in Power BI en Fabric meteen juist. Geen extra rapporten. Geen dubbel werk. Geen risico op fouten.
Apache Iceberg is een open tabelformaat voor grote analytische datasets op object storage. Het transformeert een map met Parquet-bestanden i...
Lees meerEen berekeningsgroep past één DAX-patroon toe op elke meting in je model. Schrijf YTD, MTD en YoY% één keer in plaats van voor elke meting a...
Lees meerCardinaliteit beschrijft hoe twee tabellen zich tot elkaar verhouden: één-op-veel, veel-op-één, één-op-één of veel-op-veel. In Power BI is h...
Lees meerData governance is het geheel van afspraken, rollen en processen dat bepaalt hoe een organisatie haar data beheert, beschermt en gebruikt. W...
Lees meerEen data mart is een kleinere, gerichte deelverzameling van je data warehouse, afgestemd op één afdeling of thema. Sales, finance of HR krij...
Lees meer
Copilot in Power BI levert vooral waarde als je datamodel er klaar voor is. Wat werkt in 2026, wat werkt nog niet, en waarom IT en business ...
Process mining legt bloot waar cash vastzit in aankoop, voorraad en goedkeuringsflows. Zo maakt gerichte automatisatie werkkapitaal vrij bij...