About Client
What They Do
- Operate 150+ quick-service and casual dining locations
- Run 18+ marketing campaigns per year across the full network
- Process 20,000+ transactions daily across all locations
- Manage 7,000+ menu items and 15,000+ guest interactions per campaign cycle
Their Scale Includes
Problem Statement
The Challenge
What Was Going Wrong
1. Campaign Data Didn't Match Sales Data
The marketing team reported one set of numbers. Finance pulled another. A 15% error rate in campaign-to-transaction data meant every campaign report was suspect. With 18+ campaigns per year across 150+ locations, those misallocated dollars compounded with every cycle — and decisions about what to repeat, what to kill, and where to shift budget were all built on flawed data.
2. Overlapping Campaigns Made Comparison Impossible
With 25+ campaigns running concurrently across different locations and time periods, there was no clean way to isolate what drove results. No reliable pre-campaign baseline. No automated year-over-year comparison. Every analysis was a manual exercise with a disclaimer attached.
3. Workforce Metrics Were Inconsistent Across Teams
The same KPI returned three different answers depending on which source table HR, operations, or finance queried. With 10+ disconnected data sources, there was no single version of the truth — and no one trusted the numbers enough to act on them.
4. Reports Were Too Slow to Be Useful
190M+ rows were processed on the fly every time someone opened a report. Five-minute load times in a fast-moving restaurant operation is the same as no data at all. Managers stopped checking dashboards and went back to gut instinct.
Solution Provided
What Is a Semantic Model in Simple Terms?
How the System Works:
01
Ingest: Collect Everything, Break Nothing
- Raw data from 10+ sources flows into the Bronze layer of Azure Data Lake untouched
- Captures 20,000+ daily transactions and 190M+ historical rows in original format
- Complete audit trail preserved — nothing filtered, nothing altered at source
02
Clean: Standardise and Reconcile
- Silver layer deduplicates, unifies naming conventions, and resolves the 15% attribution error
- Campaign overlap fixed with composite key joins, daily grain normalisation, and priority attribution rules
- Workforce data from 10+ sources merged into consistent, query-ready tables
03
Model: Build the Intelligence Layer
- Gold layer houses the semantic model with all 50+ KPI definitions and business logic
- Dynamic period-over-period comparisons built in — pre-campaign, month-over-month, year-over-year
- 30+ operational KPIs redesigned from scratch for actual restaurant decision-making
04
Deliver: Dashboards That Get Used
- Campaign Analytics dashboard — compare any campaign vs. any baseline across all 150+ locations
- Turnover Analytics dashboard — real-time workforce metrics loading in under 30 seconds
- Both dashboards pull from the same semantic model — same numbers, every team, every time
Results
System Performance
| Metric | Value |
|---|---|
| Data Accuracy | >98% (up from ~85%) |
| Report Load Time | Under 30 seconds (down from 5+ minutes) |
| Rows Processed | 190M+ |
| Campaigns Tracked Simultaneously | 25+ overlapping campaigns |
| KPIs Tracked Daily | 50+ |
| Operational KPIs Redesigned | 30+ |
| Locations Covered | 150+ |
| Data Sources Unified | 10+ |
Operational Impact
- Campaign attribution errors dropped from 15% to under 2% — marketing and finance finally report the same numbers
- Workforce metrics load in under 30 seconds — HR and ops work from one consistent dataset
- Month-over-month and year-over-year comparisons run automatically — no more rebuilding analysis every cycle
- Dashboard adoption went from near-zero back to daily use across all operations teams
Before vs After
| Area | Before | After |
|---|---|---|
| Data Accuracy | ~85% — 15% campaign attribution errors | >98% across all campaign & workforce data |
| Report Load Time | 5+ minutes | Under 30 seconds |
| Campaign Comparison | Manual, unreliable, no standard baseline | Automated: pre-campaign, MoM, YoY |
| Overlapping Campaigns | Impossible to isolate impact | 25+ concurrent campaigns tracked separately |
| Workforce Data | 10+ disconnected systems, conflicting values | Unified semantic model, single source of truth |
| KPI Quality | Generic metrics, limited operational value | 50+ KPIs tracked daily, 30+ redesigned |
| Dashboard Adoption | Low — managers stopped using them | High — fast, accurate, used daily |
| Cross-Team Alignment | Marketing, finance, HR, ops all had different numbers | All teams pull from same model, same definitions |
Tech Stack
| Layer | Technology | Role |
|---|---|---|
| Data Platform | Databricks | Data processing, transformation & pipeline orchestration |
| Storage | Azure Data Lake | Scalable cloud storage using Medallion architecture |
| Data Architecture | Medallion (Bronze/Silver/Gold) | Three-tier pattern — raw ingestion, cleaning, business-ready metrics |
| Data Modelling | Semantic Model (Star Schema) | Centralised business logic defining all KPIs & table relationships |
| Visualisation | Power BI | Interactive dashboards for campaign and turnover analytics |
| Calculation Engine | DAX | Measure definitions, dynamic comparisons & KPI calculations |