Consider Merging Cards into a Matrix
Detects pages where a group of single-measure Card visuals share the same visual-level filter signature and could be consolidated into a single Matrix visual.
What It Detects
This flag identifies report pages where a group of single-measure Card visuals share the same visual-level filter signature. Each Card likely generates a separate DAX query. Consider replacing these Cards with a single Matrix visual and placing the measures in the Values field to reduce query count and improve performance.
Why It Matters
- Excessive DAX queries — Every Card visual generates its own DAX query against the dataset. A page with 10 Cards means 10 separate queries, even when they share the same filter context.
- Slower page rendering — More queries means longer page load times, especially on large datasets or when slicers are applied.
- Simplified maintenance — A single Matrix visual with multiple measures is easier to format, align, and update than a collection of individual Cards.
- Better user experience — A Matrix provides a more compact and scannable layout for displaying multiple KPIs side by side.
Trigger Conditions
A group of cards on a page is flagged when:
- There are at least 6 Card visuals in the same group on the same report page.
- The Card visuals share the same visual-level filter signature (the same per-visual filters configured on each Card).
- Each Card displays a single measure.
Cards are grouped by a signature built solely from each card's own visual-level filters array. Slicers and page-level filters are not part of the comparison. Only visuals whose type is card are considered; KPI and multi-row card visuals are excluded, as are cards that do not resolve to exactly one measure.
Threshold: ≥ 6 single-measure Card visuals sharing the same visual-level filter signature on a page. (This threshold is fixed in the analyzer and is not user-configurable.)
Output
Each finding is returned unchanged from the analyzer with the following fields:
| Field | Description |
|---|---|
pageName | Page internal name |
pageDisplayName | Page display name |
severity | medium or high (high when groupSize ≥ 8, otherwise medium) |
groupSize | Count of single-measure Card visuals in the group |
estimatedSavedQueries | Estimated DAX queries saved by merging (groupSize − 1) |
measureNames | Measures displayed across the cards in the group |
visualIds | IDs of the Card visuals in the group |
filterSignature | Serialized visual-level filter context used to group the cards |
There is no report name, workspace name, cardCount, or measures field.
Notes and Edge Cases
- Intentional design — Some report designs intentionally use individual Cards for visual emphasis or conditional formatting per KPI. Evaluate whether consolidation fits the design intent.
- Different filter contexts — Cards with different visual-level filters produce different signatures and are grouped (and evaluated) separately, so they are never merged into the same finding.
- Excluded visual types — KPI and multi-row card visuals are excluded, and cards that do not resolve to exactly one measure are ignored to avoid false positives.
- Custom Card visuals — Third-party Card visuals may not be detected by this flag.
Related Flags
- Excessive Visuals — High total visual count on a page, including Card visuals.
- Non-Data Visuals — Decorative visuals that don't display data.