Analysis Mode for Power BI
Architecture
Analysis Mode for Power BI replicates Business Central's data analysis mode (pivot
mode) on top of a Power BI semantic model: the model's field list, the Row Groups,
Column Labels and Values buckets, subtotals at every level, and per-user analysis
tabs — plus an optional Copilot that builds and refines analyses from a description
in your own words. The page runs inside Business Central; the data stays in Power BI.
The core principle: zero client-side aggregation
Every number you see — detail cells, subtotals, the Total column, the grand total —
is calculated by the Power BI semantic model itself and returned as its own row.
Business Central and the browser never add, average or otherwise compute a measure
value; they only place returned values into the grid.
This matters for non-additive measures. Ratios, distinct counts, time-intelligence
measures and anything with a custom filter context return the same figure here as in
Power BI, because it is the figure from Power BI. Summing detail rows on the client
would produce different — and wrong — subtotals for exactly those measures.
Architecture at a glance
Business Central
Analysis designer page & saved analysis tabs
→
DAX query
Built from your layout, sent straight from the browser
→
Semantic model
Evaluates detail rows, subtotals and totals
→
Pivot grid
Renders returned values — no recalculation
One round trip per layout change. Expanding and collapsing rows filters data that has
already arrived.
Where each part runs
No navida service takes part at runtime. Your queries and your data travel directly
between your browser and your Power BI tenant. navida operates exactly two things:
the Microsoft Entra application you sign in with, and the key vault holding its
credential — both used for authentication only, never for data.
navida (sign-in only)
Your Microsoft 365 tenant
navida
authentication only — no data, no runtime service
Entra application
Multi-tenant registration · you grant admin consent once
Azure Key Vault
Holds the application credential · never leaves navida
↕ sign-in only · no business data crosses this line ↕
Your Microsoft 365 tenant
everything below runs entirely inside it
Analysis designer
Business Central page hosting the add-in
Model catalog
Which semantic models are available
Saved analyses
Per user, stored in Business Central tables
↓ builds and sends DAX from the browser
Power BI semantic model
Your workspace · evaluates every value, applies row-level security
↓ returns detail rows, subtotals and totals
Pivot grid in the browser
Expand, collapse, sort and window over the returned rows
↓ optional, only with Copilot enabled: structure and your question — never data
Your Azure OpenAI resource
Optional, in your own Azure subscription · called from the Business Central server · receives field names and your question, never query results
Sign-in and permissions
Delegated throughout: every query runs as the signed-in Business Central user.
1
An administrator grants consent once for the tenant. After that, users sign in silently — the app reuses the Microsoft session they already have.
2
The access token carries the user's own identity. Row-level security applies per person, and users only ever see models they have access to in Power BI.
3
Power BI's audit log and its rate limit of 120 queries per minute apply per user, exactly as they would if the user queried the model directly.
4
Each user additionally needs Read and Build permission on the semantic model. Without them, Power BI refuses the query. The app does not extend a user's access.
Using your own Entra app registration instead of navida's is supported; see
Install.
How a pivot is built
One query per layout change, with all levels evaluated by the model.
1
The field list is read live from the model, so tables, display folders, columns and measures always match the current model definition.
2
Your layout is translated into a single grouping query that asks for detail rows and every subtotal, the Total column and the grand total in one go.
3
Columns with a sort-by column in the model group by that order, so months appear in calendar order rather than alphabetically.
4
Expanding and collapsing rows re-filters rows that already arrived. Only a change to the layout itself triggers a new query.
Large models
Queries are sized against Power BI's documented limits before they are sent.
1
The app budgets rows per query so that results stay within Power BI's limits, and prioritises totals so they survive truncation.
2
If a result would still be too large, the deepest row level switches to load-on-expand rather than returning a partial result.
3
The grid shows 500 rows at a time with Show more, and the summary bar reports the true total row count from the model.
4
Queries are debounced, and only the most recent one is kept in flight.
Copilot: describe an analysis, refine it, keep it
Optional — switched on in setup with your own Azure OpenAI resource. Copilot
turns a sentence into an analysis tab and refines it with follow-up instructions.
The full guide, including prompt tips and limitations, is on the
Copilot page.
1
Choose Create new analysis in the designer and describe what you want — “net sales by customer and year, highest first”. Copilot proposes a layout and shows it as a live preview on your real data.
2
Refine with further instructions — “add product no. as second level”, “without quotes”, “sort descending”. Everything you do not mention stays as it is. Browse earlier proposals with ‹ n of n › and keep the one you like; Keep always takes exactly what the preview shows.
3
The model answers with a small layout description — which fields, which filters, which sorting. It never writes queries and never sees query results. The proposal is checked against the live field list; anything that does not exist in your model is reported, not guessed.
4
Filters support the full operator set — equals and not equals, contains and not contains, starts/ends with, greater/less than, between, blank and not blank. Filter values are verified inside your tenant with ordinary queries; a value your model does not hold is named in the review notes instead of silently returning an empty analysis.
What leaves your tenant: the structure of the semantic model — table, field
and measure names with their descriptions — plus your question and the current
layout. Never data: no query results, no cell values, no lists of the values
a column contains. The call runs server-side against your own Azure OpenAI
resource; the key is stored in Business Central's Isolated Storage and never
reaches the browser.
Number formats
Figures are formatted the way the model defines them, where the platform allows it.
1
The app reads the model definition and caches its format strings — on Pro and dedicated capacity alike — so currency, percentages and decimals match Power BI.
2
The one-time refresh needs a user with write permission on the model and a consented ReadWrite scope. Until it has run, the app formats by data type — expected behaviour, not an error.
3
Administrators can override any format manually. Manual entries win and survive every refresh.
Next step
Install Analysis Mode for Power BI and connect a
semantic model.