A blank canvas where you ask in plain English and a chart appears on the fly. But every question is resolved against a governed semantic catalog rather than raw text-to-SQL, so the correct metric is pulled, the provenance is shown under each chart, and an ambiguous word is clarified instead of guessed. It's the lightweight, governed answer to the static dashboard. This one runs live in your browser, and there's a clickable link below.
A dashboard answers the questions you anticipated when you built it. Real operational questions arrive faster than anyone can build tiles: "average CO₂ by site last week", "which building's power is trending up", "compare water across the piers". The obvious next step is to let people ask in natural language. But the naive version, where you point a language model at the database schema and ask it to write SQL, is unreliable in the way that matters most. It guesses the wrong column, invents joins, and silently picks the wrong metric when a word is ambiguous. A confident chart built on the wrong data is worse than no chart, because someone will act on it.
Hand an LLM the schema and a question and it will produce something. The problem is that you can't tell a right answer from a wrong one by looking at the chart:
The fix is well-established: a semantic layer. Measured publicly, natural-language querying hits ~83% accuracy when grounded in a semantic layer versus ~40% writing raw SQL. So the job is not a cleverer prompt. It is to resolve every question against governed metadata, and to refuse to guess when the metadata is ambiguous.
The enterprise answer is the same shape: a governed semantic layer between natural language and the data. Databricks' Unity Catalog Business Semantics and Metric Views define metrics centrally, including display names, units, synonyms and dimensions, and AI/BI Genie grounds every natural-language question in those governed definitions so the model interprets business terms correctly instead of guessing. This demo is that idea, made small and explicit: a hand-written catalog doing the governing, so you can see exactly how the grounding works.
A typed question never touches the data directly. It is first parsed against the catalog: the words are matched to a governed metric (via its synonyms), an aggregation, a dimension and a time window. If that resolution is clean, the query runs and a chart is drawn with its provenance attached. If a word is ambiguous, the canvas stops and asks. The model (or, here, a deterministic parser) proposes an interpretation; the catalog governs what's allowed.
The catalog is the governance. Each metric carries its meaning, unit, the words that map to it, and the aggregations it allows. The terms that map to more than one metric are marked ambiguous on purpose:
Type "average CO₂ by site last week" and the canvas resolves it. It matches "co₂" to the governed metric co2_ppm, "average" to avg, "by site" to the site dimension, and "last week" to a 7-day window, then runs it and draws a bar chart that states all of that underneath. Now type "show consumption by site". "Consumption" maps to two governed metrics, so the canvas does not guess. It shows a clarify prompt: Power or Water? One click resolves it and the chart appears.
| You type | Resolved to | Outcome |
|---|---|---|
| average CO₂ by site last week | co2_ppm · avg · by site · 7d | charted · cited |
| power trend over the last 14 days | power_kw · over time · 14d | charted · cited |
| show consumption by site | consumption → 2 metrics | clarify · won't guess |
Where this stands, honestly. The data is a synthetic smart-FM estate (five metrics across five sites), and the resolver here is a deterministic, catalog-grounded parser rather than a hosted LLM. That is the point: the catalog is the guardrail, and a model would sit in front of it to handle fuzzier phrasing, never replace it. So this proves the governance mechanism, where questions resolve to defined metrics, ambiguity is refused, and provenance is shown. It is not a benchmark over a real warehouse. The 83%/40% figure is the public, independent case for why the semantic layer matters; it's not a measurement of this demo.
The trade-off you tune: how much the resolver will infer. A stricter catalog refuses more and asks more (safer, more clicks); a looser one infers more from context (smoother, more risk of a wrong-column chart). Adding an LLM front-end widens the language it understands but must stay behind the catalog, or you're back to guessing. The governed canvas is not "no AI." It is AI that has to show its working and stop when it can't.
The thing that makes the canvas trustworthy is that the resolution is never hidden. Under each chart is the exact governed query: which metric (and which synonym matched it), which aggregation, which dimension and filter, which window. So you can always check that the chart answered the question you asked, and a reviewer can audit any chart on the canvas after the fact.
question : "average CO₂ by site last week"
metric : co2_ppm (matched synonym "co2") unit: ppm
aggregation: avg
dimension : site → Building A, CPFT, mTower, WCP, ISC
window : last week (7 days)
status : resolved ✓ → bar chart drawn
question : "show consumption by site"
term : "consumption" → { power_kw, water_lpm }
status : ambiguous ⚠ → asked the user; no chart drawn
The exciting idea is "type a question, get a chart". The valuable idea is the governance that sits underneath it: the catalog that defines what a metric means, the refusal to chart an ambiguous word, the provenance under every result. I build the version that has to show its working: the model proposes, governed metadata decides, and nothing is drawn that can't be traced back to a defined metric. An operations team will only act on a number it can trust. So the real work is not the chart that appears when you type. It is the catalog underneath that makes the chart mean what you think it means, and the discipline to refuse a chart that can't be traced back to it.
Unlike the consoles that run on my machine, this one runs entirely in your browser. Open the canvas, type a question (or tap a suggestion), and watch the chart resolve. Then try "show consumption by site" and watch it refuse to guess. The demo now also includes a side-by-side naive-vs-governed comparison, the catalog itself rendered as an inspectable table, and an optional small local model (Qwen2 0.5B, running in your browser via WebGPU) whose every proposal is validated against the catalog before anything is drawn.