Dynamic formatting: drive every setting of a Plume visual with a DAX formula
Title color based on growth, computed text size, style picked by a slicer: in every Plume Studio visual, each Format pane setting can come from a DAX measure, with the fx button or the “Dynamic format” field.
Lire en françaisIn Plume Studio visuals, every Format pane setting can come from a DAX formula: a title color that turns red when revenue drops, a subtitle showing the yearly average, a text size or a style picked by a slicer, an axis that keeps the same scale when you filter… There are two ways to do it.
| fx button | “Dynamic format” field | |
|---|---|---|
| Settings | Every color and every text | Every setting: sizes, numbers, toggles, lists, fonts, colors, texts |
| How | Click fx next to the setting | Drop a measure into the field and name it card.setting |
| Visuals | Every Plume visual (charts, slicers, Ridgeline Plume, Map Plume…), except Table Plume, Matrix Plume and KPI Plume | Every Plume visual, including Table Plume, Matrix Plume and KPI Plume |
1. The fx button (colors and texts)
This is the usual Power BI conditional formatting. The fx button sits in the Format pane, to the right of every color or text setting, in every card: title, subtitle, source note, custom colors, data colors, labels, axes, frame…
- In the Format pane, find a color or a text (for example Title › Color (empty = text)).
- Click fx.
- Choose Field value and a measure returning a color (
"#C0392B") or a text, or use Rules / Gradient.
Color by growth =
IF ( CALCULATE ( [Growth 2025], ALLSELECTED () ) >= 0, "#2E7D4F", "#C0392B" )
In Data colors, an fx rule colors each category, as in native visuals. There is no fx button on the License card or on per-series colors (a Microsoft recommendation).
Why no fx in Table Plume, Matrix Plume and KPI Plume? Power BI doesn't allow conditional formatting in table-based or matrix-based custom visuals: these three visuals can't show the button. The same settings are driven there by the “Dynamic format” field (section 2). To color cells by a value, Table Plume and Matrix Plume have the free Cell elements card (background, font, icons, web URL, with the Cell elements fields well); KPI Plume has the Title (text measure), Note (text measure), Icon (text measure) and Reference labels fields.
Power BI doesn't offer the fx button for sizes, toggles and lists either: use the “Dynamic format” field instead.
2. The “Dynamic format” field (every setting)
- Create a measure that returns the value you want: a number, a text, a color, TRUE / FALSE.
- Drop it into the visual's Dynamic format field (below the other fields). It accepts several measures.
- Name it card.setting: right-click the measure in the field › Rename for this visual, for example
title.fontSizeortitle.color. The measure keeps its name in the model.
Title size = IF ( HASONEVALUE ( Sales[Region] ), 20, 14 )
Report style = SELECTEDVALUE ( Look[Style], "none" ) -- rename it style.preset
Names ignore case and accents: Title Color, title/color and title.color all point to the same setting. The most common keys:
| Key | Setting | Values |
|---|---|---|
title.text, title.subtitle | Title, subtitle | text |
title.color, title.fontSize | Title color, size | #RRGGBB; number |
style.preset | Style | none, nordic, press, neon, dark… |
style.palette | Gradient palette | auto, viridis, warmingStripes… |
style.customColors | Customize colors | TRUE / FALSE |
style.colorAccent, style.series1… | Custom colors | #RRGGBB |
container.bgColor, container.radius, container.border | Frame: background color, rounded corners, border | #RRGGBB; number; TRUE / FALSE |
dataColors.single, dataColors.mode | Data colors | #RRGGBB; single, category… |
gridlines.hShow, gridlines.valShow | Horizontal gridlines (Line, Scatter…); value gridlines (Bar Plume) | TRUE / FALSE |
columnHeaders.background | Column headers (Table, Matrix Plume) | #RRGGBB |
header.title, header.fontSize | Slicer header | text; number |
Accepted values. Colors: #RGB, #RRGGBB, rgb(…) and a few names (red, navy, gold…). Numbers: a DAX number or a text such as “12.5”, kept within the setting's minimum and maximum. Toggles: TRUE / FALSE, 1 / 0, “yes” / “no”. Lists: the technical value (center) or the pane label (“Center”). Write the label exactly as the pane shows it, “★” included: the engine does not yet recognize a label without its ★ (“Neon ★”, not “Neon”; the technical value neon works too).
In edit mode, a measure with an unknown name or an unusable value is flagged in the visual (“Dynamic format: unknown setting…”) and simply ignored: the Format pane setting applies.
3. Old names are still accepted
On October 30, 2026, the Format pane of every Plume visual was reorganized: some cards were renamed or merged so they carry the same name everywhere. A measure named with the old name keeps working, and an existing report keeps its settings. For a new measure, use the new name (the one in the visual's technical reference).
| Old name | New name | Visuals |
|---|---|---|
style.radius, style.bgShow, style.bgColor, style.bgColor2 | container.radius, container.bgShow, container.bgColor, container.bgColor2 (Frame card) | charts (style.radius in slicers too) |
header.fontSize, header.background… | columnHeaders.fontSize, columnHeaders.background… (Column headers card) | Table Plume, Matrix Plume |
valAxis.grid, valAxis.gridColor, catAxis.grid | gridlines.valShow, gridlines.valColor, gridlines.catShow (Gridlines card) | Bar Plume |
yAxis.grid, yAxis.gridColor, xAxis.grid | gridlines.hShow, gridlines.hColor, gridlines.vShow | Line Plume, Scatter Plume, Hexbin Plume, Stream Plume |
bars.orientation, bars.layout | layout.orientation, layout.type (Layout card) | Bar Plume |
display.mode | layout.mode | Ridgeline Plume |
labels.* (category names) | categoryLabels.* (Category labels card) | Sankey Plume, Chord Plume, Ridgeline Plume |
compare.* | comparison.* (Comparison card) | Period Plume, KPI Plume, Heatmap, Radar, Word Cloud, Beeswarm Plume… |
Each visual lists its renamed settings in its version history.
4. Keep the same scale when the report is filtered
When a slicer or a click filters the report, the axes are recomputed: the tallest bar always reaches the top of the chart, and you no longer see that values went down. To keep the scale, drive the axis minimum and maximum with a measure that ignores filters.
- Create the maximum measure, computed on all the data:
Axis max =
CALCULATE ( MAXX ( VALUES ( Products[Category] ), [Revenue] ), REMOVEFILTERS () )
-- or, when each point is a row: CALCULATE ( MAX ( Sales[Amount] ), ALL ( Sales ) )
- Drop it into Dynamic format and rename it with the visual's axis key:
valAxis.max(Bar Plume),yAxis.max(Line, Waterfall, Candle, Stream Plume),xAxis.maxandyAxis.max(Scatter, Hexbin Plume),scale.max(Gauge, Heatmap, Radar, Shape Gauge Plume),timeAxis.min/timeAxis.max(Gantt, Timeline Plume). Do the same for the minimum if needed (valAxis.min,yAxis.min…). - Filter the report: the bars get shorter, the axis no longer moves.
Use REMOVEFILTERS (), REMOVEFILTERS ( Table ) or ALL ( Table ), not ALLSELECTED (): ALLSELECTED follows slicers and cross-filters, so the scale would still move.
The exact keys of each visual (Minimum, Maximum, Axis start…) are in its “Fields and settings” page and in its technical reference.
5. Which value is used?
Power BI evaluates the measure for each item of the visual (each bar, each ridge). For a global setting such as the title, the visual uses the total when Power BI provides it (Matrix Plume, KPI Plume), otherwise the value shared by every item, otherwise the first one. To get the value of the whole visual as it is filtered, wrap the calculation in CALCULATE ( …, ALLSELECTED () ), as in the examples above; for a value that ignores filters (fixed scale), use REMOVEFILTERS or ALL (section 4).
Priority: the DAX formula wins over the Format pane setting, the style and the JSON theme; the “Dynamic format” field wins over an fx rule; only Windows high contrast comes first.
6. Good to know
- Performance: a “Dynamic format” measure that never returns blank can bring up combinations without data when two fields from different tables are used as categories. Write it so that it stays blank where the visual has no data, for example
IF ( NOT ISBLANK ( [Revenue] ), 14 ). - ★ features: driving a setting with DAX is free; a ★ setting (a paid style, for instance) stays ★ and shows the “Premium preview” watermark without a license key, just as if it were picked by hand.
- Sample reports: every sample report shows dynamic formatting (computed title or color, scale kept under filters) and recalls it on its Hints page.