Why Data Agents Get It Wrong
If your Fabric Data Agent keeps giving wrong or inconsistent answers, the fix almost never starts in the chat instructions box. It starts in the semantic model. A Data Agent is only as good as the data it's pointed at — a curated Power BI semantic model with defined measures, described columns, tight table scope, and a handful of example queries will out-perform a cleverly-worded prompt against raw lakehouse tables every time. Accuracy problems with Fabric Data Agents are, in the overwhelming majority of cases, a data-modeling problem wearing a prompt-engineering disguise.
Microsoft's own architecture explains most of the failure modes. A Fabric Data Agent doesn't "understand" your business — it uses an Azure OpenAI Assistant to pick a data source, then hands off to a natural-language-to-query tool (NL2SQL for lakehouses/warehouses, NL2DAX for Power BI semantic models, NL2KQL for KQL databases) that generates a query from whatever schema and metadata it can see (Fabric data agent creation). If the schema is ambiguous, the generated query will be confidently wrong, not visibly wrong — which is worse, because it looks like an answer.
Raw lakehouse tables instead of a semantic layer. The failure mode users actually see: they ask "what were sales last quarter" and get an answer built off whichever table or column the LLM guessed matched "sales" — which might be gross revenue, might be net of returns, might be a staging table that hasn't been deduplicated. Lakehouse and warehouse tables carry column names like TR_AMT or DIM_GEO_01 and no business context.
Missing or duplicate measure definitions. Semantic models often accumulate helper measures, intermediate calculations, and near-duplicate metrics (Total Sales, Sales Amount, Revenue) built for report interactivity, not for agent consumption. Microsoft's own semantic-model guidance calls this out directly: a user asking "what were our sales last quarter?" against a model with Total Revenue, Gross Sales, Net Sales, and Sales After Returns all in scope will get the AI's best guess — commonly the wrong one — because nothing tells the AI which "sales" measure the user intended.
Too many items in scope. Fabric currently caps a Data Agent at five data sources, and historically enforced hard limits on table/column counts per source. Community threads document the pain point directly: users hitting the ~25-item ceiling when trying to connect broader lakehouses or larger semantic models, and having to prune or split their configuration to keep the agent from silently ignoring relevant tables (Fabric Data Agent Limitations of 25 items).
Ambiguous date and fiscal logic. Most real models carry multiple date columns — order date, ship date, due date, calendar quarter versus fiscal quarter — and the agent has no built-in way to know which one your organization means by default. Ask "top performers last month" or "revenue this quarter" without that logic encoded somewhere, and you get a plausible-looking answer keyed to the wrong date field or the wrong quarter boundary.
Homonym and overloaded columns. The clearest documented example: a user asks "show me performance by territory," and because a Territory column exists on the Products table, the agent quietly interprets the question as product category rather than sales region — returning a coherent, wrong answer with no error message.
Context that doesn't survive the surface it's accessed from. A subtler failure users have reported: the same question gets a good answer through the Fabric chat UI and a wrong one through the SDK or an external orchestrator like Copilot Studio, because grounding metadata that the UI surfaces automatically doesn't always carry through every integration path (community thread). If you're embedding a Data Agent inside Copilot Studio, Teams, or a custom app, don't assume parity with the native chat experience — verify it.
The 25-row/25-column output cap. Every Data Agent response is capped at 25 rows and 25 columns by design — it's built for conversational insight, not full data extraction. Microsoft's documented limitations page is explicit that a follow-up like "show all rows for this year" still returns at most 25, and that prior turns can compound the truncation, which is why Microsoft recommends starting a fresh chat session rather than iterating on a truncated one (Fabric Data Agent Only Returns 25 Rows).
