Forum Discussion

VitaliiCH17's avatar
VitaliiCH17
Frequent Visitor
2 years ago

Dynamic Row Lever Security doesn't work with multiple columns

Hi,

I'm trying to implement RLS based on the multiple columns. All this columns are in the same table. My expression is following:

 

"True" =
CALCULATE (
MAX(AUTHORIZATION[global]),
AUTHORIZATION[email] = USERPRINCIPALNAME()
)||

CONTAINSSTRING(
CALCULATE (
(MAX(AUTHORIZATION[Area])),
AUTHORIZATION[email] = USERPRINCIPALNAME()
), "|" & IF(ISBLANK([Area]), "UNKNOWN", [Area]) & "|") ||

CONTAINSSTRING(
CALCULATE (
(MAX(AUTHORIZATION[subRegionCodeNew])),
AUTHORIZATION[email] = USERPRINCIPALNAME()
), IF(ISBLANK([Sub Region]), "UNKNOWN", [Sub Region])) ||

CONTAINSSTRING(
CALCULATE (
(MAX(AUTHORIZATION[Region])),
AUTHORIZATION[email] = USERPRINCIPALNAME()
), IF(ISBLANK([Region]), "UNKNOWN", [Region]))

 

For some reason it works only if one column is populated, for instance if Region is EMEA and other columns are blank I see correct data. But in case Region is EMEA and sub region is EMEA NORTH I still see all sub regions for EMEA.

Please let me know what is wrong with my DAX

 

Regards,

Vitalii

1 Reply

  •  

     

    "True" =
    CALCULATE (
        MAX ( AUTHORIZATION[global] ),
        AUTHORIZATION[email] = USERPRINCIPALNAME ()
    )
        || CONTAINSSTRING (
            CALCULATE (
                ( MAX ( AUTHORIZATION[Area] ) ),
                AUTHORIZATION[email] = USERPRINCIPALNAME ()
            ),
            "|" & COALESCE([Area],"UNKNOWN") & "|"
        )
        || CONTAINSSTRING (
            CALCULATE (
                ( MAX ( AUTHORIZATION[subRegionCodeNew] ) ),
                AUTHORIZATION[email] = USERPRINCIPALNAME ()
            ),
             COALESCE([Sub Region],"UNKNOWN") 
        )
        || CONTAINSSTRING (
            CALCULATE (
                ( MAX ( AUTHORIZATION[Region] ) ),
                AUTHORIZATION[email] = USERPRINCIPALNAME ()
            ),
             COALESCE([REGION],"UNKNOWN") 
        )

     

     

    You have chained "OR"  statements.  Did you mean to use SWITCH() instead?

    Also seems to be missing the sticks for the last few options, and has some field name inconsistencies.