Get certified for free when you join Fabric Data Days 2026 and dive into Fabric, Power BI, SQL, AI, and other essential data skills.
Join nowJuly 28 - August 9 | Final Round of the Power BI Dataviz World Championships. This is your chance. Learn more
Hi,
I have few fact table which have information specific to region (america, europe, apac, middle east etc...) and for each of the region i have product (pr1, pr2, pr3....) and for each product i have prodcut category (cat1, cat2, cat3....).
I would want to implement dynamic RLS in such a manner that any user who logs in will have access to a region and then by product or product category. I have 4 region, 10 product and 10 product category. I will create a Permission table having user mail, region, product and product category access. Then I create a relationship with fact tables to determine what data the user can have access to.
I have 2 queries here :
Pls suggest what is optimal way to implement Dynamic RLS that will cater the above needs. Thanks for your help.
Regards
Solved! Go to Solution.
For completion of this query, I was able to resolve it using a IN operator. Thanks
VAR _RLSProduct =
CALCULATETABLE(
VALUES('User'[RLS Product]),
'User'[email]=USERPRINCIPALNAME()
)
RETURN
SWITCH (TRUE(),
[Product] IN _RLSProduct , TRUE(),
FALSE()
)
Hi,
I was able to successfully implement RLS by creating role that had restrictions defined for Dimesion tables (Product, Product Category and Region).
I have a user table that has the following info. However, the issue I am facing is when I associate the same User ([email protected]) to multiple Products, I get multiple rows as such my DAX function returns an error. Can you pls let know if there is an alternative to handle this situation. The DAX function is
VAR _RLSProduct =
CALCULATETABLE(
VALUES('User'[RLS Product]),
'User'[email]=USERPRINCIPALNAME()
)
RETURN
SWITCH (TRUE(),
[Product] = _RLSProduct, TRUE(),
FALSE()
)
| EmailId | Area | Product | Product Category |
| [email protected] | US | ALL | CAT1 |
| [email protected] | ALL | PRD1 | ALL |
| [email protected] | ALL | PRD2 | ALL |
For completion of this query, I was able to resolve it using a IN operator. Thanks
VAR _RLSProduct =
CALCULATETABLE(
VALUES('User'[RLS Product]),
'User'[email]=USERPRINCIPALNAME()
)
RETURN
SWITCH (TRUE(),
[Product] IN _RLSProduct , TRUE(),
FALSE()
)
Join us in Barcelona for FabCon and SQLCon, the Fabric, Power BI, SQL, and AI community event. Save €200 with code FABCMTY200.
If you love stickers, then you will definitely want to check out our community sticker challenge, Barcelona edition!
Check out the July 2026 Power BI update to learn about new features.
| User | Count |
|---|---|
| 31 | |
| 28 | |
| 24 | |
| 24 | |
| 19 |
| User | Count |
|---|---|
| 44 | |
| 32 | |
| 18 | |
| 17 | |
| 16 |