A manager in a Tuesday review asks: which region has the weakest profit ratio, and how has it trended this year? The dashboard on screen does not break it down that way. In most organisations that question becomes a message to an analyst and an answer on Thursday, by which point the meeting has moved on and the decision has been made without it.

Here is that exact question, asked and answered in the room:

AI Ask
AI Ask answering which region has the weakest profit ratio, with a month-by-month breakdown from January to August, a key takeaway, and a trend chart
Look at what the answer does after naming the region. It finds the two months that dragged it down (February at 6.0%, June at 10.6%), notices the recovery in July and August, and says what it would check first. That is the second question an analyst would have asked themselves.

The region was the easy part. The valuable part is the shape of the year — that the weakness is two bad months rather than a slow decline, which points at discounting or a handful of large low-margin orders rather than at a structural problem. Getting that on Thursday is worth much less than getting it while the room is still discussing it.

Each of those five would have been a separate ticket. More importantly, questions three, four and five only exist because the previous answer arrived while the room was still thinking. A three-day turnaround does not produce that chain at all — it produces one question, answered after the meeting, and no chain.

Why most BI chat boxes cannot be trusted

The common design hands the model a database connection and asks it to write SQL. It fails in three predictable ways, and every one of them is quiet.

FailureWhat happensWhat the reader sees
The wrong joinA key that looks right, rows silently multiplied by a one-to-many relationship nobody declared.A total that is twice the truth
A different definitionThe model sums a revenue column. Finance’s dashboard subtracts discounts and returns. Both are now in circulation.Two numbers, one meeting
An invented fieldAsked about customer tier, the model produces something confident. The field does not exist in your data.A plausible answer about nothing

None of these announce themselves. They do not error. They arrive as a well-formatted number in a meeting, and they are discovered weeks later, if at all.

Why prompting does not fix this

The usual response is a longer system prompt — “always use the revenue_net column, never join orders to line_items without…”. That is a rule written in prose and enforced by hope. It works most of the time, which is the worst possible failure rate for a number somebody is going to quote to a board.

The fix is a smaller surface, not a bigger model

The assistant in InsightViz is never given raw data and never given a database connection. It is given your business definitions — the metrics and dimensions your teams agreed on, with plain-English names, descriptions and the other words people use for them — and its only job is to choose from that list. InsightViz turns the choice into the query.

TYPICALThe model writes SQL

Given a connection and a schema, asked to produce a query. Every join, every aggregation and every column name is a decision the model makes in the moment, and a wrong one still runs.

INSIGHTVIZThe model picks from a vocabulary

Given a list of approved metrics and dimensions, asked which ones answer the question. The joins were declared once by a person. A name that is not on the list cannot be chosen.

flowchart TD
    Q["A question in plain words"] --> A["The assistant picks from
approved definitions only"] A -->|"names a field that
does not exist"| X["Refused and named
never invented"] A --> C["The compiler builds the query"] C --> P["Your row and column rules
are applied here"] P --> E["The engine runs it"] E --> R["Number + chart
+ the query, shown"] R --> L["Written to the audit log
including refusals"] style A fill:#eef1ff,stroke:#c7cdf2 style P fill:#fff4e6,stroke:#f0cb9a style X fill:#fdecec,stroke:#eab6b6 style R fill:#e6f7f2,stroke:#9fd8c9
Every route to a number — a dashboard, an exploration, a question in plain words — passes the same three gates: approved vocabulary, then the person's access rules, then the log. The assistant cannot go around them because it never holds a connection.

Each failure mode above is closed by construction rather than by instruction:

  • The joins are declared once in the model, so the assistant never picks one. There is no prompt to get wrong.
  • Net revenue is defined once and used by every dashboard and every answer, so the two cannot disagree. If the definition is wrong, it is wrong everywhere at once — which is a fixable problem rather than a reconciliation problem.
  • A field that is not in the catalogue cannot be selected, so an invented one is refused and named. The answer becomes “this model has no customer tier” instead of a number.

The access rules are the same rules

Row and column access is applied when the query is built, not filtered out of the results afterwards. A regional manager asking “which region is weakest” gets an answer about their own region, because the restriction is inside the query. A column someone may not see is not hidden from the chart — it is absent from the vocabulary, so it cannot be charted, exported, or asked about at all.

Every answer carries its working

An assistant that is right most of the time is only useful if a reader can check it without asking the person who built it. Every answer, and every panel on every dashboard, will show the question that was asked, the query that ran, and which access rules applied.

How it was computed
The how-it-was-computed panel showing the logical query as JSON, a note that one query answered this panel and two others, the SQL, and the single row returned
Three things worth noticing. The logical query is readable by a business analyst, not just an engineer. The SQL underneath is the real one that ran. And the blue note is the system volunteering that this panel shared its query with two others — so nobody wonders why the SQL selects columns the panel does not draw.

This is the feature that decides whether an organisation actually adopts an AI answer or quietly keeps asking the analyst to double-check it. When someone challenges a figure in a meeting, the answer is on screen rather than in somebody’s head.

The question you no longer have to type

Since this post was first written the assistant has moved onto the chart. The Tuesday question above — which region has the weakest profit ratio, and why — no longer needs to be typed at all. Every chart and headline number carries a Why? button; press it and the change is worked out from the rows before a model is asked anything: the two periods, the contribution of every region, category and segment, the member that moved the other way, and where the period sits in the trend.

Why did Sales by Region change?
The Why panel open beside a sales chart: sales fell 40.7% from July to August 2025, the High sales band accounts for 63% of the decline, a month-by-month trend, breakdowns by sales band and category, and what to do next
The green mark beside each sentence is the point. Every figure in it was traced back to a cell in the tables beneath. The model, when one is asked to write a summary, is checked the same way before anyone sees it.

The conversation is still there — Ask about this sits under the explanation — but its evidence is now the panel: the claims, the trend, the breakdowns, and at most one further governed query when those cannot answer. That is the same rule as the rest of this post, applied one level down: the query may only use the approved definitions, and now the sentence may only use the rows. The full worked example is here →

What actually changes in the organisation

Three things, in roughly this order, over the first quarter.

WhenWhat changesWhy it happens
Weeks 1–3The ticket queue shortens from the bottom.The small questions — break this down by segment, compare with last quarter — stop becoming tickets. That is most of the queue by count and the part analysts resent.
Weeks 3–8Meetings change shape.The follow-up gets asked while the decision is still open, rather than being noted for next time. People stop pre-building six variants of a dashboard in case someone asks.
Weeks 4–12The definitions get settled.Nobody predicts this one. When everyone asks the same vocabulary, disagreements about what a metric means surface in week two — and now there is one place to resolve them.

The third is the one that pays for the project. Metric drift is invisible while every team has its own workbook; it becomes obvious and fixable the moment there is a shared vocabulary that everything else draws on.

Business definitions
The model editor listing dimensions and metrics with business names, types, formats, descriptions and synonyms
The vocabulary the assistant is limited to. Every dimension and metric with its business name, the words people actually use for it, and its format. Change a definition here and every dashboard, exploration and answer follows.

What it does not do

It does not replace your analysts, and anyone selling that is selling a demo. It answers questions your model can already express. A genuinely new question — one that needs a table you have not connected, a join nobody declared, a metric nobody defined — still needs a person, and that is the work analysts should be doing rather than re-cutting the same report six ways.

It is also not a replacement for a dashboard. A number someone looks at every morning belongs on a page, not behind a question that has to be re-asked and re-read each time. The assistant is for the long tail, which happens to be most of the questions.

And it will not guess. When a question needs a field the model does not have, it says so. In a tool people are going to quote in meetings, refusing is the feature that matters most.

An assistant that is confidently wrong once will not be trusted again, whatever it does for the rest of the year.

See the full business case →  ·  How the semantic layer bounds the assistant →

← All posts   Request a demo