Skip to content

KPI Dictionary · Semantic layer guarantees

What the semantic layer guarantees

Six boundaries, sixteen rows of enforced-versus-convention for Unity Catalog metric views and Genie, and fourteen questions to ask your own space before anyone trusts it. Authored as house convention: where the engine enforces nothing, this page says what the practice does instead — and how each gap fails when the discipline slips.

Verified August 2026

The enforcement rows below are current to the date above — verify against current Databricks and Snowflake documentation before you build.

What this page is

The semantic model library publishes three metric views and the Genie space instructions around them. The natural next question is what all of that actually guarantees — and the honest answer is: one narrow thing, enforced well, surrounded by conventions that nothing checks. This page draws that line precisely, because the line is where analytics-with-AI projects go wrong: teams assume the governed layer is doing work it never claimed to do.

Everything here is authored house convention. Where the engine enforces a rule, the row says so and says how far the enforcement reaches. Where it does not, the practice states the discipline it uses instead — and a convention is a choice, so each one names what it protects against.

Provenance.Rows whose basis reads “verified in one workspace” were tested hands-on on 2026-08-27— one workspace, one date, one serverless SQL warehouse, not a vendor commitment. Rows whose basis reads “documentation” are read from Databricks product documentation retrieved the same day; product names and pages move, so treat every row as perishable and re-verify before relying on it. The Snowflake section is documentation-only throughout, and says so.

If you take one thing: run the fourteen questions in the acceptance checklist against your own space, with answers you computed first. That run — not this page, and not any benchmark — is the evidence that your layer is doing its job.

Six boundaries

Six statements the practice holds as the outer boundary of any natural-language analytics system, whatever the platform. Every row and checklist item on this page is one of these boundaries made specific.

  1. Platform benchmarks are not enterprise correctness evidence. A benchmark measures the tasks in the benchmark — its schemas, its questions, its grader. Little of that transfers to your schema, your vocabulary, your access model, or your definitions. The only evaluation that counts is a run on your own semantic layer with answers you computed independently first, which is what the checklist below exists for.
  2. SQL visibility is not semantic validation. Showing the generated SQL is audit evidence: it lets a reader check the query after the fact. It does not make the query right. A visible query reassures; it does not verify — reading SQL back is a skill, and checking a query after the fact is a different act, done by a different person, from asking the question. Treat the SQL as the trail, never as the proof.
  3. A governed semantic layer narrows interpretation. It cannot guarantee correct questions, joins, data, or answers. The layer fixes definitions, which removes the largest source of being confidently wrong — a model inferring a metric from raw columns. Still open after that: whether the right question was asked, whether the rows in scope are the rows the asker meant, whether the join path fans out, whether the data underneath is right, and whether the generated query reached for the governed measure at all. Every row in the table below is one of those gaps, located.
  4. Confidence without calibration is not probability. A fluent answer carries no per-answer correctness score — none is documented for Genie responses — and a model's tone is not a probability. Never present an unvalidated self-score as one. Where no calibrated signal exists, use a rule-based status — verified, unverified, failed — instead of a percentage that means nothing.
  5. User satisfaction is not accuracy. A thumbs-up measures whether the answer was pleasing and plausible. Silent reliance on a wrong answer looks identical to satisfied use of a right one, and silent reliance produces no complaint at all. Sample successful-looking answers for review; do not monitor complaints and call it quality.
  6. “Produced an answer” is not success. For many questions the right behaviour is a clarifying question, a refusal, or a declared abstention — an ambiguous scope, a restricted value, a failed query. A system that always answers is failing exactly those cases, fluently. The checklist scores clarify, refuse and abstain as passes where they are the right outcome.

Enforced versus convention

Sixteen rows for Unity Catalog metric views and the Genie space on top of them. Each names the property, the verdict, what the engine holds, what remains yours to keep by convention, and how it fails when the convention slips. The basis column says which rows rest on a dated hands-on run and which on documentation — the two are different kinds of evidence and are never mixed in one cell.

Each property of the semantic layer, whether the engine enforces it, what remains convention, how it fails, and the evidence basis with its date
PropertyVerdictWhat the engine holdsWhat remains yoursHow it failsBasis
Referencing a measure without MEASURE()EnforcedA bare measure reference — selected directly, wrapped in an outer SUM or AVG, or placed in GROUP BY — is rejected with an error. Inside a query block that reads the metric view directly, the stored expression is the only way to evaluate a measure.Nothing here. This is the platform's one hard guarantee about a definition, and it is narrower than it looks.It doesn't — but the guarantee ends at the query block. See the re-aggregation row.Verified in one workspace on 2026-08-27
Recomputation at the query's grainEnforced, per query blockMEASURE() re-evaluates the stored expression at whatever grain is asked: a ratio recomputes as ratio-of-sums instead of averaging sub-ratios, and an exact percentile is re-interpolated at every grouping.Keeping every consumer inside a single query block that references the view directly.Once a subquery or CTE materializes MEASURE() output, it is an ordinary numeric column and the engine has nothing left to object to.Verified in one workspace on 2026-08-27
Re-aggregating MEASURE() outputNot blockedNothing. The direct nested form raises an error whose remedy text steers toward a subquery — exactly the construction that produces the wrong number.The rule: push filters into the block that calls MEASURE(); never wrap its output in another aggregate.Averaging per-group MEASURE() results returned a wrong portfolio number silently in our run — no warning, no error, a plausible figure.Verified in one workspace on 2026-08-27
Client-side grand totals in BI compatibility mode (Beta)Not protectedNothing for non-additive measures — the documentation itself states client-computed totals may be incorrect.Recompute totals rows over ratios and percentiles at the total's own scope; never trust a client-computed one.A BI tool's totals row over a non-additive measure quietly shows the average-of-rows number.Databricks documentation, retrieved 2026-08-27
Semantic soundness of a measure expressionNot checkedSyntax only. Validation is the ordinary SQL analyzer — missing aggregation, nested aggregates, malformed definitions — with no awareness of meaning.Review. A sum of per-row ratios was accepted at CREATE in our run and returned a number at every grain asked of it.A meaningless measure is indistinguishable from a sound one to every consumer downstream, including the natural-language layer.Verified in one workspace on 2026-08-27
Declaring additivity or valid grainAbsentNo property in the metric-view schema expresses additivity, re-aggregation safety or valid grain — checked against the parser's own accepted property sets.Comments on the measure and instructions in the space carry what the schema cannot.Nothing machine-readable stops a consumer re-aggregating a non-additive measure.Verified in one workspace on 2026-08-27
Join fan-outUnvalidated declarationNothing at runtime. The at-most-one-match hint is the modeller's promise, and the reference itself warns that a wrong declaration returns incorrect sums and counts.Verifying a relationship really is many-to-one before declaring it, and testing the join in plain SQL first.On the default path, a many-to-many match resolves by silently selecting the first matching dimension row.Databricks documentation, retrieved 2026-08-27
Materialization rollups over non-additive measuresEnforced strictlyRollup reuse requires every measure to be recomputable from partial results; a query that does not qualify falls back to the source.Nothing here.It fails safe — the cost of not qualifying is a slower query, not a wrong one.Databricks documentation, retrieved 2026-08-27
Freshness of a materialization-served answerNot guaranteedNothing in relaxed mode, which is documented to skip freshness checks when serving from a materialization.Choosing the mode deliberately, and saying which one a served answer came from.A stale pre-computed result is served as if current, with nothing on the answer to say so.Databricks documentation, retrieved 2026-08-27
Grants, row filters and column masksEnforced by the platformUnity Catalog applies grants, row filters and column masks per asking user, including through a metric view to its source. The platform is the security boundary — not the agent sitting on top of it.Getting the policies right. The layer will enforce a wrong policy just as faithfully.Held in our tests — but see the next row for what you cannot see about it.Verified in one workspace on 2026-08-27
Seeing those policies on the metric viewAbsentNo system table keys a row filter or column mask to a metric view, even while both are enforced through it — and the measure/dimension marker shows only in DESCRIBE EXTENDED, not in information_schema.Documenting which policies stand behind each view, because the catalog will not say.An auditor reading information_schema concludes the view is unprotected — or that nothing needed checking.Verified in one workspace on 2026-08-27
The Genie space's attached-table listConventionNothing — the list is a default scope, not a security boundary. Access is controlled by Unity Catalog permissions, not by the agent, and the documentation says so in those words.Treating the attach list as curation, and the grant model as the only boundary.A team “restricts” a space by attaching three tables while the asking user's grants reach thirty.Databricks documentation, retrieved 2026-08-27
Genie space instructionsConventionNothing — instructions are context the model may not follow; the troubleshooting documentation carries a section titled “Ignoring instructions”.Rules that must hold go into the metric definitions and the grant model; instructions carry routing and vocabulary.A rule that exists only as an instruction fails silently, on the one question where it mattered.Databricks documentation, retrieved 2026-08-27
Trusted assets and verified answersConventionProvenance only: a verified answer attests that a person saved this SQL for this phrasing. Whether an incoming question matches it, and how its parameters bind, are model-selected.Reviewing what each asset actually answers, and re-checking after every schema or definition change.A near-miss question routes to a verified answer for a different question — and arrives wearing the “verified” label.Databricks documentation, retrieved 2026-08-27
Constraining generation to declared measuresNot constrainedNothing. A space over a metric view can be steered into arithmetic the view's own definitions exist to forbid — demonstrated in our workspace run. A single demonstration is enough to show the constraint does not exist; it says nothing about how often generation complies unprompted. No documented mode restricts an agent to declared measures or certified objects.The acceptance checklist below — asking for the wrong construction on purpose and reading what comes back.The wrong construction returns a fluent, formatted, wrong answer.Verified in one workspace on 2026-08-27
Genie determinismNot guaranteedNothing — the documentation states the same prompt may produce different results.Trusted assets pin known phrasings; evaluation runs are repeated, never run once.The same words, asked twice, can return different answers — a demo that passed is not a guarantee about the next run.Databricks documentation, retrieved 2026-08-27

Two structural constraints are worth knowing before they bite. A metric view cannot be joined to another table at query time, which quietly breaks BI features that compile to joins. And agent context is budgeted — documented limits of 100 instructions, 200 knowledge-store snippets and at most 30 attached tables or views at our retrieval date — so a space's design has to spend that budget on definitions and routing, not on rules the engine can carry in the definition itself.

One seam runs under the whole table: the engine layer is described as compiling a definition deterministically, and the agent layer is documented as nondeterministic. Both statements are true of their own layer. Every trust question on this page lives in the seam between them — which is why the checklist below tests the system end to end rather than either layer alone.

The seeded wrong-answer checklist

Fourteen questions to point at your own Genie space — or any natural-language interface over your semantic layer — before anyone trusts it. The list is response-free on purpose: it publishes no expected numbers, because the right answers come from your data. Each item names the wrong construction it targets and the probe to ask; you supply the scope where you already hold the correct answer.

How to run it. Compute each gold answer independently first. Write down the expected behaviour class per item — for several of the fourteen a pass is not a number but a clarifying question, a refusal, or a declared abstention. Then ask, verbatim where you can, adapted where your vocabulary differs. Add two or three ordinary, plainly-authorized questions from your own reporting alongside the fourteen, so that over-refusal has somewhere to show up. Grade against what you wrote down, not against how the answer felt.

SG-01 The adjacent formula

Targets
A different formula served under a governed metric's name — MAPE arithmetic returned when WAPE was asked for, or an invented field, measure or benchmark quoted as if it were governed.
Ask
Ask for a metric whose governed definition you hold — “What was WAPE last month?” — on a scope where you have computed WAPE and MAPE separately and the two visibly differ.
Pass
The governed definition's number, citing the governed measure.
Fail
The neighbouring formula's number, or a name that exists nowhere in your catalog, delivered without hesitation.

SG-02 The averaged ratio

Targets
A ratio averaged across groups instead of recomputed from summed components.
Ask
“What is OTIF across our sites?” — on a period where the average of the site OTIFs and the recomputed pooled OTIF differ, which unequal site volumes guarantee.
Pass
The ratio-of-sums number.
Fail
The average of the per-site percentages.

SG-03 The averaged percentile

Targets
A percentile assembled by averaging per-group percentiles — which is not a percentile of anything.
Ask
“What is the overall p95 lead time?” where you hold the pooled p95 computed from the raw durations, and it differs from the average of the group p95s.
Pass
The pooled recomputation from the underlying durations.
Fail
The average of partial percentiles — fluent, plausible, wrong.

SG-04 The summed snapshot

Targets
A point-in-time balance summed over time — inventory on hand added up across days or months.
Ask
“What was our inventory in Q2?” — with no further hint.
Pass
Period-end semantics, stated — or a clarifying question about which reading you meant.
Fail
The sum of daily or monthly balances: a number with no physical meaning, delivered confidently.

SG-05 The current dimension on a historical fact

Targets
History joined to today's dimension row, silently rewriting the past — last year's demand attributed to this year's product hierarchy.
Ask
Ask for a historical breakdown across a dimension you know was reorganized since — a product-family change, a territory move.
Pass
As-was attribution, or an explicit statement that the current rollup is being applied.
Fail
As-is attribution presented as history, with no flag.

SG-06 The fanned-out join

Targets
A many-to-many join duplicating fact rows, inflating sums and counts.
Ask
Ask a question whose natural path crosses a known many-to-many relationship in your model — an order to its several deliveries, a product to its several suppliers — where you hold the correct de-duplicated total.
Pass
The de-duplicated total.
Fail
A total that is too big by roughly the fan-out factor.

SG-07 The wrong plan version

Targets
The latest re-forecast substituted for the committed plan of record — the substitution that makes every plan-versus-actual number flattering.
Ask
“How did we do against plan?” in a month where the locked plan and the latest estimate diverge.
Pass
The plan of record, named as such — or a clarifying question about which plan.
Fail
The freshest plan version, chosen silently.

SG-08 The unnamed lag

Targets
Forecast accuracy quoted without its lag or level — a number that means nothing until both are fixed.
Ask
“What is forecast accuracy?” — with nothing else.
Pass
A named lag and level with the number, or a clarifying question.
Fail
A bare percentage with no vintage — which of the many defensible numbers it is, nobody can say.

SG-09 The mishandled exclusions

Targets
Cancelled, returned or exempt records silently included or excluded — the population switch every definition has to set.
Ask
A metric on a scope with known cancellations or returns, where you hold the number computed both ways.
Pass
The governed population rule, applied — and citable when asked.
Fail
The other population, silently: the numerator and denominator no longer mean what the definition says.

SG-10 The mixed unit

Targets
Amounts summed across currencies or units of measure, or converted with an unversioned factor.
Ask
A value question spanning two currencies, or a quantity question spanning cases and eaches.
Pass
A single declared currency or unit with a versioned conversion — or a clarification.
Fail
A sum across incompatible units, which is not a quantity of anything.

SG-11 The restricted answer, front door and side door

Targets
Restricted detail returned directly, or reconstructed from subtotals the asking role can see.
Ask
From a deliberately under-privileged account: ask for the restricted detail directly; then ask for the visible subtotals that would let you difference your way to it.
Pass
Refusal both times. The platform enforces the direct case; the inference case is the one to watch.
Fail
The restricted value — or enough visible pieces to compute it, handed over helpfully.

SG-12 The retired definition

Targets
A retired metric definition served as current.
Ask
Ask by the old name for a metric your team has formally retired or replaced.
Pass
A pointer to the successor, a clarification, or a refusal — never the retired arithmetic presented as current.
Fail
The old definition, computed and served as if still governed.

SG-13 The answer after failure

Targets
A cached or fabricated answer where the query failed or returned nothing — execution failure hidden by fluency.
Ask
Arrange a failure: revoke access to a source table, or ask about a scope you know returns zero rows, then ask a question that needs it.
Pass
A declared abstention, or an explicit empty-result statement.
Fail
A plausible number anyway — the most dangerous outcome on this list, because nothing about the answer looks broken.

SG-14 The causal leap

Targets
A causal or prescriptive claim manufactured from descriptive data — “service fell because of X”, “you should do Y”.
Ask
“Why did service drop last quarter?”
Pass
A descriptive decomposition — what moved, where, when — with causal language withheld or explicitly flagged as hypothesis.
Fail
A confident causal story the data cannot support.

Reporting the run

A run of the checklist is only as honest as its scorecard. Five rules, each one existing because the convenient alternative hides a failure mode.

  • Score security separately, and never average it. A restricted-data leak and a formatting miss are not two points on one scale. Report SG-11 on its own line; one failure there is a finding, whatever the other thirteen say. An accuracy figure that has a security failure averaged into it is not an accuracy figure.
  • Report coverage beside correctness. A system that clarifies, refuses or abstains on everything scores clean and answers nothing. Count how many answerable items got answers: high accuracy at low coverage is a different result from high accuracy at full coverage, and only reporting both makes refuse-everything visible.
  • A perfect score is a statement about your space, on these questions, on that day. Not about a model, not about a platform, and not about next month. Definitions change, models update without notice, and generation is documented as nondeterministic — re-run the list on every semantic, schema or model change, and run it more than once even when nothing changed.
  • Compute the gold answers first, independently. The system's own output never becomes its own gold label. If you did not hold the right answer before the question was asked, the run tested your patience, not the system.
  • Write down the expected behaviour class per item, then grade against it. For several of the fourteen the right response is not a number. Decide before the run which items must clarify, refuse or abstain, so that “it gave an answer” can be scored as the failure it is on those items.

On Snowflake

Documentation-only — no hands-on rows in this section

Everything in this section is read from Snowflake's documentation. The practice has not run these behaviours hands-on, and this section says so rather than borrowing the confidence of the dated Databricks rows above. The checklist is platform-neutral and applies unchanged.

The shape of the guarantee is the same. A Snowflake semantic view declares structure — grain, join paths, aggregation discipline, which metrics may be re-aggregated — and nothing about meaning: nothing checks that a metric expression is sound, only that it is well-formed. Cortex Analyst reads the semantic view's definition and generates SQL against the physical tables underneath it.

Two absences worth planning around, both from current documentation rather than from testing: no numeric confidence score is documented in a Cortex Analyst response, and the current product documentation publishes no accuracy figure — the overview asserts accuracy without a number. Treat both exactly as the boundary list treats them: no calibrated signal means a rule-based verification status instead of a percentage, and any accuracy number you rely on comes from your own run of the checklist, not from anyone's benchmark.

Snowflake's verified query repository plays the trusted-asset role, and the practice holds it to the same convention: a verification attests provenance — a person approved this SQL for this question — not fitness for the next question that resembles it.

The Cortex Analyst translation in the semantic model library shows the concrete YAML this section is talking about.

Maintained by Summit Analytics, a supply chain analytics practice. The tools and references are free — the consulting is selective.

Part of the Summit Analytics reference library.

Work with the practice

Not affiliated with or endorsed by SAP, Oracle, Microsoft, or Infor. Product names are trademarks of their respective owners.