Conversational analytics
Why AI answers don't match the dashboard, and how to make them
AI assistants that write their own SQL can read the same question differently each time, so their numbers drift from the dashboard. Mark Your Data Assistant answers from the metrics in your dbt semantic layer first, labels those answers ✅ Governed, and labels everything else ⚠️ Unverified.
How it works out of the box
Definitions come first. For every question, the assistant looks for a saved query, then a metric. MetricFlow compiles the SQL from your definition, so the same request gives the same SQL.
Every answer says where its numbers come from. An answer from a definition says ✅ Governed. SQL written for the question says ⚠️ Unverified, and "Show SQL" shows exactly what ran.
Facts about your data come from dbt. Grain, join paths and allowed values come from the tests and entities in your dbt project.
The answer says when figures can still change. The data status names up to when the data is loaded and from which date figures aren't final, based on what your data team sets in dbt.
Assumptions are stated. When a question can be read in more than one way, the answer states the assumption it made and offers the other readings.
What it means for you
- Manager: You can see whether a number comes from a reviewed definition before you use it.
- Analytics engineer: You define a number once in dbt, and the assistant uses that definition.
- Analyst: You can check any answer by reading the SQL that ran.
- Business user: You can see whether a number is governed and whether it's final.
Questions and answers
Why does an AI assistant give a different revenue number than our dashboard?
Generated SQL can interpret the same question differently on every run. Mark Your Data Assistant answers from the metric in your dbt semantic layer first, so MetricFlow compiles the same SQL from the definition your data team reviewed every time. Those answers carry a ✅ Governed label; anything else is marked ⚠️ Unverified.
What happens when no dbt metric covers a question?
Mark Your Data Assistant still answers, with SQL written for that question, and labels the answer ⚠️ Unverified so readers know it isn't an official number. "Show SQL" shows exactly what ran. The question is logged, so the data team can close the gap with a metric or saved query in a normal dbt pull request.
Can I check the SQL behind an answer in my own tools?
Yes. Mark Your Data Assistant shows the SQL that actually ran, formatted in your warehouse's dialect, without comments and with fully qualified table names, so you can paste it into BigQuery and run the same query. The chat shows a preview of the rows, along with the exact total row count.
Why does the assistant say this month's revenue isn't final yet?
Because the data still changes: a return can lower net revenue for weeks after an order. Mark Your Data Assistant reads source freshness and a settling window that your data team sets in dbt, and states in the answer from which date the figures are not final, so you know before you quote them.
Does the assistant guess facts about our data?
No, Mark Your Data Assistant reads those facts from your dbt project instead. Grain, join paths and allowed values come from unique and not-null tests, relationship tests, accepted values and the entities in your semantic models. When a fact an answer depends on is missing, the answer says so.