Forum Discussion

MahammadJafar27's avatar
MahammadJafar27
Advocate I
2 years ago
Solved

Need help to implement the Dynamic RLS based on the below scenario.

RLS table --

 

 

Line 1, the user [email protected] has access to region Canada, Country Canada, Category Bikes and for All the Products.

Line 2, the user [email protected] has access to region US, for All the countries, Categories and Products.

 

Fact table --

 

 

Output --

 

 

I want to implement the RLS based on the above scenario. Is it something feasible?

If yes, please guide me on how to implement this scenario.

 

Your inputs will be highly appreciated 🙂

 

Thanks

  • Anonymous's avatar
    Anonymous
    2 years ago

    Hi MahammadJafar27 

    Try the following measure, remove the rule in user table, and create a new rule in fact table.

    COUNTROWS (
            FILTER (
                RLS,[User] = USERPRINCIPALNAME()&&
                CONTAINSSTRING ( [Region_Type], EARLIER ( 'Fact'[Region] ) )
                    && CONTAINSSTRING ( [Category_type], EARLIER ( 'Fact'[Category] ) )
                    && CONTAINSSTRING ( [Country_type], EARLIER ( 'Fact'[Country] ) )
                    && CONTAINSSTRING ( [Pro_Type], EARLIER ( 'Fact'[Product] ) )
            )
        )=1

     

    Then test it.

     

    Best Regards!

    Yolo Zhu

    If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.

6 Replies

    • MahammadJafar27's avatar
      MahammadJafar27
      Advocate I

      Hi @_AAndrade ,

       

      Thanks for the above links, they are very informative, but I am still unable to achieve the output.

       

      Could you please try the above example and implement the RLS? Let me know if you are able to achieve the desired output.

       

      Your help will be highly appreciated 🙂

       

      Thanks

      • Anonymous's avatar
        Anonymous
        Not applicable

        Hi MahammadJafar27 

        You can try the following solution.

        create four calculated columns in RLS table.

        Region_Type = IF([Region]="All",CONCATENATEX(DISTINCT('Fact'[Region]),[Region],","),RLS[Region])
        Country_type = IF([Country]="All",CONCATENATEX(DISTINCT('Fact'[Country]),[Country],","),[Country])
        Category_type = IF([Category]="All",CONCATENATEX(DISTINCT('Fact'[Category]),[Category],","),[Category])
        Pro_Type = if([Product]="All",CONCATENATEX(DISTINCT('Fact'[Product]),[Product],","),[Product])

        2.Create a table and set it cannot be viewed .

        Table = SELECTCOLUMNS(RLS,"a",[User])

         

        3.Create a measure and put it to the table visual.

        MEASURE =
        IF (
            COUNTROWS ( RLS ) = COUNTROWS ( 'Table' ),
            1,
            COUNTROWS (
                FILTER (
                    RLS,
                    CONTAINSSTRING ( [Region_Type], MAX ( 'Fact'[Region] ) )
                        && CONTAINSSTRING ( [Category_type], MAX ( 'Fact'[Category] ) )
                        && CONTAINSSTRING ( [Country_type], MAX ( 'Fact'[Country] ) )
                        && CONTAINSSTRING ( [Pro_Type], MAX ( 'Fact'[Product] ) )
                )
            )
        )
        

         

         

        4.Create a RLS named test and input the following code in RLS Table.

        [User] = USERPRINCIPALNAME()

         

         

        5.Test it .

         

        Output

        Best Regards!

        Yolo Zhu

        If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.