AI Agentic to Share Reports in Microsoft Fabric
Introduction
Microsoft Fabric unifies data engineering, data science, real-time analytics, and BI under one roof (OneLake, Lakehouses, Warehouses, Notebooks, Dataflows Gen2, Semantic Models, and Power BI). That consolidation makes it a natural home for AI agents that help teams find, trust, and share insights. This article shows how to design report-aware agents that live alongside Fabric assets, govern access with precision, and turn day-to-day collaboration into a repeatable, auditable workflow.
Why Fabric is an ideal home for agentic collaboration
Fabricâs OneLake provides a single logical data lake, so agents donât juggle scattered storage silos. Semantic Models standardize definitions (measures, KPIs, role-based perspectives), letting agents reason over certified business terms rather than raw tables. Because Power BI sits natively in Fabric, sharing and conversation around reportsâsubscriptions, comments, scorecardsâare first-class events your agents can read and act on. Finally, Domains and endorsements (promoted/certified) give agents a governance compass, preventing them from amplifying untrusted content.
Reference architecture: Agent + Fabric primitives
Data plane: Lakehouse/Warehouse + Dataflows Gen2 populate a Semantic Model.
Insight plane: Power BI reports/dashboards connect to that model.
Agent plane:
Retrieval: the agent uses catalog metadata (workspace, dataset ID, lineage, endorsements) and the semantic model schema (tables, measures, RLS roles).
Actions: the agent can (a) create a personal or shared view, (b) pin tiles to a hub dashboard, (c) generate a shareable link aligned to policy, (d) schedule refresh/subscriptions, (e) attach commentary with context, and (f) open a handoff task in Planner or Azure DevOps.
Policy plane: Purview + Fabric governance (RLS/OLS, sensitivity labels, tenant settings) define what the agent may show or share.
Eventing: Power BI activity events and Fabric item events trigger the agent to summarize changes, notify owners, and recommend share targets.
Core agent skills for report sharing
Find: Identify the âbestâ report for a question using endorsements, usage metrics, last-refresh freshness, and lineage health.
Explain: Generate a one-paragraph narrative with minimal-span citations to the underlying measures and filters (e.g., âRevenueYTD, filtered Region = EMEA, Currency = USDâ).
Validate: Check RLS role membership and sensitivity labels before producing a link or attachment.
Share: Create scoped links (people, groups, external B2B), set expiration, and attach guardrails (no resharing, watermark, export disabled).
Follow-through: Subscribe recipients, create refresh alerts, and open a âdata-to-decisionâ task with acceptance criteria.
Governance patterns that keep sharing safe
RLS/OLS first, prompts second: Agents should never summarize rows the user cannot query. The agent queries as the recipientâs effective role or refuses.
Sensitivity inheritance: When the agent composes a narrative across visuals, the highest sensitivity label must flow to the output.
Certified-only defaults: Default the agent to certified/owner-approved reports; allow overrides only with a reason code that lands in the audit log.
Least-privilege links: Prefer people-specific links with expiry over workspace-wide access, and default export to off.
A day in the life: sales ops collaboration
A regional lead types: âShare this quarterâs pipeline slippage with the EMEA managers.â
The agent finds the Certified âRevenue & Pipelineâ report, verifies that the EMEA managersâ group has a matching RLS role, applies the âCurrent Quarterâ bookmark, and pins a KPI tile to the Sales Ops Hub dashboard.
The agent generates a link with 30-day expiry, attaches a two-paragraph explainer that cites the measures used, and schedules a Monday 08:00 subscription.
It opens a Planner task âReview EMEA slippage drivers,â auto-attaches the report link and the exact filter state, and sets acceptance: âManager comment + mitigation plan per top 3 deals.â
Practical implementation guide
1) Model and metadata hygiene
Treat the Semantic Model as the contract: name measures clearly (RevenueYTD
, PipelineSlippagePct
), document them in descriptions, and expose Perspectives for agent-friendly surface area.
Use Endorsements (certified) and lineage fixed signals; your agent should rank results by (certified â promoted â none) and by usage freshness.
2) Policy checks before share
Query the recipientâs AAD group memberships; verify RLS roles exist.
Inspect sensitivity labels on the dataset, report, and workspace; if any label â„ Confidential, enforce watermarked view links and block CSV export.
Confirm tenant/tenant-to-tenant sharing settings; if cross-tenant is off, propose a workspace guest invite instead of a link.
3) Repeatable sharing actions
Create or update a Power BI shareable link with scope = People/Group, expiry, reshare = false, export = false.
Add a subscription (HTML snapshot is safer than attachment for sensitive labels).
Pin a tile to a team hub dashboard with the exact filter/bookmark state.
Post a comment with a one-paragraph narrative that names measures, filters, and last refresh.
4) Traceability and audit
Log: who asked, which asset was shared, endorsement level, sensitivity, RLS role, link scope, expiry, and whether export was disabled.
Capture the semantic fingerprint (dataset ID, measure names, filters) in the audit note so recipients can reproduce results.
Example: agent prompt contract (Fabric-aware)
role: "FabricReportSharingAgent"
scope: >
Recommend, validate, and share Power BI reports from Microsoft Fabric.
Prefer certified assets; enforce RLS and sensitivity labels; never reveal data beyond the recipientâs role.
output:
type: object
required: [summary, choice, validation, share_plan, receipts]
properties:
summary: {type: string, maxWords: 80}
choice:
type: object
required: [report_name, dataset_id, endorsement, last_refresh]
validation:
type: object
required: [rls_role_ok, sensitivity_label, tenant_policy_ok]
share_plan:
type: object
required: [link_type, scope, expires_on, export_disabled, watermark, subscriptions[]]
receipts:
type: array # link id, comment id, subscription id
policy: "Use certified assets by default. If not certified, require reason and owner mention."
citation_rule: "Cite measure names and filters used in the preview summary."
Why this helps: The contract decouples selection, validation, and sharing, making it easy to test and to enforce governance in CI (golden traces for âshould/shouldnât shareâ scenarios).
Minimal Python sketch (Fabric/Power BI REST concepts)
# conceptual example (pseudocode-ish)
from datetime import datetime, timedelta
def choose_report(query, fabric_catalog):
candidates = search_catalog(query, fabric_catalog) # returns list with endorsement, usage, freshness
ranked = sorted(candidates, key=lambda c: (c['endorsement_rank'], c['usage_rank'], -c['staleness_minutes']))
return ranked[0]
def validate_policies(report, recipient):
rls_ok = check_rls_role(report['dataset_id'], recipient['aad_groups'])
label = get_sensitivity_label(report['id'])
tenant_ok = check_tenant_settings(recipient['tenant'])
return {"rls_role_ok": rls_ok, "sensitivity_label": label, "tenant_policy_ok": tenant_ok}
def share_report(report, recipients, watermark=True):
expires = (datetime.utcnow() + timedelta(days=30)).date().isoformat()
link = create_share_link(report_id=report['id'], scope=recipients, expires_on=expires,
export_disabled=True, resharing_disabled=True, watermark=watermark)
sub_ids = [create_subscription(report['id'], r, schedule="Mon 08:00") for r in recipients]
comment_id = post_comment(report['id'], "Summary: RevenueYTD (Region=EMEA). Last refresh: {}".format(report['last_refresh']))
return {"link": link, "subscriptions": sub_ids, "comment_id": comment_id}
(Wire these to official APIs/SDKs; enforce idempotency via clientRequestId.)
Collaboration patterns that actually stick
Narratives first, links second: People adopt what they understand. Agents should attach a short explanation of what changed and why it matters, not only a URL.
Bookmarks as contracts: Share with named bookmarks so every recipient opens the same filtered state.
âAsk-to-Shareâ loop: If validation fails (e.g., no RLS role), the agent proposes an access request to the dataset owner with the exact justification.
Scorecards: When a KPI is shared repeatedly, promote it into a Metrics/Scorecard and subscribe the audience thereâfewer links, more context.
Comment â task: Agent turns comment threads into Planner/Azure DevOps tasks with the report link and acceptance criteria.
Measuring success
Track adoption and trust: (a) certified vs. non-certified share rate, (b) shares with expired links, (c) export-disabled share percent, (d) time-to-first-view, (e) refresh recency at view time, (f) âquestion answered without analystâ rate. Use these to tune agent ranking and default behaviors.
Common pitfalls (and fixes)
Agents that bypass RLS â Always impersonate as the recipient during previews; otherwise output a redaction notice.
Ambiguous report selection â Demand at least one of: dataset ID, workspace, or certified tag; or return top-3 with governance scores.
Narratives that drift from definitions â Force the agent to cite measure names and their descriptions from the semantic model every time it explains a visual.
Over-sharing â Default to 30-day expiring, person-scoped links; create group access only after an explicit âconvert to groupâ step that pings the owner.
Conclusion
Fabric gives you a governed backboneâOneLake, Semantic Models, Power BI, and Purviewâon which report-sharing agents can thrive. By coupling selection â validation â sharing with policy-aware prompts and auditable actions, you turn ad-hoc sharing into a safe, scalable collaboration loop. Start with certified models, enforce RLS and labels automatically, and let the agent narrate the âso what.â The payoff is faster decisions, fewer bottlenecks, and a durable culture of data-driven teamwork.