Forum Discussion

prasaddn's avatar
prasaddn
Frequent Visitor
7 months ago

Power BI Default User Filter with No RLS

Hi All,
This is regarding the video shared by Injae Park.  

 

https://youtu.be/59htvti1ldQ

 

I have exact similar requirements. However, I explored a lot and tried different ways, but could not achieve the same.

I checked some discussion on this. Again, with bookmarks it requires users to set up the bookmark on service.  And as a developer I would not be able to set it up for users.  I have a large list of users and not all users have access to service.  

Request if any of you can share your views if you have used such technique. It would even be grateful if you can share a dummy PBIx file addressing such technique.



https://community.fabric.microsoft.com/t5/Desktop/How-to-set-user-filter-based-upon-the-logged-in-user-without/m-p/4660986#M1393658

 

Power BI slicers don’t support dynamic default selections based on the logged-in user. Even though your measure using USERPRINCIPALNAME() works for filtering visuals conditionally, slicers themselves won’t pre-select a value automatically on report load.
Use Bookmarks for Personal Defaults:

Set the slicer to a user's name.
Create a personal bookmark and have the user save it as their default view.
This still requires one-time setup by each user but works on subsequent opens.

 

Regards, 

Prasad 

8 Replies

  • v-dineshya's avatar
    v-dineshya
    Community Support

    Hi prasaddn ,

    Thank you for reaching out to the Microsoft Community Forum.

     

    Native Power BI slicers don’t support a dynamic default selection based on the logged‑in user (e.g., via USERPRINCIPALNAME()), even though that function works perfectly to conditionally filter visuals/measures. Slicers themselves remain “sticky” last published or last personal selection unless you use bookmarks or a workaround.

     

    Please try below alternative workarounds without RLS.

     

    1. If all users open the same starting view not personalized, you can publish the report with your desired filters, then rely on persistent filters in Service or Reset to default. Or add a Bookmark + Button that resets the page to your chosen default view.

     

    2. Ask each user to select their name in the slicer once, then Save as personal bookmark and Set as default view. Personal bookmarks persist across browsers/devices and don’t need RLS.

     

    3. If you want a default subset like current user’s territories that applies only when slicers are not actively filtering, you can use a calculation group to inject filters until a slicer selection exists.

     

    Please try below links.

    Overview of Bookmarks in Power BI Service Reports - Power BI | Microsoft Learn

    Set Up Default Filters in Power BI - Microsoft Fabric Community

    How to dynamically select the default values we ne... - Microsoft Fabric Community

     

    Please refer below Ideas forum link and upvote the appropriate idea related to your scenario.

    Dynamically switch between bookmarks based on sele... - Microsoft Fabric Community

    Search - Microsoft Fabric Community

     

    If not we would recommend submitting your detailed feedback and ideas through Microsoft's official feedback channels, such as Microsoft Fabric Ideas. Feedback submitted through these channels is frequently reviewed by the product teams and can contribute to meaningful improvements.

    https://ideas.fabric.microsoft.com/ideas/search-ideas/ 

     

    I hope this information helps. Please do let us know if you have any further queries.

     

    Regards,

    Dinesh

     

     

     

     

    • prasaddn's avatar
      prasaddn
      Frequent Visitor

      thank you v-dineshya for taking time and sharing your thoughts. I will explore the links and options provided to see what best can match my requirements.   

      • v-dineshya's avatar
        v-dineshya
        Community Support

        Hi prasaddn ,

        Thank you for the update. As you mentioned in your previous response, you are working on provided solution, could you please provide the Estimated time for arrival (ETA) for this thread.

         

        Regards,

        Dinesh

  • AshokKunwar's avatar
    AshokKunwar
    Continued Contributor

    Hi Prasad,

    You are correct that standard Power BI slicers do not natively support dynamic defaults. However, you can achieve the "Injae Park method" without requiring users to set up personal bookmarks by using a Visual-Level Filter on the New Button Slicer.

    This approach allows the report to "pre-select" the user based on their login email as soon as the report opens.

    Step 1: Create the "User Match" Measure

    First, we need a measure that identifies if the user in your data matches the person currently viewing the report.

     

    IsLoggedInUser = 

    VAR _CurrentUser = USERPRINCIPALNAME()

    RETURN

    IF( SELECTEDVALUE('AccessTable'[Email]) = _CurrentUser, 1,

    0 )

     

     

    (Replace 'AccessTable'[Email] with the table and column containing your users' login emails).

    Step 2: Configure the Button Slicer

    Instead of the traditional slicer, use the New Button Slicer visual:

    Add your User Name or Email field to the Button Slicer.

    Open the Filters Pane while the slicer is selected.

    Drag the IsLoggedInUser measure into the "Filters on this visual" section.

    Set the filter to is 1 and click Apply filter.

    Step 3: Why this works for your scenario

    No User Action Required: Because the filter is applied to the visual itself, the slicer will only show (and therefore default to) the logged-in user's name the moment they open the report.

    Scalability: This works for 10 users or 10,000 users because it relies on USERPRINCIPALNAME() rather than manual configurations.

    No Service Bookmarks: This is a developer-side fix. It functions perfectly for users who only have "Viewer" access and cannot create their own bookmarks.

    Pro-Tip:

    If you want users to be able to see other people's data after the initial load, you can add a "Reset" button or a secondary slicer that is not filtered by this measure.

    If this addresses your requirement for a dynamic default without manual bookmarks, please mark this as an "Accepted Solution" so other community members can find it!

    Best regards,

    Vishwanath 

    • prasaddn's avatar
      prasaddn
      Frequent Visitor

      thank you AshokKunwar for the reply. Let me check the suggested ideas and come back shortly (1 or 2 days).  Regards, Prasad 

      • AshokKunwar's avatar
        AshokKunwar
        Continued Contributor

        Hi prasaddn 

        Your issue is solved or not

         

        If this addresses your requirement for a dynamic default without manual bookmarks, please mark this as an "Accepted Solution" so other community members can find it!

        Best regards,

        Vishwanath 

  • prasaddn 

    Assuming your requirement is to default the selection in a 'User' slicer based on logged in user, And with out using RLS and personal boomarks.

     

    I would like to suggest one workaround, If you are ok to

     

    Step 1: add an additional row in your access table for the logged in user and 

     

    if you are ok to keep the default selection in the slicer as 'Me' then this workaround might work for you.

    Step 2 - Create a measure to filter logged in user from User slicer

     

    RemoveLoggedInUser = 
    VAR __AllUsers = ALL(DimAccess[User UPN])
    VAR __LoggedInUser = USERPRINCIPALNAME()
    VAR __UserInCurrentRow = SELECTEDVALUE(
        DimAccess[User UPN],
        "[email protected]"
    )
    VAR __LoggedInUserNotinTheAccessTable = NOT (__LoggedInUser IN __AllUsers)
    VAR __Result = IF(
        __LoggedInUserNotinTheAccessTable,
        1,
        IF(
            __LoggedInUser = __UserInCurrentRow,
            0,
            1
        )
    )
    RETURN
        __Result

     

     Add this measure as visual level filter on User slicer

     

    Step 3 - Create a calculation group to apply logged in User filter

     

    ReplaceMe = 
    IF(
    ISSELECTEDMEASURE([RemoveLoggedInUser]),
    SELECTEDMEASURE(),
    VAR __AllUsers = ALL(DimAccess[User UPN])
    VAR __selectedUser = SELECTEDVALUE(
        DimAccess[User UPN],
        "[email protected]"
    )
    VAR __loggedInUser = USERPRINCIPALNAME()
    VAR __loggedInUserValue = CALCULATE(
        SELECTEDMEASURE(),
        KEEPFILTERS(DimAccess[User UPN] = __loggedInUser),
        REMOVEFILTERS(DimAccess)
    )
    VAR __selectedUserValue = SELECTEDMEASURE()
    VAR __LoggedInUserNotinTheAccessTable = NOT (__LoggedInUser IN __AllUsers)
    VAR __LoggedInUserNotinTheAccessTableValue = CALCULATE(
        SELECTEDMEASURE(),
        REMOVEFILTERS(DimAccess)
    )
    VAR __Result = IF(
        __LoggedInUserNotinTheAccessTable && __selectedUser = "loggedInUser",
        __LoggedInUserNotinTheAccessTableValue,
        IF(
            __selectedUser = "loggedInUser",
            __loggedInUserValue,
            __selectedUserValue
        )
    )
    RETURN
        __Result
    )

     

    Add this calculation group column as report level filter

    Change the slicer selection type as "Single Select".

    Keep the default selection in the slicer as "Me".

    When user4 logs in, data in the table visual is filtered with user4 and

    user4 still has the option to switch to other users.

     

    Hope this helps! 

    You can download the file from this page

     

     

     

     

    Connect on LinkedIn

    Visit my website to read blogs on Power BI and Microsoft Fabrichttps://www.techietips.co.in/

     

     

     








    Did I answer your question? Mark my post as a solution!
    If I helped you, click on the Thumbs Up to give Kudos.

    Proud to be a Super User!


     

  • Power BI slicers don’t have a true “dynamic default selection” (they won’t auto-select a value just because USERPRINCIPALNAME() matches). The practical workaround is to filter the slicer visual itself so it only shows the logged-in user when the report opens. That makes it look like it default-selected them. 

     

    Create a measure like this (adjust column names):

    IsLoggedInUser =
    VAR u = USERPRINCIPALNAME()
    RETURN IF( SELECTEDVALUE(DimUsers[UPN]) = u, 1, 0 )

     

    Then select your User slicer (works best with the new Button slicer), open the Filters pane → Filters on this visual, drop IsLoggedInUser there, and set it to is 1. Now the slicer will only display the current user on load, without requiring personal bookmarks or RLS. 

     

    If you still want users to optionally view others, you can provide a “Reset / Show all users” experience (e.g., a separate page, or a toggle-driven calculation-group approach), but the core “default to me” behavior is achieved by that visual-level filter.