Row-level security (RLS) limits which rows each viewer of a semantic model gets, so one model can serve several audiences. Use it when different people should see different data in the same reports. Set the rules on the model, turn them on, and check the result with View as before you share a report.
While the Row-level security toggle is On, each viewer falls into one case:
While the toggle is Off, the rules are saved but not applied, and every viewer sees all rows.
These rules apply only to the reports built on this semantic model. Access to Warehouse tables is set separately (Warehouse permissions and row-level security).
The rules cover every place the model reads rows: chart results, filter and slicer value lists, downloads, drill views, and the previews inside the model editor. When the rules leave an identity with no rows, the result is empty rather than broken: charts finish with zero rows, the report shows one quiet notice, value lists come back empty, and a download produces no file. When you email a report, each recipient gets it under their own rules, and the form warns about recipients who would see no data (Email subscriptions).
The panel says "No groups yet. Users who are in no group see no rows while row-level security is enabled." until you add the first group. The When to use Groups or SQL popover next to Mode explains when each mode fits.
{user_email:String} where the viewing user's email should be compared. It is filled in for you, and it is the only parameter that is substituted: "Only {user_email:String} is substituted at query time."SQL conditions are refused when they contain a semicolon, a comment or a statement that changes data or structure. Before the save completes, each condition is checked once against its target table; a missing column or a syntax error refuses the save and shows the reason.
Saving does not apply the rules on its own. Turn the toggle On and click Save. While it is Off, the panel warns that configured conditions are not applied.
View as lasts for your session only; the popover notes Session only, and the other person sees nothing different. The header action shows the email you are viewing as while it is on. When the model's rules are Off, the same action explains that and offers Enable RLS if you can edit the model.
If the rules give that person no rows, the report shows "Row-level security: no data is available for {email}" (or "for your user" outside View as), with Dismiss. You can dismiss it for that report in this browser. Reports on a model with row-level security On carry an RLS badge next to the title.
The Model AI can read and explain a model's row-level security and suggest changes, but it does not change the rules itself: a person applies changes in the Row-level security tab. See Model AI.
Because the rules are On and the viewer matches no group, so no rows qualify. They see an empty result rather than an error. If they should see data, add them to a group or to the Main group.
The rows that match either group's condition. Membership in several groups combines with OR.
Use SQL mode and write {user_email:String} in the condition; it is replaced with the viewing user's email at query time. It is the only parameter that is substituted, and a Groups condition cannot use it.
Check three things. The toggle may still be Off; the panel warns "RLS groups are configured but row-level security is DISABLED - conditions are not applied." The viewers may be Main-group members, who always see every row. Or the model is in SQL mode, where everyone outside the Main group gets the single condition under Everyone else.
Public links or chart API tokens still exist on reports of the model. Unpublish the links on Share a report and revoke the tokens on Export reports and data, then turn the rules on. The panel names the reason next to the toggle.
View as needs Main-group membership while the rules are On, or edit access to the semantic model. Ask someone who can edit the model to check the view for you.
No. It applies to your session only. Charts show the other person's rows until you click Exit.
Write one condition with no semicolon, no comment and no statement that changes data or structure, and make sure every column it names exists. Each condition is checked against its target table before the save completes; a problem refuses the save and shows the reason.
The built-in admin role always bypasses it. It appears in the Main group with a lock and cannot be removed. Holders of any other role follow the rules unless you add them to the Main group.
No. Model checks, data checks and measure tests run without row-level security, so they read every row and a result can describe rows a person would not see. Use View as to check what a person actually gets. See Check, document and trace a model and Measures.
Not in full. In a chart's SQL view, viewers outside the Main group see / in place of the added filter; Main-group members and model editors see the whole statement. See Build a report.