What this quiz covers
This quiz focuses on Row Level Security Rls, giving you a quick way to practice the rules, question types, and explanations that matter most for Microsoft Power BI.
Within one role, a developer defines Region[RegionName] = "West" and Product[Category] = "Bikes". Both dimension tables have active relationships that filter Sales.
What is the effective result when this role is tested in Power BI Desktop?
Microsoft Power BI Quiz
Practice Row Level Security Rls in Microsoft Power BI with focused quiz questions that help you check what you know, review explanations, and build confidence with test-style prompts.
This quiz focuses on Row Level Security Rls, giving you a quick way to practice the rules, question types, and explanations that matter most for Microsoft Power BI.
Try each quiz question before looking at the correct answer. Use the explanations to review missed ideas, then come back to similar questions until the pattern feels familiar.
Within one role, a developer defines Region[RegionName] = "West" and Product[Category] = "Bikes". Both dimension tables have active relationships that filter Sales.
What is the effective result when this role is tested in Power BI Desktop?
Region[RegionName] = "West" restricts the Region table to West, and Product[Category] = "Bikes" restricts the Product table to Bikes. Because both dimension tables have active relationships flowing into the Sales table, Sales is effectively filtered to only rows connected to both the West region and the Bikes category — confirming that A is correct.
B is the most tempting trap. You might assume that two separate filter rules create an OR condition, but that is not how Power BI handles intra-role filters. OR logic would only apply if you explicitly wrote it inside a single DAX expression using ||.
C is wrong because Power BI evaluates all filters within a role regardless of the order they were written. There is no "first defined wins" hierarchy — both filters are always applied.
D is incorrect because Power BI absolutely supports multiple table filters within a single role. A role can contain as many filter expressions as needed, and they all take effect simultaneously.
Your study tip: always distinguish within-role logic (AND — all filters apply) from multi-role logic (OR — a user in multiple roles gets the union of permissions). This distinction is a frequent exam trap.A Sales table contains OrderDate and ShipDate. Date has an active relationship to Sales through OrderDate and an inactive relationship through ShipDate. A role filter on Date is intended to restrict rows according to ShipDate, but testing shows that it restricts rows according to OrderDate.
Which model change most directly supports ShipDate-based RLS while preserving OrderDate analysis?
USERELATIONSHIP() in a measure or — for RLS specifically — creating a separate dimension with its own active relationship.A dynamic role filters Employee[Email] by USERPRINCIPALNAME(). Employee filters Sales through an active relationship. During testing, you enter newmanager@contoso.com, but that address has no matching Employee row.
Assuming no other role is selected, what result should the properly configured role produce?
Employee[Email] where the value equals USERPRINCIPALNAME(). If newmanager@contoso.com doesn't exist in the Employee table, the filter returns zero rows. With no Employee rows passing the filter, there is nothing to propagate across the relationship to Sales. The result is an empty Sales table — no rows returned. That makes C the correct answer.
A is wrong because Power BI relationships have no concept of a "default dimension member." If no dimension rows match, the fact table receives no context — there's no fallback substitution behavior built into RLS propagation.
B describes a dangerous misconception: that a failed identity match causes the filter to be ignored, effectively granting full access. The opposite is true — a failed match produces an empty filter result, which is the most restrictive outcome possible, not the least.
D is incorrect because Power BI doesn't validate whether a tested identity exists in the underlying data at configuration time. You can freely test any UPN in the "View as role" feature; no error is thrown simply because the address is absent from the table.
Study tip: Think of dynamic RLS as a two-step gate — identity match first, relationship propagation second. If step one returns nothing, step two has nothing to pass through.A role named ManagerAccess uses Manager[Email] = USERPRINCIPALNAME(). You need to test what alex@contoso.com would see, even though you are signed in to Desktop with a different identity.
Which View as configuration provides the intended test?
alex@contoso.com as the simulated identity. (correct answer)USERPRINCIPALNAME(). The "View as Roles" (or "View as") dialog lets you control both independently, and understanding that distinction is the key to this question.
Because the role ManagerAccess uses Manager[Email] = USERPRINCIPALNAME(), the filter only returns rows where the Manager email matches the current user's principal name. If you want to see what alex@contoso.com sees, you must activate the role and tell Power BI to treat alex@contoso.com as the authenticated identity. Option B does exactly that — selecting ManagerAccess applies the role's DAX filter, while choosing "Other user" and entering alex@contoso.com causes USERPRINCIPALNAME() to return that address during evaluation. Together, these two settings produce an accurate simulation.
Option A is wrong because changing a Windows display name does not affect USERPRINCIPALNAME() — that function reads the authenticated UPN, not a display label. Option C is wrong because leaving all roles unselected means no RLS filter is applied at all; you'd see unfiltered data regardless of the identity entered. Option D is wrong because report slicers are visual filters, completely separate from RLS and USERPRINCIPALNAME() — entering an email in a slicer does nothing to the security context.
A good study tip: whenever a DAX security expression uses USERPRINCIPALNAME(), remember that testing it correctly requires both a role selection and an "Other user" identity — neither alone is sufficient.Seller is on the one side of an active, single-direction relationship to Sales. A developer applies an RLS filter directly to Sales by seller key. Sales totals are restricted correctly, but a slicer built from Seller[SellerName] still lists every seller.
Which change is the best way to make both Sales and the seller slicer reflect the permitted sellers?
Seller[SellerName] — respects the filter. You get one clean, centralized rule that propagates naturally through the model.
Option A fails because visual-level filters are a cosmetic fix, not a security measure. They hide values in one specific visual but don't enforce data restrictions model-wide, so a user could still access forbidden data through another visual or export.
Option C is a misconception about "Mark as Date Table" — that setting is strictly for time intelligence functions and has absolutely nothing to do with how RLS filters travel between tables. It would not cause filters to propagate back to Seller.
Option D is dangerous: removing the RLS role and relying on report-level filters provides no real security. Report filters can be bypassed through tools like Analyze in Excel or direct dataset connections, exposing sensitive data entirely.
Study tip: On Power BI RLS questions, remember that filters flow from dimension tables to fact tables. Always apply your RLS filter on the dimension (one-side) and let the relationship do the rest.A developer creates and successfully tests a role named EastManagers in Power BI Desktop. The developer now needs three employees to receive that role after the semantic model is published.
What should the developer do next?
A model has two static roles. The North role permits only North rows, and the Retail role permits only Retail rows. While testing in Power BI Desktop, you select both roles in the View as dialog.
Which rows should you expect to see while viewing the report as both roles?
A report page containing payroll details is hidden. A page filter limits the page to the Finance department, but no RLS role has been created. The report will be distributed to employees from several departments.
Which action provides the required row-level protection for Finance payroll data?
A model has an Employee table containing one row per employee and an EmailAddress column. Employee has an active one-to-many relationship to Expense. The security requirement is that each signed-in employee can view only that employee's expenses.
Which role filter should you create on Employee?
Employee[EmailAddress] = USERPRINCIPALNAME() (correct answer)Expense[EmailAddress] = USERPRINCIPALNAME()Employee[EmailAddress] = USERNAME() && Expense[Amount] > 0Employee[EmailAddress] IN ALL(Employee[EmailAddress])Employee[EmailAddress] = USERPRINCIPALNAME() filters Employee to the single row matching the signed-in user's identity, and the relationship cascades that filter to show only that employee's expenses. It's clean, targeted, and works with how Power BI's filter propagation is designed.
B is wrong because it places the filter on the Expense table rather than Employee. While this might seem intuitive, it assumes Expense has its own EmailAddress column, which the scenario doesn't establish — and more importantly, you should filter on the "one" side of the relationship to let propagation do the work.
C introduces USERNAME(), which returns a domain\username format rather than an email address, so it won't match an EmailAddress column reliably in most cloud environments. The added && Expense[Amount] > 0 condition is also irrelevant to the security requirement and would incorrectly hide zero-amount expenses.
D uses ALL(Employee[EmailAddress]), which removes filters and returns every email address — the exact opposite of restricting access.
As a study tip: on RLS questions, always filter the lookup/dimension side of a relationship using USERPRINCIPALNAME() for cloud-based identity matching, and let relationship propagation handle the rest.A model contains a Region table on the one side of an active one-to-many relationship with a Sales table. A role named WestUsers must restrict users to western-region rows. Region names also appear in report slicers.
Which configuration most appropriately creates and validates the required row-level security in Power BI Desktop?
Region[RegionName] to "West", and then use View as to select WestUsers. (correct answer)Sales[RegionName] to "West", and then hide the Region table from report view.Region[RegionName] is ideal. Power BI will automatically propagate that filter downstream to Sales through the active relationship. Option A does exactly this — it creates the WestUsers role with a filter on Region[RegionName] = "West", then uses the View as feature in Power BI Desktop to impersonate that role and confirm users see only western data. This is the correct, purpose-built workflow for RLS creation and validation.
Option B filters Sales[RegionName] instead of the Region table. While this might technically restrict Sales rows, it bypasses the model's relationship logic, can miss rows, and doesn't filter the Region table itself — meaning slicers showing region names could still expose non-western regions to users. Option C uses a report-level filter, which is purely a visual layer and provides no real security; any user with direct dataset access can bypass it entirely. Option D reversing the relationship direction breaks the intended data model design and using View as without a defined role doesn't enforce any RLS at all — it's not a valid security configuration.
Remember this pattern: always apply RLS filters on the lookup/dimension table (the "one" side) when a relationship exists, so the filter cascades naturally. Use View as — not Performance Analyzer — to test RLS roles in Desktop.