Power BI

Row-Level Security (RLS)

Also called: RLS, Row level security, Data security roles

Row-level security (RLS) restricts which rows of data each person can see in a Power BI report, by applying filter rules defined on the semantic model, so one report can serve many audiences.

One Sales report seen by three people: an admin with no filter sees $2.80M across four regions, an EMEA manager sees only EMEA at $0.84M, and a North America manager sees only North America at $1.12M.

What it does

Sales managers should see their own region, not the whole company. Without security you’d build a report per region. With row-level security, you build one report and let the model decide which rows each person gets.

You define rules in roles. A role holds a filter on one or more tables, written in DAX. The example’s “Regional managers” role filters the Region table so that Region equals the signed-in manager’s region. Because relationships carry that filter to the fact table, every visual recalculates. The admin sees $2.80M, the EMEA manager $0.84M and the North America manager $1.12M, all from the same report.

Static vs. dynamic

  • Static RLS puts a fixed filter in each role, such as [Region] = "EMEA". It’s easy to understand, but you need one role per region and must edit the model when regions change.
  • Dynamic RLS looks up the viewer. A DAX filter such as [ManagerEmail] = USERPRINCIPALNAME() on a mapping table matches the person to their rows, so a single role covers everyone and access is changed by updating data, not the model.

Setting it up in Power BI

  1. In Power BI Desktop, choose Modeling > Manage roles and create a role.
  2. Add a DAX filter expression to the table to restrict.
  3. Test with View as to see the report as that role.
  4. Publish, then add users or groups to the role in the Power BI service, in the semantic model’s security settings.

Things to know

  • RLS belongs to the semantic model, so it protects every report built on that model.
  • It filters rows only. To hide columns or tables from some users, you need object-level security.
  • It restricts people with the Viewer role; users who can edit the workspace aren’t restricted.
  • Filters flow along relationships, so test totals with several roles.

Row-level security vs. Tableau

Tableau handles the same need with user filters or by filtering the data source based on the signed-in user, often with an entitlements table. The idea is the same: one workbook, different rows per person.

Best practices

  • Prefer dynamic over static. One role and a mapping table scale better than a role per region.
  • Filter dimensions, not facts. A filter on a small dimension is easier to read and faster to evaluate.
  • Always test with View as. Check each role’s totals against what you expect.
  • Use groups, not individuals. Add security groups to roles so access follows team changes.
  • Document who sees what. A simple table of roles and audiences prevents surprises.

Mocking up for different audiences

If different roles will see different data, say so in the mockup. A note such as “EMEA manager view” on a page tells the model builder which rows to secure and lets reviewers check the totals. See what a dashboard mockup is.

See it in a real layout

These free Mockko templates use it. Open one and edit it in your browser.

Related terms

Common questions

How do I set up row-level security in Power BI?
In Power BI Desktop, go to Modeling > Manage roles, create a role and add a DAX filter to a table, such as [Region] = "EMEA". Publish the model, then add people or groups to the role in the Power BI service. Use View as to test it first.
What's the difference between static and dynamic RLS?
Static RLS hard-codes a filter in each role, one role per region. Dynamic RLS uses a DAX function such as USERPRINCIPALNAME() to match the signed-in user to a mapping table, so one role covers everyone.
Does RLS apply to workspace admins?
No. RLS only restricts people who have the Viewer role in the workspace, or who get the content through an app or sharing link. People with edit rights in the workspace, such as Admins, Members and Contributors, are not restricted by it.

Mock it up before you build it

Lay out your Power BI or Tableau dashboard in Mockko, get sign-off, then build. Free to start.

Try Mockko free