One governed model across a multi-brand retail group
Multi-brand retail
A retail group of several brands, each with its own systems and its own answer to what a margin is. One governed Fabric model now spans them, with one definition of revenue, margin and inventory.
Every brand could report on itself, but the group could not compare them without a week of manual work. We replaced an 8-year-old SQL Server warehouse and a nightly Excel chain with Microsoft Fabric, and one definition per metric made the comparison a filter selection.
definition of revenue, margin and inventory
1
sales channels: stores, online shops, wholesale
3
semantic models on one lakehouse
4
months, as lead architect with a delivery team
10
Anonymised by sector and size, because the confidentiality that protects this client would protect you too. Sector and outcomes are real; identifying detail is not.
Before and after
3 definitions
Brand A marginIts own definition, in its own reporting
Brand B marginIts own definition, in its own reporting
Brand C marginIts own definition, in its own reporting
1 definition
One margin definitionDecided once, upstream, in the governed model
Genuine: sales channelStores, online shops and wholesale, modelled as a dimension
Genuine: brand differenceCarried in the model and labelled where it genuinely exists
Habit onlyRemoved: one definition wins
3 brands answering what a margin is 3 ways, resolved into one definition. The differences that are real are modelled and labelled; the ones that were habit are removed.
The engagement in full
Client
A multi-brand retail group of 500 to 1,000 people, with around 50 stores, 3 online shops, a wholesale business and around 200 BI consumers.
Situation
Every brand could report on itself and the group could not report on any of them together without a week of manual work. That made group-level questions expensive enough that people stopped asking them, which is the quiet cost nobody puts in a business case.
Mandate
Introduce Microsoft Fabric from scratch in place of an 8-year-old SQL Server warehouse and a nightly Excel chain, and give the group one answer per metric.
What we built
FoundationA review of each brand’s reporting that showed where the brands’ figures could not be compared, margin first, and ended in a fix-first list.
ActivationOne governed semantic model spanning the brands, with a single definition per metric and the brand differences that genuinely exist modelled rather than argued about.
Comparison as a filter selection
Once revenue, margin and inventory were defined independently of the channel, consolidating the group stopped being a piece of work. The group, one brand or one channel is now a filter on the same model. Before, a week of manual consolidation; now, a filter selection.
A customer master as its own data product
Customer identity resolution was built as its own data product, so one customer is one record whichever channel they buy through: store customers from the tills, online shop customers from 3 shops and wholesale accounts from the wholesale business, resolved into a persistent customer master.
Store revenue in near real time
Till data streamed into a KQL database replaced a 2-day reporting delay on store revenue.
Store tillsAround 50 stores
EventstreamEvents carried as they happen
KQL databaseReal-Time Intelligence
Store revenueWithin the trading day
How it was delivered
Delivered as lead architect with a specialist delivery team, and handed over with runbooks and Excel enablement.
.pbip under GitFrom day one
Optimise firstBefore any capacity increase
RunbooksFor the client’s team
Analyze in ExcelEnablement at handover
The architecture
Databricks stays the processing engine and is mirrored into OneLake rather than copied. The semantic models read the lakehouse over Direct Lake, with no nightly import.
Architecture decisions
Decision
Rejected alternative
Why
One model spanning the brands
One model per brand
Faster to build, but it keeps the reconciliation problem. The comparison is the deliverable.
Differences modelled, not flattened
One margin forced on every brand
A genuine difference is modelled and labelled; one that was habit is removed.
Databricks kept and mirrored
Rebuilding processing in Fabric
Mirrored cross-tenant into OneLake, so Power BI reads it over Direct Lake with no nightly import.
Group truth owned apart from consumer views
One layer serving every use
A consumer view can change without touching the group figures.
What the client has today
One governed semantic layer across the brands, with the real differences modelled.
Group-level comparison as a filter selection, without the week of manual consolidation.
Store revenue within the trading day instead of 2 days later.
A persistent cross-channel customer master, built as its own data product.
Where it left them
The group is compared by brand or by channel with one click, on figures that mean the same thing in every brand.
A retailer with Microsoft Fabric already in production, semantic models over Direct Lake and store revenue streaming in, who wanted forecasting, Copilot questions and anomaly detection on top of it.