4.1.2. Themes and Conditional Formatting
💡 First Principle: Consistency builds trust and speed: when colors, fonts, and styles mean the same thing on every page, readers stop decoding and start reading. Themes enforce consistency across a whole report; conditional formatting adds meaning to specific values, drawing the eye to what needs attention.
Report themes (View ribbon > Themes) set the default color palette, fonts, visual styles, and backgrounds for every visual. Options:
- Choose a built-in theme or one from the theme gallery.
- Customize current theme in a dialog: name and colors (theme colors, sentiment colors, divergent colors), text (fonts and sizes for titles, labels, cards), visuals (background, border, header), page background, and filter pane styling.
- Browse for themes to import a JSON theme file, which can define colors and detailed formatting for every visual type. JSON themes are how organizations distribute corporate branding to all report authors.
- Save current theme to export the JSON for reuse.
Theme defaults apply wherever a visual uses default formatting; explicit formatting on an individual visual overrides the theme. If a stem says "apply the corporate standard to all existing and future reports with minimal effort," the answer is a JSON theme file.
Conditional formatting (Format pane, or the field's drop-down in the Visualizations pane) changes formatting based on values. Available on tables, matrices, cards, and many charts:
- Background color and font color by gradient (color scale between min and max, optionally with a center), rules (if value ≥ 0.9 then green; ranges with numbers or percentages), or field value (a measure returns a color name or hex code, giving complete DAX control).
- Data bars in table and matrix cells.
- Icons (traffic lights, arrows) by rules.
- Web URL formatting to turn values into links.
- Chart elements (bar colors, line colors, titles) can use fx conditional formatting with rules or field values.
Field-value formatting is the most flexible approach: a measure such as Status Color = IF([Margin %] < 0.1, "#D64550", "#2E8540") lets one rule drive colors across many visuals and keeps the business threshold in the model.
⚠️ Exam Trap: Rules-based conditional formatting can base the rule on a different field than the one displayed ("color Sales by Margin %"). When a requirement says "highlight revenue cells red when profit margin is below 10%," you format the Revenue column and choose Margin % in "What field should we base this on?", rather than adding a Margin % column to the table.
Reflection Question: Why does a field-value conditional format driven by a DAX measure scale better across 20 reports than rules typed separately into each visual?