What a semantic layer is,
and when you need one
The monthly meeting where two people bring different numbers for the same thing is not a discipline problem. It is an architecture problem, and it has a specific fix.
The symptom
Nobody was wrong. Finance excluded intercompany, sales included it, operations used a different date grain, and each of those was a reasonable decision made in isolation by somebody competent.
The cost is not the discrepancy. It is the forty minutes every month spent reconciling it, and the slow erosion of anybody trusting any of the three.
What a semantic layer actually is
A single place where a metric is defined: its calculation, its joins, its filters, and the grain it is valid at. Every surface that wants the number reads that definition rather than writing its own.
That is the whole idea. The reason it matters is what becomes impossible afterwards: two dashboards cannot disagree, because there is nothing left for them to disagree about.
When you do not need one
One source, one analyst, five dashboards. The definition lives in that person's head and it is consistent because there is only one head. A semantic layer is overhead and you should skip it.
When it stops being optional
Somewhere around the third team building their own reports, or the second data source that describes the same business entity differently. Two signals in practice: reconciliation appears as a recurring agenda item, and people start asking which version of a report is the real one.
By that point the cost of retrofitting is much higher, because you are no longer defining metrics, you are negotiating between dashboards that already disagree in front of the people who built them.
The part that surprises people
A semantic layer is what makes plain-English questions trustworthy.
Text-to-SQL rarely fails with a syntax error. It fails quietly: the query runs, returns a number, and the number is wrong because the model guessed a join or a grain. A plausible number is indistinguishable from a correct one.
With a defined metric list, the model stops generating SQL over raw tables and starts selecting from a finite vocabulary: which metric, which dimensions, which filter, which period. It cannot invent a wrong aggregate because it never emits one. Failure becomes "there is no metric for that yet", which is a prompt to define one rather than a bad decision.
The work of defining metrics for humans turns out to be the same work that makes the AI accurate.