Power BI Themes and Branding for Professional Reports

How to brand Power BI reports with themes: how the base theme, custom theme and visual formatting layer, why theme colors beat custom colors, series color order, the theme JSON file with colors, text classes, visual styles and presets, and a contrast check that finds weak colors before readers do.

GloryTecks Team

Training & Placement Faculty

6 May 2026 6 min read

Last updated: 25 September 2026

Share:

A report that looks like it came from your organisation earns trust faster than one in default colours, and a theme is how to do it once rather than visual by visual. Microsoft describes report themes as a way to apply design changes to an entire report: colours, default visual formatting and style presets (Microsoft Learn: report themes). Used well, a theme also makes every future report consistent.

How themes layer

Three layers decide how a visual looks:

  1. The base theme, managed by Microsoft and added when a report is created. New releases can update it, but a report keeps its original base theme until you update it.
  2. The custom theme, your brand theme, layered on top. It overrides or adds to anything in the base theme.
  3. Formatting on an individual visual, applied in the Format pane, which the theme does not override.

Reset to default on a visual returns it to the custom theme, and to the base theme for anything the custom theme does not define. Use it carefully: it also removes conditional formatting rules, button actions and images from URLs on that visual.

Applying and customising a theme

In Power BI Desktop, open the View ribbon and the Themes dropdown. It offers built-in themes, organisational themes if an admin has published them, Browse for themes for a JSON file, and Customize current theme for colours, text, visuals, page and filter pane settings. Two cautions: applying a built-in theme or importing a custom one replaces any existing custom theme, and when editing in the service, the dropdown lists only built-in and organisational themes.

Theme colours versus custom colours

When you colour anything, pick from the theme colours rather than More colors. Theme colours are relative: choose the third colour of the palette, change the theme later, and the visual takes the new theme's third colour. A hex code picked from More colors stays fixed, so rebranding means editing every visual by hand.

Series colours need one more thought. Power BI assigns data colours in the order series appear in a visual. If one chart shows North then South and another East then North, North gets different colours in the two. For categories that must always look the same, such as your own brand versus competitors, set the colour of those data points explicitly.

The theme JSON file

For full control, edit the theme file. Only name is required; everything else is optional and falls back to the base theme (Microsoft Learn: custom themes). A compact brand theme might look like this:

json
{
    "name": "Brand Theme",
    "dataColors": ["#0B3D91", "#C8102E", "#2E7D32", "#6A1B9A", "#8D6E00", "#00838F"],
    "good": "#2E7D32",
    "neutral": "#8D6E00",
    "bad": "#C8102E",
    "background": "#FFFFFF",
    "firstLevelElements": "#252423",
    "tableAccent": "#0B3D91",
    "textClasses": {
        "title": { "fontFace": "Segoe UI Semibold", "fontSize": 12, "color": "#252423" },
        "label": { "fontFace": "Segoe UI", "fontSize": 10, "color": "#252423" }
    },
    "visualStyles": {
        "*": { "*": { "*": [{ "wordWrap": true }] } }
    }
}
  • dataColors colour the shapes that represent data; when they run out, Power BI generates more by adjusting saturation and hue.
  • good, neutral and bad set the status colours used by waterfall and KPI visuals.
  • Structural colours such as firstLevelElements, also called foreground, colour text boxes, table values, card labels and more.
  • Text classes: four primary classes, callout, title, header and label, drive twelve in total, because secondary classes such as bold totals inherit from them.
  • visualStyles set defaults per visual type; an asterisk means every visual or every formatting card, and a quoted name creates a style preset authors can pick from a dropdown.

Microsoft publishes a JSON schema for theme files. Reference it with "$schema" in Visual Studio Code, and autocomplete shows valid properties, which saves hunting for formatting card names.

Named colours in DAX

Conditional formatting cannot be stored in a theme, but measures can return theme colour names instead of hex codes, so colours follow the theme:

dax
Status Color =
SWITCH ( TRUE (), [Status Score] >= 80, "good", [Status Score] >= 50, "neutral", "bad" )

Apply it with the Field value format style. Conditional formatting and KPI cards show where this pays off.

Check contrast before you ship

Brand palettes are chosen for logos, not for thin lines on white. WCAG 2.1 asks for a contrast ratio of at least 4.5:1 for text and 3:1 for graphical objects needed to understand content (W3C: WCAG 2.1). Checking a palette takes a few lines, shown here on Microsoft's own example themes:

python
def luminance(hex_color):
    """WCAG 2.1 relative luminance of an sRGB colour such as '#118DFF'."""
    channels = [int(hex_color.lstrip("#")[i:i + 2], 16) / 255 for i in (0, 2, 4)]
    r, g, b = [c / 12.92 if c <= 0.04045 else ((c + 0.055) / 1.055) ** 2.4 for c in channels]
    return 0.2126 * r + 0.7152 * g + 0.0722 * b

def contrast(a, b):
    light, dark = sorted([luminance(a), luminance(b)], reverse=True)
    return (light + 0.05) / (dark + 0.05)

themes = {   # dataColors and foreground copied from Microsoft's theme documentation
    "Valentine's Day": ["#990011", "#cc1144", "#ee7799", "#eebbcc", "#cc4477", "#cc5555", "#882222", "#A30E33"],
    "Custom Theme example": ["#118DFF", "#12239E", "#E66C37", "#6B007B", "#E044A7",
                             "#744EC2", "#D9B300", "#D64550", "#197278", "#1AAB40"],
}
for name, colors in themes.items():
    weak = [f"{c} {contrast(c, '#FFFFFF'):.2f}:1" for c in colors if contrast(c, "#FFFFFF") < 3]
    print(f"{name}: {len(colors) - len(weak)} of {len(colors)} data colours reach 3:1 on white; below: {', '.join(weak)}")
print(f"Valentine's Day foreground #ee7799 as text on white: {contrast('#ee7799', '#FFFFFF'):.2f}:1 (text needs 4.5:1)")
text
Valentine's Day: 6 of 8 data colours reach 3:1 on white; below: #ee7799 2.72:1, #eebbcc 1.66:1
Custom Theme example: 9 of 10 data colours reach 3:1 on white; below: #D9B300 2.02:1
Valentine's Day foreground #ee7799 as text on white: 2.72:1 (text needs 4.5:1)

Two of the eight Valentine's colours are too pale for chart marks on white, and its foreground colour, which formats text such as table values and card labels, falls well short for text. The yellow in the other example is the one to watch in bar and line charts. Fixes are simple: darken weak colours, move pale ones to the end of dataColors so they are used last, or keep them for backgrounds and highlights. By the same formula, every data colour in the brand theme above reaches at least 4.5:1 on white. Colour should also never be the only way a difference is shown; labels and markers help everyone.

A branding checklist

  • One theme file per brand, kept in source control and shared, or published as an organisational theme.
  • Theme colours only in visuals; no hard-coded hex codes except deliberate data-point colours.
  • Contrast checked for data colours and text classes.
  • A consistent page layout, covered in dashboard design.

Why did my visual not change when I applied a new theme?

It has formatting applied directly in the Format pane, or a colour picked from More colors. Reset it to default, noting that this also removes its conditional formatting.

What is the minimum theme file?

A JSON file with only a name. Every other property is optional.

Can a theme include conditional formatting?

No. Apply rules to visuals, and return theme colour names such as good or bad from measures so they follow the theme.

Can I change the theme in the Power BI service?

Yes, when editing a report. The Themes dropdown lists built-in and organisational themes, and Microsoft documents importing and exporting theme files from the Theme pane.

UI and UX best practices for BI reports are part of the dashboard design and storytelling module of the Power BI course.

Sources

GloryTecks Team

Training & Placement Faculty

The GloryTecks faculty team mentors learners across Data Science, AI and Data Engineering, with a focus on real-time projects and placement readiness in Hyderabad.

Want to master Power BI?

Join GloryTecks’ expert-led Power BI training in Hyderabad with real-time projects and 100% placement support.

Explore course