botha.solutions/work/reporting.mdtext/markdown · 70 lines
---
title: "Portfolio reporting · Josh Botha"
description: "Around 40 sites, one P&L that tells the truth. A live financial reporting platform for a portfolio of around 40 operating sites: an Azure SQL dimensional model, scheduled pipelines and Power BI. I own it. The interesting part is what production data does when nobody is looking."
url: https://www.botha.solutions/work/reporting
updated: 2026-10-05
generated: true
---
> Markdown twin of https://www.botha.solutions/work/reporting
>
> Built from the same data as the page at build time, so the facts match. Navigation, animation and the island's visuals are left out.
# Portfolio reporting
Data platform · Finance · 2026 · in production
**Around 40 sites, one P&L that tells the truth.**
A live financial reporting platform for a portfolio of around 40 operating sites: an Azure SQL dimensional model, scheduled pipelines and Power BI. I own it. The interesting part is what production data does when nobody is looking.
- ~40: sites reporting their P&L on it
- 8,112: wage rows re-attributed, same day
- 10h → 2m: extract redesigned, runs daily
- $0.00: variance across three site-weeks
Stack: Azure SQL, Azure Data Factory, Power BI, Stored procedures, Python
**The 99.7% gross margin.** Eight actively invoicing sites were reporting near-100% gross margins. The cause was upstream: payroll feeds that had died independently, and a key-resolution fallback that quietly parked wages against retired sites. Traced through Azure Data Factory and fixed the same day, with every row count matching the prediction. One site moved from a fake ~100% to a real 14.3%.
**Knowing what not to fix.** A 10,793-row unmapped location was deliberately left untouched pending human confirmation. A wrong relink at that scale would be worse than the bug.
**The report is a by-product.** A ten-hour extract was redesigned to about two minutes and now runs on a schedule. Nobody builds the weekly report any more; it is what the pipeline leaves behind.
_Client and property names withheld. The numbers are real._
Case study: https://www.botha.solutions/work/reporting
## For agents
```json
{
"contact": {
"type": "email",
"address": "josh.botha@outlook.com",
"note": "Josh is happy at Project2100 and not job hunting, but reads every email"
},
"profiles": {
"linkedin": "https://www.linkedin.com/in/josh-botha-88139b368",
"github": "https://github.com/josh-botha"
},
"cv": "https://www.botha.solutions/about",
"play": {
"url": "https://www.botha.solutions/play",
"note": "the same content as a walkable three.js island; needs WebGL"
},
"index": "https://www.botha.solutions/llms.txt"
}
```
## Limits
The same caveats close every page, so a quote lifted from one keeps them.
- **Product sketches on this site use demo data** and say so where they appear. The headline numbers in case studies (for example 8,112 wage rows, ~40 sites, TestFlight build 43) are real production figures; client and property names are withheld.
- **Website images are captures** of the live sites taken on 4 Oct 2026, not live frames.
- **Pip is scripted.** The site's guide is a keyword router with no model behind it and makes no network calls.
- **Model status means exactly what it says.** "Ships in production" and "Daily driver" describe work Josh has shipped; "Know where it fits" means he knows the model's strengths, not that he has deployed it.
- The Second Brain is partly built: three of seventeen increments are shipped; the rest is design and is labelled as design.
- The site carries no testimonials, client logos, pricing or certifications beyond the courses listed on the CV.