Skip to content

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:

  1. More than 12 visuals — the page is flagged with the reason Too many visuals (<count>).
  2. 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 triggers Moderate 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:

FieldDescription
idInternal page (section) name
displayNamePage display name (falls back to id when absent)
visualCountTotal number of visual containers on the page
tableCountNumber of table visuals
cardCountNumber of card visuals
slicerCountNumber of slicers
nonDataVisualCountNumber of non-data (decorative) visuals
levelSeverity level: low, medium, or high
reasonsList 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.

  • Non-Data Visuals — Decorative elements that contribute to visual count without displaying data (flagged separately when nonDataVisualCount exceeds 20).