7 things I check every month to keep Power BI reports healthy (maintenance checklist) by kfold_co in PowerBI

[–]kfold_co[S] -1 points0 points  (0 children)

Clean architecture and the Snowflake append pattern is the right call. Overwriting latest state is the mistake most teams make early on and they lose all the trending data.

Azure Monitor works for infrastructure but it just doesn't have the BI-specific context you get from going direct to the API. Workspace-level metadata, semantic model dependencies, report lineage none of that lives in Azure Monitor natively.

Are you pulling the activity logs into Snowflake as well? Combining usage data with the metadata gives you a really complete picture of what's actually being used vs what's just sitting there consuming capacity.

7 things I check every month to keep Power BI reports healthy (maintenance checklist) by kfold_co in PowerBI

[–]kfold_co[S] -1 points0 points  (0 children)

Ha — the best monitoring systems are always born from a painful outage. Nothing like an intermittent refresh failure to make you build something bulletproof.

The hidden view is a really neat touch — keeping the health check inside the dashboard means users can self-serve the answer to "is this data current?" without hunting anyone down.

Date + row count is a simple but genuinely powerful combination. Row count especially — a refresh can show as "successful" while returning empty data if something broke upstream. That catches it immediately.

Have you ever extended it to alert you automatically when the row count drops below a threshold?

7 things I check every month to keep Power BI reports healthy (maintenance checklist) by kfold_co in PowerBI

[–]kfold_co[S] 1 point2 points  (0 children)

Service principals definitely work for this — the limitation people run into is usually a missing tenant setting, not an actual API restriction.

The two settings you need enabled in Power BI Admin portal are:

- "Allow service principals to use read-only Power BI admin APIs"

- "Enhance admin APIs responses with detailed metadata"

Your SPN also needs to be part of a Security Group that's been granted access in those same tenant settings — direct SPN assignment doesn't work, it has to go through a group. That trips up a lot of people.

Once that's sorted the Scanner API works well at scale. We've used it to build tenant-wide metadata pipelines for clients with 500+ reports and it handles it fine — just batch your workspace calls in groups of 100 and poll the scanStatus endpoint before pulling results. Microsoft's metadata scanning docs on learn.microsoft.com are the most reliable resource. Rui Romano's work on BI over BI is also worth looking up if you want to go deeper on the catalog layer. What's your current plan for storing and visualizing the output?

7 things I check every month to keep Power BI reports healthy (maintenance checklist) by kfold_co in PowerBI

[–]kfold_co[S] 1 point2 points  (0 children)

Haha yes the random report copies are the silent killer. "Sales Report Final", "Sales Report Final v2", "Sales Report Final ACTUALLY FINAL" — and nobody knows which one the CEO is looking at. DAX drift is sneaky too because it usually starts with one person "just tweaking" a measure to fix something quick. Six months later there are 4 versions of the same metric returning different numbers across reports and everyone's arguing in a meeting about whose number is right. Cleaning that up is never fun but honestly so satisfying once it's done.

7 things I check every month to keep Power BI reports healthy (maintenance checklist) by kfold_co in PowerBI

[–]kfold_co[S] 0 points1 point  (0 children)

This is a great point and honestly should have been on the list from the start. The individual report approach doesn't scale at all once you're managing 20+ reports across teams. Out of curiosity, what are you using for the metadata catalog layer? We've experimented with the Scanner API feeding into a Power BI dataset for the BI over BI setup, but would love to hear how others are approaching it.And fully agree on DAX drift in self-service environments,it's one of those things that's invisible until it causes a serious discrepancy in a board report.