Support & Documentation

Dynamic Matrix Heatmap — a Power BI custom visual by TCViz · Version 1.0.0.0 · Last updated: 3 August 2026

Dynamic Matrix Heatmap lets the people reading your report choose their own crosstab. Instead of you building one matrix per combination, they pick the X dimension, the Y dimension and the value from dropdowns inside the visual — no edit rights, no request to a developer.

Video walkthrough

Quick start

  1. Drop the visual on the canvas.
  2. Drag two or more fields into Dimensions. These populate the X and Y dropdowns.
  3. Drag at least one measure into Measures.
  4. In the visual, pick an X axis and a Y axis. The matrix appears.
  5. Optional: drag a raw ID column (such as customer_id) into Distinct count of Pro to count unique values exactly.

Field wells

WellAcceptsLimitPurpose
DimensionsAny grouping field3 Free / 10 ProPopulates the X and Y dropdowns. Keep cardinality around 20–25 values per field.
MeasuresMeasures or numeric columns2 Free / 5 ProValues shown in the cells.
Distinct count ofRaw ID columns3 ProThe visual counts unique values itself, so the result is exact for every X/Y combination.

Why distinct counts are different here

Power BI computes a measure at the granularity of all the fields in the visual. When you display only two of them, the other values have to be combined. Sums, minimums, maximums and counts recombine exactly — but a distinct count does not, because a customer appearing under two different pickings would be counted twice.

That is what the Distinct count of well solves: give the visual the raw ID column and it counts unique values itself, in memory, for whichever pair of dimensions is on screen. The grand total matches your card visual exactly.

Format pane

CardSettingWhat it does
ValuesAggregationHow rows sharing a cell are combined. Auto reads what Power BI applied to the field; override it for DAX measures, where the aggregation is not readable.
Show value as ProAbsolute, % of row, % of column, % of grand total.
Number formatAuto uses the model's format. Override when the model format is wrong for what is shown.
Show totals ProAdds a total row and column, with exact distinct counts in the margins.
Heatmap colorsMinimum / Middle / MaximumThree-point colour scale, applied globally across every visible cell.
Empty cellsDisplay asBlank, dash, zero or grey fill.
TextAxis labels, valuesFont, size and colour, set separately.
Controls barBackground colour and label font for the dropdown bar.
LayoutRow heightMinimum row height in pixels.
Column widthColumn width in pixels.
Column header orientationHorizontal, vertical (90°) or diagonal (45°).

Interaction

Troubleshooting

The values do not match my card visual

If you are showing a count of something that can appear in more than one category, use the Distinct count of well with the raw ID column rather than a DAX measure. A distinct count computed at a finer grain cannot be recombined correctly by any client.

A field shows as a percentage when it should not

This happens when the same field is added twice, once normally and once with "Show value as → Percent of grand total": Power BI marks the underlying column as a percentage and the mark reaches both instances. The visual detects and corrects this automatically. If it persists, set Values → Number format → Number, and check the column's format in your model.

An average behaves like a sum

Set Values → Aggregation → Average. Auto-detection reads the field's label and query name, but a DAX measure carries its aggregation inside the DAX where it cannot be read.

"Showing a partial dataset"

The row limit was reached. The visual loads row-level detail in segments to keep distinct counts exact; with many dimensions at once the combinations exceed what Power BI will deliver. Remove a dimension or two.

Clicking a cell does not filter another table

Check the relationship between the tables in Model view. Filtering from a fact table to a dimension table needs the cross-filter direction set to Both.

Pro features are greyed out after purchasing

Sign out and back into Power BI to refresh entitlement, then reopen the report. If it persists, open an issue with your AppSource order reference.

Limits and known behaviour

Getting help