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
Last updated: 25 September 2026
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:
- 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.
- The custom theme, your brand theme, layered on top. It overrides or adds to anything in the base theme.
- 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:
{
"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:
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:
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)")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?
What is the minimum theme file?
Can a theme include conditional formatting?
Can I change the theme in the Power BI service?
UI and UX best practices for BI reports are part of the dashboard design and storytelling module of the Power BI course.
Sources
- Use report themes in Power BI (Microsoft Learn) — Microsoft Learn
- Create custom report themes in Power BI Desktop (Microsoft Learn) — Microsoft Learn
- Web Content Accessibility Guidelines (WCAG) 2.1 (W3C) — W3C
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.
Related articles
Power BI Roadmap 2026: From Beginner to Job-Ready
A stage-by-stage Power BI roadmap from a first report to job-ready skills: preparing data, modelling, DAX, report design, publishing and security, then proof through projects, with a concrete checkpoint that shows when each stage is done, the role Microsoft describes for Power BI analysts, and common detours.
Power Query Tutorial: Transforming Data Without Code
A working tutorial for Power Query in Power BI Desktop: the applied-steps model, the profiling setting that hides problems, data types, the unpivot option that survives refresh, query folding, and how to structure queries so a report still refreshes next month.
Power BI Projects to Build for Your Portfolio
Five Power BI portfolio projects, each proving a different skill (a star schema with time intelligence, performance on millions of rows, Power Query reshaping, row-level security and a report for a real user), with datasets you are allowed to publish and what a reviewer will check.