Different teams often build their own dashboards straight on top of raw tables, each writing a slightly different formula for the "same" metric — one dashboard includes tax, another nets out refunds, a third uses a different date window. The result: three dashboards, three different numbers, and a meeting spent arguing about whose number is "right" instead of what to do about it.
A semantic layer sits between the raw tables and the dashboards and defines each metric — its formula, filters, and grain — exactly once. Every dashboard that asks for "Revenue" gets the same governed calculation, so the numbers reconcile even when the presentation differs.
Tools like dbt's Semantic Layer, LookML, and Cube popularised the idea of defining metrics once, in code, so that "Revenue" means the same thing whether it's queried from a BI tool, a spreadsheet plugin, or an API — the core promise of a single source of truth.
Trace a metric as it flows from raw source tables, either straight into competing dashboards or funnelled through a governed semantic layer — and watch three dashboards disagree, then reconcile.
Without a shared metric definition, each dashboard applies its own formula to the same raw data and reports a different number. Routing every dashboard through one semantic layer collapses that spread to zero.
Pick a metric, adjust the number of raw source tables and flow speed, then toggle the semantic layer on and off to watch the dashboard tiles diverge (orange/red) or agree (teal).
Modern BI stacks (dbt Semantic Layer, LookML, Cube) exist specifically to define metrics once in code so "Revenue" means the same thing everywhere it's queried.