A three-day case study in Technology Business Management (TBM). The company, “Meridian Group”, is fictional, and all data is synthetic.
Meridian’s infrastructure costs sit in the General Ledger by cost pool (labour, hardware depreciation, licences, data centre, public cloud, managed services, network). Business owners see one fully-loaded number and can’t tell what drives it or who consumes it. The work here attributes that $40.2M quarter down to products, applications, programs and funding requests, runs two what-if scenarios, and packages the result for a CFO.
Stack: Snowflake SQL, Power BI (PBIP / TMDL, DAX), dimensional modelling, DuckDB + Python for the local run.

Full deck (PDF) · Dashboard wireframes · Executive summary

pip install duckdb matplotlib
python run_local.py # loads data/, runs both SQL scripts, checks the results
python 02_scenarios/plot_sensitivity.py # redraws the heatmap
run_local.py runs the same SQL that targets Snowflake, on DuckDB. It then checks that:
DC cost × 15% × (cloud factor − share of DC cost shed)It also writes the full sensitivity grid to S1_sensitivity_grid.csv.
| Folder | Contents |
|---|---|
01_attribution/ |
ER diagram (SVG), data model notes, allocation + variance SQL, methodology note |
02_scenarios/ |
Parameterised scenario SQL, assumptions, results, sensitivity grid and heatmap |
03_powerbi/ |
Semantic model diagram, DAX measures, what-if parameter design, dashboard wireframes |
04_executive_summary/ |
One-page summary for a non-technical CFO |
presentation/ |
19-slide deck (PPTX and PDF) |
powerbi/ |
Working Power BI project (PBIP) built on the Snowflake tables |
data/ |
Synthetic source tables: 8 dimensions, 4 facts |
fact_allocation_map says which consumption driver (vCPU-hours, GB stored, tickets, headcount) splits each pool; fact_consumption supplies the weights.SCENARIO_PARAM): migration share, cloud cost factor, share of data-centre cost shed, and the vendor rate rise.The full reasoning is in A_Methodology_Note.md and B_Scenario_Results.md.
Snowflake. Load the CSVs in data/ into a schema (the scripts use CASE_STUDY.MERIDIAN), then run 01_attribution/A_Attribution_Variance.sql followed by 02_scenarios/B_Scenario_Model.sql.
Power BI. Open powerbi/TechCostTransparency.pbip in Power BI Desktop. In each table’s source, replace <your-account> with your Snowflake account identifier, then refresh.