Join us at FabCon Atlanta from March 16 - 20, 2026, for the ultimate Fabric, Power BI, AI and SQL community-led event. Save $200 with code FABCOMM.
Register now!Get Fabric Certified for FREE during Fabric Data Days. Don't miss your chance! Request now
Hi Experts
I have a issue with my DAX for RLS - the issue is happens when i have individual with mulitple Organisational level access.
See Sample Data below - in the sample below Albert has Organisation Level 1 Access which should allow him to see everything, and also access to South Korea Market data.
I would expect my DAX measure to below to default to Org Level_1 as opposed to Org_level_3. This is where i am stuck..
// DAX for finding access info in vw_rls_msi_icontrol_user_access to filter this table with.
// Set variables:
// Create filter on current user using USEPRINCIPALNAME()
VAR filter_current_user=
FILTER(
ALL('vw_rls_msi_irisk_user_access'),
'vw_rls_msi_irisk_user_access'[user]=
USERPRINCIPALNAME())
// Create filter to exclude NULL values in corresponding column
VAR filter_not_null_org_level_1=
FILTER('vw_rls_msi_irisk_user_access', 'vw_rls_msi_irisk_user_access'[organization_level_1] <> BLANK())
VAR filter_not_null_org_level_2=
FILTER('vw_rls_msi_irisk_user_access', 'vw_rls_msi_irisk_user_access'[organization_level_2] <> BLANK())
VAR filter_not_null_org_level_3=
FILTER('vw_rls_msi_irisk_user_access', 'vw_rls_msi_irisk_user_access'[organization_level_3] <> BLANK())
VAR filter_not_null_org_level_4=
FILTER('vw_rls_msi_irisk_user_access', 'vw_rls_msi_irisk_user_access'[organization_level_4] <> BLANK())
VAR filter_not_null_org_level_5=
FILTER('vw_rls_msi_irisk_user_access', 'vw_rls_msi_irisk_user_access'[organization_level_5] <> BLANK())
// Create a calculated table for ever organization level
VAR table_level_1 =
CALCULATETABLE (
VALUES( 'vw_rls_msi_irisk_user_access'[organization_level_1]),
filter_current_user,filter_not_null_org_level_1)
VAR table_level_2 =
CALCULATETABLE (
VALUES( 'vw_rls_msi_irisk_user_access'[organization_level_2]),
filter_current_user,filter_not_null_org_level_2)
VAR table_level_3 =
CALCULATETABLE (
VALUES( 'vw_rls_msi_irisk_user_access'[organization_level_3]),
filter_current_user,filter_not_null_org_level_3)
VAR table_level_4 =
CALCULATETABLE (
VALUES( 'vw_rls_msi_irisk_user_access'[organization_level_4]),
filter_current_user,filter_not_null_org_level_4)
VAR table_level_5 =
CALCULATETABLE (
VALUES( 'vw_rls_msi_irisk_user_access'[organization_level_5]),
filter_current_user,filter_not_null_org_level_5)
RETURN
// If all tables are empty return False otherwise
// If value is found in calculated table-> filter table and column on that value
IF( ISEMPTY(table_level_1) && ISEMPTY(table_level_2) && ISEMPTY(table_level_3) && ISEMPTY(table_level_4) && ISEMPTY(table_level_5), FALSE,
[level_1]
IN table_level_1
||
[level_2]
IN table_level_2
||
[level_3]
IN table_level_3
||
[level_4]
IN table_level_4
||
[level_5]
IN table_level_5
)
Check out the November 2025 Power BI update to learn about new features.
Advance your Data & AI career with 50 days of live learning, contests, hands-on challenges, study groups & certifications and more!