Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Vote for your favorite vizzies from the Power BI Dataviz World Championship submissions. Vote now!

Reply
KS7
Regular Visitor

Power BI Drill-through Issue with Complex Data Model and DAX – Role-based Status Not Matching

Hi Community,

I am currently working on a Power BI project with a highly complex data model involving multiple tables and multiple relationships.

The dataset represents a recruitment workflow with custom columns such as:

  • Application Review

  • Recruiter Phone Screen

  • Hiring Manager Review

  • Interview Stages

  • Final Hiring Status

All these stages are stored as custom columns, not a normalized stage table.

I have already built the report successfully, but I am facing an issue with DAX-based drill-through accuracy.

Problem Description

  • I need to display all stage values role-wise in a single table (Recruiter, Hiring Manager, etc.).

  • For example, when Application ID = 555, drilling through from Candidate Details should show only the accurate stage values related to that application.

  • Drill-through works correctly when using columns directly.

  • However, when I use DAX measures or calculated logic, the drill-through:

    • Does not return accurate data

    • Shows incorrect or mismatched stage values

    • Sometimes ignores the selected Application ID context

Current Challenges

  • Very complex data modeling

  • Multiple fact and dimension tables

  • Multiple active/inactive relationships

  • Heavy use of DAX to derive role-based stage values

  • Client specifically requires the solution using DAX, not column-based drill-through

    Any guidance, examples, or best practices would be highly appreciated.

    Thank you in advance.

1 ACCEPTED SOLUTION
v-sshirivolu
Community Support
Community Support

Hi @KS7 ,
Thanks for reaching out to Community Forum.

I was able to reproduce this issue. The drill through itself works correctly, but when stage values are derived using DAX measures, the Application ID context can be lost if it isn't explicitly enforced.

The reliable fix was to keep the existing model, use a small disconnected Roles table for the row layout, and update the measures to explicitly anchor on the drilled Application ID using SELECTEDVALUE with KEEPFILTERS. This ensures each role's stage value is evaluated only for the selected application and avoids any cross application leakage.

After configuring the drill through page properly (separate source page, page type set to Drillthrough, Application ID used as the drill through field, and Used as category), the role wise stage values returned accurately for all cases, including partially completed workflows.

Please find the attached .pbix file for your reference.

Thank you.


View solution in original post

5 REPLIES 5
cengizhanarslan
Super User
Super User

This usually happens because the drill-through filter is on a column, but your measures are not actually being forced to evaluate at a single ApplicationID (they’re evaluating in a broader context, or through the “wrong” relationship).

The fix is to make every “role/status” measure explicitly anchor itself to the drill-through Application ID and (if needed) activate the correct relationship.

1) First, confirm you have a single ApplicationID in drill-through context

Create a debug measure and put it on the drill-through page:

__AppId In Context =
SELECTEDVALUE ( Applications[ApplicationID], -1 )

 

If you ever get -1, your drill-through page isn’t filtering to one ApplicationID (or you’re using the wrong field in the Drill-through well).

 

2) Anchor each role/status measure to that ApplicationID (TREATAS pattern)

Use the ApplicationID from the drill-through table, then force it onto the table your measure reads:

Recruiter Status =
VAR AppId = SELECTEDVALUE ( Applications[ApplicationID] )
RETURN
IF (
    ISBLANK ( AppId ),
    BLANK(),
    CALCULATE (
        MAX ( FactWorkflow[RecruiterPhoneScreenStatus] ),
        TREATAS ( { AppId }, FactWorkflow[ApplicationID] )
    )
)

This avoids “context drifting” when multiple tables/relationships exist.

 

3) If the value comes through an inactive relationship, activate it explicitly

Example:

Hiring Manager Status =
VAR AppId = SELECTEDVALUE ( Applications[ApplicationID] )
RETURN
CALCULATE (
    MAX ( FactWorkflow[HiringManagerReviewStatus] ),
    TREATAS ( { AppId }, FactWorkflow[ApplicationID] ),
    USERELATIONSHIP ( Applications[ApplicationID], FactWorkflow[ApplicationID] )
)

(Use USERELATIONSHIP only if you truly have an inactive relationship you need.)

 

4) Don’t use plain MAX/SELECTEDVALUE on a dimension if multiple rows exist

If your “role-based status” is derived from another table (events/notes/etc.), always reduce it with a deterministic rule (latest date, highest step, etc.):

Interview Status =
VAR AppId = SELECTEDVALUE ( Applications[ApplicationID] )
RETURN
CALCULATE (
    MAXX (
        TOPN (
            1,
            FILTER ( FactStages, FactStages[ApplicationID] = AppId ),
            FactStages[StageDate], DESC
        ),
        FactStages[StageStatus]
    )
)

 

5) Common reason drill-through “works with columns but not measures”

  • Columns are filtered by the model automatically.

  • Measures can ignore that filter if:

    • you used ALL() / REMOVEFILTERS() somewhere upstream

    • you rely on a relationship path that’s ambiguous

    • there are multiple ApplicationIDs in context

So if you have measures like:

CALCULATE ( ..., REMOVEFILTERS(Applications) )

that will break drill-through unless you re-apply the selected ApplicationID via TREATAS.

_________________________________________________________
If this helped, ✓ Mark as Solution | Kudos appreciated
Connect on LinkedIn
AI-assisted tools are used solely for wording support. All conclusions are independently reviewed.
v-sshirivolu
Community Support
Community Support

Hi @KS7 ,
Thanks for reaching out to Community Forum.

I was able to reproduce this issue. The drill through itself works correctly, but when stage values are derived using DAX measures, the Application ID context can be lost if it isn't explicitly enforced.

The reliable fix was to keep the existing model, use a small disconnected Roles table for the row layout, and update the measures to explicitly anchor on the drilled Application ID using SELECTEDVALUE with KEEPFILTERS. This ensures each role's stage value is evaluated only for the selected application and avoids any cross application leakage.

After configuring the drill through page properly (separate source page, page type set to Drillthrough, Application ID used as the drill through field, and Used as category), the role wise stage values returned accurately for all cases, including partially completed workflows.

Please find the attached .pbix file for your reference.

Thank you.


Hi @KS7 ,

I hope the above details help you fix the issue. If you still have any questions or need more help, feel free to reach out. We’re always here to support you

 

Hi @KS7 ,
I wanted to check if you had the opportunity to review the information provided. Please feel free to contact us if you have any further questions

lbendlin
Super User
Super User

Please provide sample data that covers your issue or question completely, in a usable format (not as a screenshot).
Do not include sensitive information. Do not include anything that is unrelated to the issue or question.
Please show the expected outcome based on the sample data you provided.

Need help uploading data? https://community.fabric.microsoft.com/t5/Community-Blog/How-to-provide-sample-data-in-the-Power-BI-...
Want faster answers? https://community.fabric.microsoft.com/t5/Desktop/How-to-Get-Your-Question-Answered-Quickly/m-p/1447...

Helpful resources

Announcements
Power BI DataViz World Championships

Power BI Dataviz World Championships

Vote for your favorite vizzies from the Power BI World Championship submissions!

Sticker Challenge 2026 Carousel

Join our Community Sticker Challenge 2026

If you love stickers, then you will definitely want to check out our Community Sticker Challenge!

January Power BI Update Carousel

Power BI Monthly Update - January 2026

Check out the January 2026 Power BI update to learn about new features.

FabCon Atlanta 2026 carousel

FabCon Atlanta 2026

Join us at FabCon Atlanta, March 16-20, for the ultimate Fabric, Power BI, AI and SQL community-led event. Save $200 with code FABCOMM.