Project summary · DuckDB · Parquet · Kimball · Power BI · DAX
Supply Chain Analytics
A medallion lakehouse on DuckDB and Parquet feeding a Kimball star schema and a Power BI dashboard — with an executive briefing aimed at the people who sign off on inventory.
Inventory questions are rarely about inventory. They are about cash sitting still. This project follows that thread from raw movement data all the way to a briefing a supply chain lead can act on.
Questions it answers
How much working capital is trapped in stock that is not turning?
Which items and locations are driving that, and how far off target are they?
What should the operations team change first, and what is it worth?
How I built it
Lakehouse on DuckDB. Raw files land as Parquet and move through bronze, silver and gold entirely in DuckDB — no cluster, no cloud bill, same architecture.
Kimball star schema. Conformed dimensions and a declared fact grain, so measures aggregate correctly at every level instead of only at the one they were written for.
101 DAX measures. A full measure layer covering stock coverage, turns, exceptions and variance, organised so the report is filter-safe.
Executive briefing. The findings written up as a client-facing case study PDF and a briefing deck, not a screenshot dump.
Executive overviewInventory view — where the capital is sittingKimball star schema behind the report
Method and validation
Estimated trapped capital of roughly $95K — calculated as on-hand quantity × unit cost for stock exceeding the aging threshold, then attributed to the specific items and locations driving it rather than reported as a single total.
Measures are written against the star schema, so slicing by any dimension gives a defensible number.
The full build — pipeline, model, dashboard and briefing — is documented in the repo.
Honest notes
Built as a portfolio project on public data. The client-facing case study format is the same one I use for freelance work.