Guides

How to Find Unused ("Zombie") Reports in Power BI

2026-07-21 · 7 min read

A zombie report is a report that nobody has opened in months but that still lives in a workspace — refreshing its dataset on schedule, consuming capacity and storage, showing up in search results, and widening your security and audit surface. Every Power BI tenant older than a year has them; large tenants have thousands.

Why unused content is worth hunting

  • Cost: scheduled refreshes of unwatched datasets burn capacity units and, on Premium/Fabric SKUs, contribute to throttling and oversized capacity purchases.
  • Risk: every forgotten report is still shareable and still governed by whatever permissions it had years ago.
  • Trust: when five versions of "Sales Overview" coexist, nobody is sure which one is the real number.

Method 1 — Usage metrics in the service

Every report has a built-in usage metrics report (report menu → Usage metrics) showing views and viewers. It is the quickest check for a single report, but it only covers a rolling ~30-day window, works report-by-report, and cannot give you a tenant-wide list of what is idle.

Method 2 — The unused-artifacts admin API

The admin REST API has a purpose-built (preview) call that returns datasets, reports and dashboards not used within the last 30 days — one workspace at a time:

Login-PowerBI  # Power BI PowerShell module, admin account

$workspaces = Get-PowerBIWorkspace -Scope Organization -All
foreach ($w in $workspaces) {
  Invoke-PowerBIRestMethod -Method Get `
    -Url "admin/groups/$($w.Id)/unused"
}
Mind the limits: the call is per-workspace (so a big tenant means thousands of calls against the admin API rate limits), it is a preview API, and "unused" is fixed at Microsoft’s 30-day window — you cannot ask for "no views in 6 months".

Method 3 — Build your own usage store from the activity log

The tenant activity log records every report view. Admins can export it via the Get Activity Events API (or Get-PowerBIActivityEvent), one day per call, with roughly a month of lookback. Persist those events into a database every day and you can answer "no views in N months" for any N — this is the correct foundation, but now you own a scheduled pipeline, a database, API limits and schema drift.

What a continuous approach looks like

The DIY methods share one weakness: they are snapshots. Usage governance only works when view events are collected every day, kept for months, joined with a live inventory of workspaces, reports and datasets, and evaluated against an "unused" rule your organization actually agrees with. That is precisely what PGR Sonar does — it syncs your tenant on schedule, accumulates usage history, and keeps a standing list of unused reports and models across every workspace, with the threshold under your control.

Frequently asked questions

Is 30 days of no views enough to call a report unused?

Usually not. Quarterly business reviews, budget packs and audit reports are opened a few times a year and would be wrongly flagged by any 30-day rule. That is why a defensible cleanup needs usage history longer than the 30-day windows Microsoft’s built-in tools provide, and an "unused" threshold you choose yourself.

Does deleting unused reports actually save money?

Deleting a report alone saves little, but unused reports usually sit on unused datasets — and datasets consume storage and scheduled-refresh compute on your capacity. Retiring a report together with its orphaned dataset stops those refreshes and frees real capacity headroom.

Can I automate unused-report detection with Microsoft tools only?

Yes, by scripting the admin APIs: iterate workspaces with GetUnusedArtifactsAsAdmin, or export activity events daily into your own database and query view events per report. Both work, but you own the scheduling, storage, API limits and maintenance — which is exactly the part governance tools automate.

Do this continuously, without the scripts

PGR Sonar inventories your whole Power BI / Fabric tenant, keeps usage, capacity and refresh history long-term, and flags what needs attention — read-only, metadata only, running on autopilot.

Start free 14-day trial

No credit card required.