Executive Dashboard Rebuild
- Power BI
- DAX
- Power Query
- SQL
- Databricks
- โOne reporting layer for four functions across 15 APAC markets
- โ13,000+ scanners and USD 200M+ in tracked revenue since 2022
- โKPI lineage went from a one to two hour hunt to minutes
Context
The Executive Dashboard was the reporting layer APAC leadership used to see sales and operations across all 15 markets in one place, instead of opening a dozen separate dashboards. Its audience was the VPs running regional sales, marketing, finance, operations, and the iTero business. Over time it stopped being a high-level summary and became the platform the whole region ran reporting on: sales motion, shipment fulfilment, backlog, distributor mix, product adoption, and channel split. It now tracks over 13,000 scanners and more than USD 200 million in revenue since 2022, and is used daily across Sales Ops, Marketing, Finance, and Commercial.
What I inherited
The backend was in a bad state. The data model was bloated and unstable: overlapping tables used inconsistently from page to page, three different product mapping tables from three source systems each with their own naming, and duplicate measures computing the same thing slightly differently, which inflated memory and produced conflicting numbers across visuals. Table relationships were tangled enough that filters propagated in unexpected ways. Tracing where a single KPI came from could take one to two hours.
The rebuild
I proposed a full rebuild and did it from the data layer up:
- consolidated the redundant tables into a small set of curated, standardised datasets, including one unified product mapping table that reconciled naming across every source system, stored as a view on Databricks so every dashboard classified products the same way;
- consolidated multi-year FX rates into one structured table on Databricks and applied it consistently to all revenue logic, so markets reconciled against each other;
- restructured the Power BI model: dropped unused columns, simplified the Power Query steps, deleted the legacy measures with unclear or overlapping logic, and pointed every page at one validated measure or table instead of its own copy;
- rewrote the SQL with consistent, modular naming and shared logic patterns so future changes were predictable.
Access control
Revenue and shipment data is sensitive, so I built row-level security on top of the new model. Visibility is driven by user email mapped to country codes: a market user sees only their own country, while regional and APAC leaders see multiple markets. It had to work with both Power BI Service roles and country-by-country overrides without breaking the rest of the report.
Designing the pages around what each function needed
Each team got pages built for their actual questions rather than a generic overview:
- Sales: product mix (Lumina, Accelerator, Go-Digital, Rental), trade-in and upgrade volumes, and scanner lifecycle timing such as warranty expiry and service renewal;
- Operations: a live backlog tracker flagging delayed shipments with SAP order references and aging metrics to prioritise the urgent ones;
- Finance: shipment-level logic tagging each shipment as +1 and each cancellation as -1 to support revenue recognition and quarter-close reconciliation;
- Marketing: segmentation by customer type, lead source, and campaign program to assess return on spend.
Structured around the questions being asked
On top of the function-specific pages: an Overview page for contract value, units, shipments, recognised revenue, backlog, and progress against AOP and latest-estimate targets; a Business Model Matrix showing how each program contributes to revenue and volume; a Distributor Analysis page comparing revenue and gross margin across direct and distributor-led sales and tracking quota attainment; and raw export pages, including a finance-specific one reflecting net sales movements, for offline analysis and audit.
Result
What had been a fragile, unpredictable report became one of the most stable and trusted dashboards in the APAC reporting environment. Teams from four functions align on the same numbers, the recurring data-source conflicts are gone, and troubleshooting or extending the report takes a fraction of the time it used to. It became the reference other dashboards on the team were rebuilt against.
What I'd improve
A couple of soft spots remain. The FX rates still originate in a manually maintained Excel file uploaded to Databricks, which should move to a governed feed. And the rebuild would be more durable with written documentation of the model and a small set of automated data-quality checks, so the next person inheriting it does not start from where I did.