Main page Georgio Hajj Boutros
All case studies

Case 01 · Multi-entity manufacturing group · three continents

25+ business units, one definition of margin

Two people can bring correct numbers to the same meeting and disagree. When that happens often enough, the meeting stops being about the business and starts being about the data. This is what it took to end that argument across 25+ business units on three continents.

Role
Owned end to end
Scale
25+ business units
Systems
ERP, accounting, logistics
Team
Built solo
01 — The situation

What was actually happening

Every entity calculated margin slightly differently. Freight was inside the cost of goods in one place and below the line in another. Rebate accrual was netted at invoice in some units and settled quarterly in others. Scrap was a production number in the plants and an inventory adjustment in the ledger.

None of this was error. Each treatment was defensible, and in several cases was the correct answer for a local statutory filing. The problem only appeared at the point of comparison — when the group tried to rank units, set targets, or answer a lender's question about consolidated performance.

The visible symptom was meeting time. A monthly review that should have been about commercial decisions spent its first twenty minutes establishing whose margin number was authoritative, and frequently adjourned without establishing it.

An organisation does not have a data problem when its numbers are wrong. It has a data problem when its numbers are all right and still disagree.

02 — The constraint

Why the obvious fix does not work

The obvious move — pick one definition and mandate it — fails for a reason that is easy to miss from the centre. The local treatments were load-bearing. A unit that moved freight out of cost of goods to satisfy a group report would break its own statutory filing and its own commercial pricing, and would quietly keep a second set of numbers to run its business on. That outcome is worse than the original problem, because the divergence becomes invisible.

So the constraint was: produce one comparable number without asking any entity to stop calculating the number it actually needs.

03 — The approach

What I built

I built a governed semantic layer where each measure is defined once, in one place, and inherited by every report that uses it. Entity data arrives as source facts. The margin definition is applied centrally, above them.

The reconciliation from each local treatment to the group definition is itself modelled and published — so a controller who wants to know why their unit's number differs from the group view opens the variance rather than emailing me.

The definition is rendered inside the reporting tool, next to the figure, rather than living in a governance document. A definition nobody can find is not governance; it is paperwork.

BEFORE BU 01 own margin rule BU 02 own margin rule ⋮ BU 25 own margin rule The meeting 3 numbers, all correct the argument is about whose number is right AFTER BU 01 source data only BU 02 source data only ⋮ BU 25 source data only Governed measure defined once, inherited everywhere certifies One number explains Variance per entity Local differences are not deleted. They move out of the measure and into a published reconciliation that anyone can open.
Left: each unit computes its own margin and the disagreement surfaces in the meeting. Right: units contribute source data, one governed definition produces the comparable number, and the local differences become a published reconciliation instead of an argument.
04 — Judgement

Decisions, and what each one cost

Every one of these had a defensible alternative. The trade-off is stated because the trade-off is the point.

Decision 01

Inheritance, not negotiation

A committee converging on a single definition takes months and produces a compromise nobody owns. Defining the measure once centrally and letting reports inherit it took the negotiation off the critical path entirely.

Cost: the centre now owns a definition it must defend, in writing, every time an entity disputes it.

Decision 02

Keep the variance, publish it

The differences between local and group treatment are real information — they are where the freight terms, the rebate structures and the scrap policies actually live. Hiding them inside a single number would have destroyed the audit trail.

Cost: two numbers exist per entity, and people had to be taught which question each one answers.

Decision 03

Definition next to the figure

Governance documents are read once, at sign-off. Putting the measure definition in the tooltip, beside the number, meant the definition was read at the moment of use — which is the only moment that changes behaviour.

Cost: every definition change is now a visible, user-facing change, which slows edits down.

Decision 04

Certified and exploratory kept apart

Analysts need to slice data in ways the governed model does not anticipate. Rather than block that, I separated a certified layer that feeds the board pack from an exploratory layer that does not, and labelled both.

Cost: some duplication between layers, and a standing job to promote useful exploratory work into the certified model.

05 — Outcome

What changed

  • One comparable number with a definition traceable from the figure back to the source system.
  • Local correctness preserved — no entity was asked to abandon a treatment it needed.
  • Disagreement moved up a level, from arithmetic to strategy, which is where disagreement is useful.
  • The reconciliation became self-service, removing a recurring interrupt from every close cycle.
  • Dimensional modelling
  • Measure governance
  • Qlik
  • SQL
  • Reconciliation design
  • Multi-entity
06 — Retrospective

What I would do differently

Honestly assessed, with hindsight

I should have versioned the definitions from day one. For the first stretch, a measure change was a silent edit — a report could return a different number in March than it had in February with nothing in the interface to say why. Adding versioning after the fact meant back-filling a history that was partly reconstructed from memory.

I would also write the contract tests earlier. Assertions like group margin equals the sum of entity margin plus published variance are cheap to write and catch an entire class of silent model regressions. I wrote them after the second time a regression reached a controller before it reached me.

Figures on this page are illustrative. No employer data is reproduced.