How to share a Power BI report
Every Power BI sharing question is really a licensing question. The technology for showing someone a report has been solved for a decade; the constraint is that the standard path prices a seat for every reader, and the free path puts your data on the public internet.
The licensing shape, plainly
Workspace sharing. You share a report; the recipient opens it in the Power BI service. This requires a Pro or Premium Per User licence on both ends — unless the workspace is backed by Premium or Fabric capacity, in which case users in your tenant with a Free licence can view. Either way the reader must be in your tenant.
External recipients. Entra B2B guest access can extend that to named outsiders. It works and it is an IT project with a tenant policy attached, not something you do to send Thursday's numbers to a partner.
Publish to web. One click, produces an embed code, and the report becomes readable by anyone on the internet who has or finds the URL. Microsoft's own documentation is unambiguous that this is for public data and must not be used for confidential or proprietary content. A large share of tenants disable it in the admin portal. If yours has not, treat it as a publishing decision that needs the same review as a press release.
Power BI Embedded. The app-owns-data model, where your application holds the capacity and authenticates readers itself. Correct for customer-facing analytics. Enormous for internal reporting.
What most people actually need
A specific set of people — some of whom are not licensed, and some of whom are not in the tenant — needs to see this month's figures, discuss two of them, and be able to find that discussion again in six months.
None of the four options above do the last part. Sharing and Embedded give live interactivity with no durable conversation. Publish to web trades your data for reach. Export gives you a PDF that lands in a mailbox and dies there.
The exported-digest pattern
Export the figures, render them as one self-contained HTML page, publish that page to a stable URL, and put an anchored comment layer on it.
The Power BI REST API exports a report asynchronously — you start an export job, poll it, then download the file. That is fine when a PDF is genuinely what you want. For a page people can quote from, go one level lower and pull the numbers instead: the API can return per-visual data as CSV or XLSX, and if the semantic model sits on a warehouse you control, querying that directly is simpler still.
Then render plain HTML — inline CSS, real <table> rows, nothing fetched at
view time — and publish:
python3 scripts/powerbi_digest.py > digest.html
curl -fsS -X PATCH "https://commareports.com/api/v1/reports/$REPORT_ID" \
-H "Authorization: Bearer $COMMA_API_TOKEN" \
-H "Content-Type: application/json" \
-d "$(jq -n --rawfile html digest.html \
--arg title "Revenue — $(date +%B\ %Y)" '{title: $title, html: $html}')"
Real text matters here more than usual, because finance readers copy numbers into their own models. A PDF of a table forces retyping; an HTML table does not.
What changes for the reader
They open a URL. No licence, no tenant, no guest invitation. Access is a setting on the report — private, team, domain-gated or link — so "everyone at partner-co.com" is a real option without provisioning anyone.
And they can highlight the margin line and pin a thread: "this includes the one-off rebate, normalized figure is in the note." That thread stays attached as the monthly revisions accumulate, so next quarter's reader inherits the context instead of asking again.
When to just use Power BI
If your audience is licensed, in your tenant, and wants to slice — send them the report. Nothing static replaces a live model for a reader who can actually open it. The digest pattern is for the readers you cannot license, and for the months you want a dated, commentable record of what was reported.
Try it
Comma is free — unlimited reports, unlimited commenters, unlimited revision history.