If you last read a conditional-formatting article in 2024, almost every rule of thumb you learned is now obsolete. The July 2026 update is one of the largest formatting overhauls Power BI has ever shipped — and most reports in the wild aren't using it yet.
01TL;DR
You no longer need calculation groups, SVG measures, or duplicate visuals to solve 80% of "conditional format this thing" problems. Here's the short list of what the July 2026 update unlocks:
- fx buttons on font family, weight, size, italic, underline for almost every visual.
- Per-row format strings driven by DAX — different formats in the same measure column.
- Matrix subtotals can be styled independently from detail rows.
- New Card visual accepts conditional formatting on subtitle, reference labels, and callout.
- Slicer tile background, selected border, and chevron colour are now expression-driven.
- Small multiples get per-panel title, border and background formatting.
02What actually changed
Conditional formatting in Power BI used to be split into two worlds. The "official" world (background colour, font colour, data bars, icons) was a curated list of properties you could bind to a field or rule. Everything else lived in the "unofficial" world — SVG hacks in measures, HTML tags in the new Card visual, or dozens of calculation-group format-string items.
The July 2026 update collapses that split. Microsoft added the small fx button (the entry point for conditional formatting) to what feels like every property in the format pane. If you can see a property in the pane, you can almost certainly drive it from a measure now.
Before (June 2026 & earlier)
fx button available on ~30 core properties. Bold/italic required calculation groups. Icons capped at 5 rules. Format strings were per measure, not per row. Slicer background needed a native visual workaround.
After (July 2026)
fx button on 120+ properties across visuals. Font family, weight, size & style are field-driven. Per-row format strings via DAX. Icons with unlimited rules and SVG binding. Slicer, Card, and small multiples fully expression-aware.
03fx buttons are (almost) everywhere
Open any visual in July 2026, expand a properties group in the format pane, and look for the tiny fx icon beside the property label. That's your gateway. Anywhere you see it, you can bind the property to:
- A field value — the exact value in a table column drives the property.
- A rules list — ranges of values map to different property values.
- A gradient — for numeric properties, e.g. font size 10–20 by revenue.
The last one is quietly the biggest change. Gradient conditional formatting used to be limited to colours. Now it applies to numeric properties like font size, border width, corner radius, and even row height. Which means a table can literally grow its rows for high-value customers without any DAX gymnastics.
04Per-row format strings
This is my favourite change. Historically a measure had exactly one format string. If some rows should show as currency and others as a percentage or "N/A", you either wrote two measures or used a calculation group. Both approaches leak into the model.
In July 2026, format strings are dynamic expressions evaluated in row context. Write your measure normally, then set its format string to a DAX expression:
-- Applied to measure [Value] under Format > Format string > Custom > fx SWITCH( TRUE(), SELECTEDVALUE(DimMetric[Kind]) = "Currency", "₹#,##0", SELECTEDVALUE(DimMetric[Kind]) = "Percent", "0.0%", SELECTEDVALUE(DimMetric[Kind]) = "Ratio", "0.00", "General" )
Point one measure at that format string, drop it in a matrix with DimMetric[Kind] on rows, and the same column now displays currency, percent and ratio side by side. Calculation groups — where you were only using them for formatting — can go.
05The matrix is finally sane
Anyone who has styled a P&L in Power BI knows the pain: you finally get detail rows looking clean, then subtotals hijack the same styling and blow up the layout. July 2026 splits them properly.
Under Format > Specific column you'll find three separate scopes, each with their own fx bindings:
Detail rows. Bind font colour, weight, or icon by category or measure.
Every subtotal level. You can now bold Level 1 and italicise Level 2 independently.
Its own font family, background, and border. No more CSS-in-DAX to fake a total row.
A tiny but delightful addition: matrix column headers now accept a rotate conditional binding (0°/45°/90°). A revenue-by-month wide matrix suddenly fits on screen.
06Icons & Web URL 2.0
Icon-based conditional formatting had two long-standing limits: only 5 rules, and only a fixed icon set. Both are gone.
- Unlimited rules and a SVG source field. Point at a column that returns an inline
data:image/svg+xmlstring and any glyph is fair game. - Web URL conditional formatting now works on every text field, not just the special "Web URL" column type. You can turn any column into a clickable action link driven by a measure.
- The new icon position > before / after / replace toggle is field-driven — useful for RTL locales and mixed layouts.
Status Icon = VAR v = [Sales YTD] / [Target YTD] VAR colour = SWITCH(TRUE(), v >= 1, "#22c55e", v >= 0.85, "#f2c811", "#ef4444" ) RETURN "data:image/svg+xml;utf8," & "<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'>" & "<circle cx='12' cy='12' r='10' fill='" & colour & "'/></svg>"
07Slicers & the new Card visual
The tile slicer gained three long-requested bindings: tile background, selected border, and chevron colour. Combined with the existing tile text colour, you can now build slicers that feel branded without dropping a native visual on top.
The new Card (preview) visual — the one that replaces multi-row card — accepts conditional formatting on subtitle, reference label, and callout number independently. If you were maintaining twin cards for good/bad states, you can now collapse them into one.
0812 patterns you can copy today
Here are twelve short recipes, in order of "biggest win for least effort":
- Dynamic number formats — bind format string to a DAX
SWITCHon the measure kind (see §04). - Bold on target hit — bind Values > Font weight to
IF([Sales] >= [Target], "bold", "normal"). - Growing row height — gradient Row height 32–56 by
[Revenue]. - KPI display font — bind Font family to a rule: on-target → "Segoe UI Display Semibold", else "Segoe UI".
- Independent subtotal style — bold subtotals, italic grand total, no more layout leakage.
- Unlimited icon rules — use SVG source with a coloured circle measure (see §06).
- Row-scoped Web URL — return
NULLfor non-clickable rows to disable the link inline. - Slicer active-brand — bind tile background to your accent colour when the tile is selected.
- Card subtitle traffic light — bind subtitle colour to variance vs target.
- Small-multiples spotlighting — bind per-panel border to the panel key: highlight India, dim the rest.
- Alternating header rotation — matrix column-header rotation only for date columns beyond 12.
- Focus-mode auto-styling — bind background to
ISFILTERED('Focus')to dim non-focused visuals.
09Pitfalls & gotchas
The update is generous, but there are edges worth knowing before you rebuild every report.
- Performance. Format-string expressions run per cell. Keep them light — a big
SWITCHis fine, aCALCULATEover a fact table is not. - Accessibility. Font-family swaps can hurt screen-reader flow. Prefer weight/colour changes for status; save font-family for hero KPIs.
- Themes. Report themes now include a
conditionalFormattingblock. Set defaults there so you don't repeat rules on every visual. - Bookmarks. Bookmarks capture the current fx binding — if you toggle bindings via buttons, be explicit about which state each bookmark stores.
- Publishing to older services. Reports authored in July 2026 that use per-row format strings will fall back to the base format on any service instance older than the July release wave.
viewBox and container widths disagree. Always set explicit width/height in the SVG string.10Wrapping up
If your reaction to the July 2026 release notes was "cool, another format update, I'll get to it," go back and re-read them. The introduction of per-row format strings, font-family bindings, and independent matrix scopes genuinely changes how you model for a report. Some of your calculation groups, SVG-in-DAX tricks, and duplicate visuals can be retired this week.
Open a real report, delete one workaround measure, replace it with a native fx binding, and see how it feels. Then do it again on the next one. That's the honest way to internalise this update.
Source & further reading:
Inspired by and expanded from the original Fabric Community blog:
"You Are Now Wrong About Conditional Formatting 🤯 — Power BI July 2026 Update" on community.fabric.microsoft.com.