Streamlining your tech stack for maximum efficiency

Learn, explore, and grow with our knowledge hub.

Power BI Drillthrough: Build a Late-Order Action List | Smart Statistics
Smart Statistics · Practical Power BI tutorial

Power BI Drillthrough: Build a Late-Order Action List

A supplier chart flags a problem. A useful detail page tells the buyer which purchase-order lines need a call. Build that journey with sample data, a clear definition of late and checks that stop the detail from contradicting the KPI.

15 October 2026 · UK procurement teams · Power BI Desktop

Purchase order follow-up Illustrative example · Snapshot: 15 October 2026 · GBP excluding VAT
Late order lines 5 Illustrative example
Distinct late orders 4 Illustrative example
Late remaining value £18,200 Illustrative example
Oldest delay 7 days Illustrative example
Late remaining value by supplier — Illustrative example Illustrative example: Arden £9,200, Beacon £6,000 and Cedar £3,000; all sites, GBP excluding VAT. Late remaining value · Illustrative example Arden · £9,200 · selected supplier Beacon · £6,000 Cedar · £3,000
  • Context retained Supplier and agreed site scope travel into the detail.
  • Late lines only Order, line, due date, remaining quantity and buyer.
  • Action in the source system The buyer records a revised promise and next follow-up.

All dashboard data is an Illustrative example. The chart highlights a proposed selection; this HTML dashboard is a visual example, not a connected Power BI report.

Define the job before the visual

Give the buyer a precise question

Which open lines from this supplier were due before the reporting date, still have quantity outstanding and belong to my selected site?

Agree the grain

One row represents one purchase-order line. A single order can contain several late lines. Keep both the order number and line key so the table cannot silently group distinct lines together.

Agree what late means

This example requires Status = Open, remaining quantity above zero and DueDate earlier than the snapshot date. Due today is not late. Closed and cancelled lines are excluded.

Agree what value means

Remaining quantity × unit price, in GBP excluding VAT. This is outstanding purchase value, not cash lost or a saving available. Do not add different currencies without an agreed conversion policy.

Build it in Power BI Desktop

A repeatable route from chart to order line

Work in a new blank report. Every company, person and transaction below is fictional. The fixed snapshot makes the expected answers repeatable.

Load the teaching dataset

Choose Transform data → New source → Blank query. Open Advanced Editor, replace its contents with the M below and name the query OrderLines. Choose Close & Apply. The query creates eight lines and derives the late flag and remaining value.

let
    // Fixed teaching snapshot, not today's live position.
    AsOf = #date(2026, 10, 15),
    Source = #table(
        type table [OrderNo = text, LineNo = number,
            Supplier = text, Site = text, DueDate = date,
            Status = text, RemainingQty = number,
            UnitPriceGBP = number, Buyer = text],
        {
            {"PO1001",1,"A100 | Arden Components","North",#date(2026,10,9),"Open",20,120,"Alex"},
            {"PO1001",2,"A100 | Arden Components","North",#date(2026,10,12),"Open",10,180,"Alex"},
            {"PO1002",1,"A100 | Arden Components","South",#date(2026,10,14),"Open",50,100,"Alex"},
            {"PO1003",1,"B200 | Beacon Supplies","North",#date(2026,10,8),"Open",30,200,"Sam"},
            {"PO1004",1,"C300 | Cedar Industrial","South",#date(2026,10,13),"Open",20,150,"Jo"},
            {"PO1005",1,"B200 | Beacon Supplies","North",#date(2026,10,15),"Open",10,70,"Sam"},
            {"PO1006",1,"C300 | Cedar Industrial","South",#date(2026,10,5),"Closed",0,100,"Jo"},
            {"PO1007",1,"A100 | Arden Components","North",#date(2026,10,2),"Cancelled",10,50,"Alex"}
        }
    ),
    Typed = Table.TransformColumnTypes(Source,
        {{"LineNo", Int64.Type}, {"UnitPriceGBP", Currency.Type}}),
    WithKey = Table.AddColumn(Typed, "OrderLineKey",
        each [OrderNo] & "-" & Text.From([LineNo]), type text),
    WithValue = Table.AddColumn(WithKey, "RemainingValueGBP",
        each [RemainingQty] * [UnitPriceGBP], Currency.Type),
    WithLate = Table.AddColumn(WithValue, "IsLate",
        each if [DueDate] = null then false else
            [Status] = "Open" and [RemainingQty] > 0
            and [DueDate] < AsOf, type logical),
    WithDays = Table.AddColumn(WithLate, "DaysLate",
        each if [IsLate] then Duration.Days(AsOf - [DueDate])
            else 0, Int64.Type),
    WithSnapshot = Table.AddColumn(WithDays, "SnapshotDate",
        each AsOf, type date)
in
    WithSnapshot

The snapshot is deliberately fixed at 15 October 2026. In production, replace it with an authoritative business snapshot date delivered alongside the order extract. A new calendar day does not make an imported dataset current. Display the snapshot date prominently and agree the UK reporting cut-off.

Quarantine missing due dates for correction rather than treating them as healthy orders. The sample excludes them from the late flag; monitor their count separately. Validate duplicate line keys, negative quantities and unrecognised statuses before adopting the calculation.

Create the measures

Under New measure, create each definition separately. Format Late Remaining Value GBP as pounds sterling with zero or two decimal places; keep the count measures as whole numbers.

// Create each definition separately using New measure.
Late Lines =
COALESCE(
    CALCULATE(COUNTROWS(OrderLines),
        KEEPFILTERS(OrderLines[IsLate] = TRUE())), 0)

Late Orders =
COALESCE(
    CALCULATE(DISTINCTCOUNT(OrderLines[OrderNo]),
        KEEPFILTERS(OrderLines[IsLate] = TRUE())), 0)

Late Remaining Value GBP =
COALESCE(
    CALCULATE(SUM(OrderLines[RemainingValueGBP]),
        KEEPFILTERS(OrderLines[IsLate] = TRUE())), 0)

Detail Heading =
"Late orders | " &
SELECTEDVALUE(OrderLines[Supplier], "Select one supplier")

KEEPFILTERS intersects the late condition with the current context. Do not remove supplier or site filters to force a grand total into the detail page. The distinct order count assumes OrderNo is unique across the reporting scope; otherwise use a company-plus-order key.

Build the supplier overview

Create a page named Supplier overview. Add cards for the three numeric measures, a bar chart with OrderLines[Supplier] on its category axis and Late Remaining Value GBP as its value, and a slicer using OrderLines[Site]. Sort the chart by value descending.

With no site selection, expect 5 late lines, 4 late orders and £18,200 — Illustrative example. Use the combined supplier code and name supplied in the sample, rather than assuming supplier names are unique.

Create the detail destination

Add a page named Late order detail. Select its canvas and find the Drillthrough field well in the report-building pane. Add the exact OrderLines[Supplier] column used by the chart. Retain the automatically created Back button.

Add OrderLines[IsLate] to Filters on this page and select True. Add a table containing OrderLineKey, OrderNo, LineNo, Supplier, Site, DueDate, RemainingQty, RemainingValueGBP, DaysLate and Buyer. Set the raw numeric columns to Don't summarise where applicable and sort DaysLate descending.

Add a card using Detail Heading, plus cards for late lines and late value. Display SnapshotDate as a date, not its automatic hierarchy. The explicit page filter is essential: filtering inside a measure does not automatically restrict the rows of another visual.

Make navigation discoverable

Right-click the Arden supplier bar and choose Drillthrough → Late order detail. Confirm the supplier heading and use Back to return. Then add a source-page button labelled View late order lines, enable its Action, choose Drillthrough and set the destination.

Place an instruction beside it: “Select one supplier, then view late order lines.” In Desktop editing mode, hold Ctrl while clicking to test the button. Test the enabled and disabled states. A plain page-navigation action is not a substitute for passing drillthrough context. Keep the right-click route available while testing button behaviour.

Prove the filter contract

Compare the report with this acceptance table. All figures are an Illustrative example calculated from the supplied dataset. Clear the destination's temporary design filters before the final test.

Illustrative example · Fixed snapshot: 15 October 2026
Test context Late lines Late orders Late value Evidence
Overview · all sites 5 4 £18,200 Five late lines across three suppliers.
Arden detail · all sites 3 2 £9,200 PO1001-1, PO1001-2, PO1002-1.
North selected → Arden detail 2 1 £4,200 Only PO1001-1 and PO1001-2.
Beacon detail · all sites 1 1 £6,000 PO1003-1 only; PO1005 is due today.

For the empty-state test, use the Site slicer and a temporary Supplier slicer to select North and Cedar together: there are no matching sample lines. Cards should show zero and the table should be empty; no unrelated supplier should appear. Verify this state using slicers rather than expecting a zero-value bar to provide a drillthrough target.

Best practice before release

Keep navigation, security and action distinct

A hidden page is still a page

Hide the destination from normal tabs if that improves navigation. Apply model security for restricted site access and test a representative viewer. Workspace Admin, Member and Contributor roles are not restricted by Power BI RLS.

A snapshot is not a live promise

Keep refresh ownership with the data owner. Agree when a failed or stale refresh makes the report unsuitable for chasing suppliers. Show the source snapshot and provide a route to check the current purchasing record.

A detail page does not close work

The buyer records the supplier response, revised promise and next follow-up in the purchasing system. Keep the original due date if you need to measure promise reliability; overwriting it can conceal repeated slippage.

These operating choices are Smart Statistics recommendations. Platform security behaviour is documented in Microsoft's row-level security guidance .

Diagnose before changing the model

When the journey gives the wrong answer

First checks for a supplier drillthrough page
Symptom Likely failure Practical check
No destination appears Source and destination use different fields. Use the same unaggregated Supplier column, not a lookalike label from a disconnected table.
Cards look right; table looks wrong Only the measures enforce lateness. Inspect the IsLate page filter and the underlying line keys.
North selection includes South Site context was not carried, or a measure removes it. Inspect the destination filter pane; compare the North-to-Arden acceptance case.
Production totals multiply Duplicate line keys or an unsuitable join. Compare row count and unique line keys before and after merging supplier data.

Interactive release check

Can a buyer trust the next click?

Tick only checks you have evidenced. This local checklist does not submit or save your answers. Its score supports review; it does not certify the report.

Evidence available

Adoption and business impact

Measure the work the page helps complete

Let a buyer lead the first demonstration: select a supplier, identify one late line and record the next action in the purchasing system. The procurement lead owns escalation rules; the data owner owns definitions and refresh; the report owner maintains navigation and tests.

Measure usability

Observe the time from identifying a supplier problem to finding the correct order line. Record whether users needed another export or help locating the detail. Compare equivalent tasks before and after the change.

Measure follow-through

Track late lines with a named owner and dated next action, plus how long unresolved lines remain open. Do not claim the report reduced supplier lateness without separating reporting changes from supplier and demand changes.

Frequently asked questions

Power BI drillthrough FAQs

Is drillthrough the same as drilling down?

No. Drillthrough opens another report page using the selected context. Drill down explores levels within a visual hierarchy.

Why does the detail table show orders that are not late?

A late-order measure filters its calculation, not every other visual. Apply IsLate = True as a filter on the detail page so its table and cards share the same scope.

Why is my drillthrough destination missing?

Check that the exact Supplier column used in the source visual is also in the destination drillthrough field well. Start by right-clicking one supplier data point.

Does this page update the purchasing system?

No. This tutorial creates a read-only report. Buyers record revised promises and follow-up actions in the agreed purchasing system; those changes appear after the reporting data is refreshed.

Does hiding the detail page secure its data?

No. Hiding a page only changes navigation. Use the appropriate model security and permissions, and test the report with a representative restricted viewer.

Sources and scope

Documented features, explicit teaching assumptions

Microsoft documentation checked on 15 October 2026. The late-order rules, dataset, layout and operating recommendations are original teaching examples. All displayed business figures are an Illustrative example, not customer results. Desktop pane locations can differ by version.