Procurement Analytics & AI Masterclass Free chapter

Free guide: Power BI

Build a procurement dashboard in Power BI: the model, the DAX measures and four pages that answer real questions

A procurement dashboard earns trust when every card can be checked. This guide sets out the model, the core measures and the page design from the Starter Kit's build guide. Expected values are computed from the kit's fictional dataset (150 invoices, NGN 552,660,500), so you can test your own build against them.

1. The model

  1. Get Data, Text/CSV, then Transform Data. Clean types and trim text in Power Query. Name the table Spend.
  2. Create a date table and mark it as the date table:
    Calendar = CALENDAR ( DATE ( 2025, 1, 1 ), DATE ( 2026, 12, 31 ) )
  3. Relate Calendar[Date] one-to-many to Spend[InvoiceDate], single direction. Use Calendar fields in every date slicer and axis.

Full calendar years keep time intelligence working. Avoid bidirectional relationships; they create ambiguous filter paths.

2. Core measures

Total Spend = SUM ( Spend[Amount_NGN] )                         -- 552,660,500
Invoice Count = DISTINCTCOUNT ( Spend[InvoiceNumber] )          -- 150
PO Spend = CALCULATE ( [Total Spend], KEEPFILTERS ( Spend[POCompliant] = "Y" ) )
PO Compliance % = DIVIDE ( [PO Spend], [Total Spend] )          -- 82.03%
PO Invoice Count = CALCULATE ( [Invoice Count], KEEPFILTERS ( Spend[POCompliant] = "Y" ) )
PO Count % = DIVIDE ( [PO Invoice Count], [Invoice Count] )     -- 70.00%
Contracted Spend = CALCULATE ( [Total Spend], KEEPFILTERS ( Spend[ContractedSupplier] = "Y" ) )
Maverick Spend = CALCULATE ( [Total Spend], KEEPFILTERS ( Spend[ContractedSupplier] = "N" ) )
Contracted Share % = DIVIDE ( [Contracted Spend], [Total Spend] )   -- 62.06%
Maverick Share % = DIVIDE ( [Maverick Spend], [Total Spend] )       -- 37.94%
Review Population Spend =
    [Total Spend]
    - CALCULATE ( [Total Spend],
        KEEPFILTERS ( Spend[POCompliant] = "Y" ),
        KEEPFILTERS ( Spend[ContractedSupplier] = "Y" ) )        -- 257,488,500
Weighted Terms Days =
    DIVIDE ( SUMX ( Spend, Spend[PaymentTermsDays] * Spend[Amount_NGN] ), [Total Spend] )   -- 28.99

DIVIDE returns blank, not an error, when the denominator is empty. KEEPFILTERS makes a measure respect slicers instead of overriding them. Maverick spend counts the N flag directly, so blank flags never inflate it.

3. Four pages, each answering one question

PageQuestionContent
OverviewWhere is the money, and is it controlled?Cards for total spend, PO compliance, contracted share, top-10 share and weighted terms. Category bar. The PO by contract matrix.
SuppliersWho do we depend on?Ranked supplier table with share and cumulative share; Pareto chart. A note that criticality is not in the data.
ControlsWhere should exceptions be reviewed?Spend and count PO rates side by side by department; detail of the 11 invoices with neither a PO nor a contract.
Terms and cashAre we paying faster than needed?Weighted terms by supplier; spend by terms bucket.

4. Design rules

5. Acceptance tests before anyone sees it

TestExpected
No filtersEvery card matches the values above
Location = Port HarcourtTotal NGN 63,305,000; PO compliance 68.24%
Department = FinancePO compliance 53.96%; maverick NGN 88,175,000
Year 2025 / 2026NGN 297,360,500 / NGN 255,300,000
No matching rowsRatios blank, not 0%

Keep a hidden QA page listing each measure beside its expected value, and record the date and version whenever you publish.

Go further

The Starter Kit teaches this method end to end on the practice dataset: a 54-page guide, a click-by-click Excel and Power BI build guide, 29 exercises and 3 case studies with worked answers, 28 AI prompts, a self-checking workbook and a 29-KPI dictionary.

CA$15 once (about US$11), plus local sales tax where it applies, shown at checkout. Secure checkout by Stripe. Instant download. All sales final.

Free one-page KPI cheat sheet: download the PDF, no email needed.

More free guides