In last week’s post I mentioned that while Power BI reports (unlike Excel PivotTables) do not support the Detail Rows Expression feature, it is possible to partially work around this limitation by using the paginated report visual. In this post I’ll show you how I was able to do this and what is and isn’t possible.
Starting with the same semantic model I used for last week’s post, already published, the first major task was to create a paginated report to show the data returned by a measure’s Detail Rows Expression. I opened Power BI Report Builder, created a new paginated report and created a connection back to that semantic model. Next I created two datasets (in the paginated report sense of the term) called Customer and Product that listed all the values from the Customer column of the Customer table and the Product column of the Product table. Here are the two DAX queries I used:
EVALUATE VALUES('Customer'[Customer])EVALUATE VALUES('Product'[Product])
I then created two paginated report parameters, also called Customer and Product, which were bound to these two datasets and which were set to allow multiple values. Here’s what the Customer parameter looked like:

The Product parameter was set up the same way but bound to the Product dataset.
I then created a third dataset called Drillthrough. To get the columns for the dataset I first bound it to this DAX query:
EVALUATEDETAILROWS([Sales Amount])
Next I set up two query parameters on this dataset, also called Customer and Product, and bound them to the two report parameters created above:
I then changed the query for the dataset to the following so it could reference the two query parameters:
EVALUATECALCULATETABLE( DETAILROWS([Sales Amount]), RSCustomDaxFilter(@Customer,EqualToCondition,[Customer].[Customer],String), RSCustomDaxFilter(@Product,EqualToCondition,[Product].[Product],String))
Side note: if you’re wondering what the RSCustomDaxFilter() function is, it’s not a real DAX function but it’s a feature of paginated reports that allows you to handle multi-value parameters in DAX queries relatively easily. I blogged about it back in 2019 here and John Kerski has a good post on it here. It looks like the feature has been improved since 2019 in that the above query gets translated to DAX that looks something like this:
EVALUATECALCULATETABLE ( DETAILROWS ( [Sales Amount] ), FILTER ( VALUES ( 'Customer'[Customer] ), ( 'Customer'[Customer] IN { "Chris", "Helen" } ) ), FILTER ( VALUES ( 'Product'[Product] ), ( 'Product'[Product] IN { "Apples", "Oranges" } ) ))
The DAX generated now uses the IN operator rather than the multiple OR conditions that it used to, which is an improvement.
Finally I put a table on the report to display the output of the Drillthrough dataset. Here’s what the report looked like in design mode:
And here’s what it looked like when I ran it:
I then published the paginated report.
The second major task was to use this paginated report in a Power BI report. I opened Power BI Desktop, created a live connection to my published semantic model, then created a page with a simple matrix visual on it showing the Sales Amount measure broken down by Customer and Product:
I then created a second page and configured it as a drillthrough page and configured it to accept drillthroughs on Customer and Product:
I then added a Paginated Report visual to the page, dragged the Customer and Product columns into the Parameters pane:
And then linked the visual up to the published paginated report and mapped the paginated report’s parameters to the parameters in the visual’s parameters pane:
Finished! With all that done I could right-click on a cell in the matrix visual and drill through to the paginated report visual on the other page:
There is, however, one big problem with this approach: it is hard-coded to work with just one measure. If you have multiple measures in your source visual then you have no way of knowing which measure a user has clicked on – so there’s no way you could pass that measure’s name to the paginated report. This is a limitation of the drill through feature in Power BI; the only workaround I can think of would be to either use calculation groups or the measures table technique (as described here) instead of multiple measures so that you can capture the selection of the “measure” as the selection on a column.
I still hope that one day that workarounds like this won’t be necessary and that Power BI reports support drill to detail in the same way that Excel PivotTables do. If you agree, please leave a comment!
Agree wholeheartedly!