Almanac
Microsoft/d365salesDynamics 365

Consultant-focused KB for Microsoft Dynamics 365 Sales: implementation notes, gotchas, and configuration decisions beyond the official docs — across pipeline management, opportunities, forecasting, sequences, sales accelerator, Copilot, integrations, administration, and licensing.

feature-power-bi-embedding.mdv1 · history
CurrentApplies to AllUpdated 6 days agoSource Microsoft Learn

What it does

Puts Power BI reports and tiles inside Dynamics 365 Sales — on personal dashboards, as system dashboards, or embedded on a record form and filtered to the record you are looking at. The data comes from Power BI, not from Dataverse views, so the reporting model and the security model are separate.

Key facts

  • Power BI visualisation embedding is off by default. Turn it on in the Power Platform admin centre at Settings > Product > Features > Embedded content > Power BI visualization embedding.
  • Embedding a report on a main form is not a form-designer operation. You add a placeholder subgrid, export the unmanaged solution, replace the control block in customizations.xml with the Power BI control (class ID {8C54228C-1B25-4909-A12A-F2B968BB0D62}) and re-import. Do it in a development environment.
  • The control takes PowerBIGroupId (workspace, all zeros for My workspace), PowerBIReportId and TileUrl. Contextual filtering adds a PowerBIFilter parameter carrying a JSON basic filter with an alias mapping to the Dataverse field.
  • Tiles can only be embedded without contextual filtering. Reports support filtering; tiles do not.
  • Dataverse security roles do not restrict what a user sees in an embedded report. Use Power BI row-level security if the report needs to respect territory or ownership.
  • Cross-tenant embedding is not supported. The user's Power BI identity must be the same identity they use in the app.
  • Reports pinned to a Power BI dashboard and then embedded are not interactive. Embed the report itself if you want drill and cross-filter.
  • The control does not render meaningfully in the form designer, so the only real test is in the running app.
  • The Sales Analytics and Process Analytics Power BI template apps were deprecated with effect from May 2025; custom Power BI reports are the stated replacement.
  • Sales usage reports inside the app were deprecated from 1 December 2025, with a sample Power BI usage-reporting template published by Microsoft as the replacement.
  • Common failure causes are a missing group ID in TileUrl, a data type mismatch between the Dataverse field and the Power BI column, and unescaped quotes in the filter JSON for string fields.

When to use / skip

Reach for Power BI when the question is genuinely analytical — trend, cohort, attainment against target, anything spanning Dynamics and another source. In-app charts and dashboards are perfectly good for "my open opportunities by stage" and are far cheaper to maintain.

The tell is whether the requirement needs data that is not in Dataverse. If it does, Power BI is the only sensible answer and you should design for it early. If it does not, an embedded Power BI report is often a way of paying licence fees and a refresh schedule for something a view would have done.

Form-level embedding with contextual filtering is the one to be most sceptical about. It is XML surgery, it is fragile across solution upgrades, and it usually exists because someone wanted a chart on the account form. Ask whether a dashboard link would do.

Configuration decisions

  • Where the reports live: a dedicated workspace with its own access model, or the wider BI estate the client already runs. This decides who can deploy changes.
  • Capacity and licensing — Pro licences per viewer, or a Fabric or Premium capacity so viewers do not each need Pro. This is a cost decision that must be made before you promise reports to a whole sales organisation.
  • Whether row-level security is required, and how the RLS model maps to the Dynamics ownership and territory model. They will not align by accident.
  • Placement: personal dashboards, a system dashboard in the app, or an embedded form control. Each has a different maintenance cost, ascending in that order.
  • Refresh frequency and what the client is told about data currency. Sellers will assume embedded means live.
  • Who owns the report definitions after go-live — the BI team or the CRM team. Ambiguity here guarantees stale reports.

Gotchas

  • The security gap is the one that causes trouble at audit. Dataverse roles are ignored; a report without RLS shows every seller the whole pipeline.
  • Form-embedded reports live in unmanaged XML edits. Anyone regenerating that form in the designer can silently drop them.
  • Enabling the environment feature is a separate step from building anything, and it is easy to spend an afternoon debugging an embed that was never switched on.
  • Filter JSON is unforgiving — string values need escaped quotes, and a numeric Dataverse field against a text Power BI column fails without a clear message.
  • The template apps are gone. Clients who saw a Sales Analytics demo years ago will ask for it by name.
  • Refresh schedules are a Power BI concern and nobody on the CRM side will be monitoring them. Stale reports get blamed on Dynamics.

Consultant notes

  • Ask who owns Power BI at the client in the first workshop. If the answer is "nobody yet", scope reporting as a separate stream with its own budget.
  • Demo a system dashboard rather than a form-embedded report. It shows the same value and does not commit you to XML edits.
  • Be direct about licence cost per viewer versus capacity. It is the question that derails reporting scope late in a project.
  • Before go-live, test an embedded report as a seller with restricted Dynamics access and confirm what they can actually see.
  • If someone asks for the old Sales Analytics template app, offer to rebuild the two or three visuals they actually used rather than the whole thing.

Worth another look if the client moves to Fabric capacity, or if Microsoft ships a supported form-embedding experience.

Was this accurate?