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!Vote for your favorite vizzies from the Power BI Dataviz World Championship submissions. Vote now!
Hi there,
I have a column chart with two hierarchy levels H1 and H2 on the x-Achsis an drillthrough-pages for both levels. I want to use a drillthrough-button to navigate to the corresponding pages. For target definition I use a measure like this:
This works fine when I either select a column on hierarchy level H1 or H2. Drillthrough-button gets activated, click the button and it does what it is supposed to do. But when it comes to drill down in the column chart from H1 to H2, the button is not activated. I first have to select the filtered element of H1 on the x-Achsis or an element of H2 to get the button activated.
Well, that seems to be an inherent characteristic of the drilllthrough-button and I could live with that. As long as I could reproduce this behaviour in a measure. Because for the button-text I want to use another measure like this:
DT_Button_Text =
IF(HASONEVALUE(dim[H2]), "drill through for " & SELECTEDVALUE(dim[H2]),
IF(HASONEVALUE(dim[H1]), "drill through for " & SELECTEDVALUE(dim[H1]),
"select a value for H1/H2 to drill through"
)))
So, right now, when users drill down, the button shows "drill through for H1". But the button is not activated. They first have to select H1-value on the x-Achsis. In order not to confuse users: Any ideas how I can modify my DT_Button_Text-Measure to show "select a value for H1/H2 to drill through" again in the moment where column chart is drilled down but no further selection is made? H1 has one value and is filtered but that seems not to be sufficient to activate the button. PowerBI seems to make a difference between drilldown and the selection done via the chart. And I can't figure out which function to use to reproduce this difference.
Btw.: datamodel is quite simple and goes like this:
Fact-table:
| H2 | value |
| A | 2 |
| A | 3 |
| B | 5 |
| B | 4 |
| C | 9 |
| C | 2 |
| D | 3 |
| D | 6 |
dimension-table:
| H1 | H2 |
| Z | A |
| Z | B |
| Y | C |
| Y | D |
Thanks a lot for any help!
Solved! Go to Solution.
Hii @jonas_poskowsky
You're right SELECTEDVALUE(), ISFILTERED() and HASONEVALUE() all return values during drill-down, but Power BI still does not treat that as a true data-point selection. Drill-down only changes filter context; it does not create a “point selection event”, and the drill-through button activates only when a data point is explicitly clicked at the lowest level. This internal selection state is not exposed in DAX, so there is no function that allows us to distinguish “drill-down context” vs “actual point selection”. That’s why the button can detect the difference, but your custom measure cannot it’s a limitation of the visual interaction model, not your DAX.
Hi @jonas_poskowsky,
Thank you for reaching out to the Microsoft Fabric Forum Community, and special thanks to @rohit1991 for prompt and helpful responses.
Just following up to see if the Response provided by community members were helpful in addressing the issue. if the issue still persists Feel free to reach out if you need any further clarification or assistance.
Best regards,
Prasanna Kumar
Hii @jonas_poskowsky
The drill-through button is not activating because Power BI only enables a drill-through target when the lowest level of the hierarchy is actually selected in the visual. A drill-down view still shows aggregated values, so even if the user clicks a bar, Power BI does not treat it as a full row-level selection therefore SELECTEDVALUE() returns blank and the button stays disabled. This is expected behaviour and cannot be overridden with DAX. The only way to activate the button is to ensure the user selects an actual data point at the detail level (e.g., H2) rather than a drill-down aggregate. Your measure logic is correct; the limitation is the interaction model of drill-down vs drill-through in Power BI.
Hi Rohit,
thanks for your reply! Actually, with the mere drilldown Selectedvalue(dim[H1]) does not stay blank, it does return a value. Nevertheless, the button gets inactive.
And that selectedvalue(dim[H1]) does return a value is exactly the problem. Otherwise, I would have tried:
DT_Button_Text =
IF(HASONEVALUE(dim[H2]), "drill through for " & SELECTEDVALUE(dim[H2]),
IF(SELECTEDVALUE(dim[H1]) is Blank(), "select a value for H1/H2 to drill through",
IF(HASONEVALUE(dim[H1]), "drill through for " & SELECTEDVALUE(dim[H1]),
"select a value for H1/H2 to drill through"
)))
But since selectedvalue(), isfiltered() and hasonevalue() all are returning a value, my DT_Button_Text-Measure can't distuingish between mere drill down and selection in the visual. And this is what the Button itself seems to be doing....
I just want to reproduce the buttons behaviour, in order to give users orientation wether it is worth clicking the button or not.
Hii @jonas_poskowsky
You're right SELECTEDVALUE(), ISFILTERED() and HASONEVALUE() all return values during drill-down, but Power BI still does not treat that as a true data-point selection. Drill-down only changes filter context; it does not create a “point selection event”, and the drill-through button activates only when a data point is explicitly clicked at the lowest level. This internal selection state is not exposed in DAX, so there is no function that allows us to distinguish “drill-down context” vs “actual point selection”. That’s why the button can detect the difference, but your custom measure cannot it’s a limitation of the visual interaction model, not your DAX.
Vote for your favorite vizzies from the Power BI World Championship submissions!
If you love stickers, then you will definitely want to check out our Community Sticker Challenge!
Check out the January 2026 Power BI update to learn about new features.
| User | Count |
|---|---|
| 7 | |
| 6 | |
| 3 | |
| 3 | |
| 2 |
| User | Count |
|---|---|
| 17 | |
| 11 | |
| 11 | |
| 6 | |
| 5 |