Overview
Symptoms before solutions
Before reaching for a tool, recognise the disease. The five-revenues problem is the canonical anti-pattern:
- Finance pulls revenue from
gl_journalsnet of refunds and VAT. - Sales pulls it from
crm_opportunitiesgross of refunds. - Marketing pulls it from
attribution_pipelineafter channel allocation. - Product pulls it from
events.purchaseexcluding subscription renewals. - The CEO pulls it from a board-deck spreadsheet that averages all four.
All five are correct under their own definition. None match. Every quarter someone spends a week reconciling them, discovers one of the five is also wrong, and ships a fix that breaks two dashboards downstream.
The fix is not 'agree on a number'
Meetings to 'pick the canonical number' fail because the next new dashboard re-forks the definition the moment it ships. The fix is structural: there is exactly one place where revenue is defined as code, and every consumer must go through it. That place is the semantic layer.