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

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 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.