Excessive Visuals
Detects report pages with too many visuals, causing slow rendering and high query volume.
What It Detects
This flag identifies report pages that contain more visuals than the recommended threshold. Each visual on a page generates one or more DAX queries when the page loads, so a high visual count directly correlates with slow page load times and high CU consumption.
Why It Matters
- Slow page load — Each visual fires at least one query. A page with 30 visuals fires 30+ queries simultaneously, overwhelming the dataset engine.
- High CU burst — All queries for a page are submitted concurrently, creating a CU spike that can trigger throttling on shared capacities.
- Poor user experience — Users see a cascade of loading spinners, partial data, and layout shifts as visuals render at different speeds.
- Browser memory pressure — The Power BI web renderer must maintain the DOM for every visual, which can cause tab crashes on lower-end devices.
Trigger Conditions
The analyzer counts every visual container on each report page (visualCount) and flags the page based on that total:
- More than 12 visuals — the page is flagged with the reason
Too many visuals (<count>). - More than 8 visuals (but 12 or fewer) — the page is flagged with the lower-tier reason
Moderate number of visuals (<count>).
visualCount includes all visual types: charts, tables, matrices, cards, KPIs, slicers, and data-bound shapes.
Threshold: More than 12 visuals per page triggers
Too many visuals; more than 8 triggersModerate number of visuals. These thresholds are fixed in code and are not user-configurable —getVisualStats()takes no parameters and reads no settings.
Note: The number 20 referenced elsewhere in the tool is the threshold for non-data visuals (
nonDataVisualCount > 20), not the total visual count. See Non-Data Visuals.
Severity Level
Alongside the reasons, each page is assigned a level of low, medium, or high:
- High — the page has more than two reasons, or more than 12 visuals, or more than 3 slicers, or more than 10 non-data visuals.
- Medium — at least one reason fired but none of the high-severity conditions above are met.
- Low — no reasons fired.
Output
The analysis returns one object per report page with the following fields:
| Field | Description |
|---|---|
id | Internal page (section) name |
displayName | Page display name (falls back to id when absent) |
visualCount | Total number of visual containers on the page |
tableCount | Number of table visuals |
cardCount | Number of card visuals |
slicerCount | Number of slicers |
nonDataVisualCount | Number of non-data (decorative) visuals |
level | Severity level: low, medium, or high |
reasons | List of human-readable reason strings for why the page flagged |
Notes and Edge Cases
- Hidden pages — Hidden or tooltip pages are included in the scan. If a tooltip page has many visuals, it is flagged but may be less impactful because it is only rendered on hover.
- Bookmarks — Pages using bookmarks to show/hide visual groups may exceed the threshold in the raw layout even though users only see a subset at a time. The flag still applies because all visuals are loaded into memory and query simultaneously on page load.
- Drillthrough pages — These load on demand and may have a higher acceptable visual count.
Related Flags
- Non-Data Visuals — Decorative elements that contribute to visual count without displaying data (flagged separately when
nonDataVisualCountexceeds 20).