---
name: minasaad1/Power BI Themes
source: https://app.decimal.ai/s/minasaad1-power-bi-themes@1/SKILL.md
source_sha256: 7235c7d19ed4
---

# Power BI Themes Skill

Manage report-wide themes and per-visual conditional formatting. No Power BI
Desktop connection is needed.

## Applying a Theme

Power BI themes are JSON files that define colours, fonts, and visual defaults
for the entire report. Apply one with:

```bash
pbi report set-theme --file corporate-theme.json
```

This copies the theme file into the report's `StaticResources/RegisteredResources/`
folder and updates `report.json` to reference it. The theme takes effect when
the report is opened in Power BI Desktop.

## Inspecting the Current Theme

```bash
pbi report get-theme
```

Returns:
- `base_theme` -- the built-in theme name (e.g. `"CY24SU06"`)
- `custom_theme` -- custom theme name if one is applied (or `null`)
- `theme_data` -- full JSON of the custom theme file (if it exists)

## Comparing Themes

Before applying a new theme, preview what would change:

```bash
pbi report diff-theme --file proposed-theme.json
```

Returns:
- `current` / `proposed` -- display names
- `added` -- keys in proposed but not current
- `removed` -- keys in current but not proposed
- `changed` -- keys present in both but with different values

This helps catch unintended colour changes before committing.

## Theme JSON Structure

A Power BI theme JSON file typically contains:

```json
{
  "name": "Corporate Brand",
  "dataColors": ["#0078D4", "#00BCF2", "#FFB900", "#D83B01", "#8661C5", "#00B294"],
  "background": "#FFFFFF",
  "foreground": "#252423",
  "tableAccent": "#0078D4",
  "visualStyles": { ... }
}
```

Key sections:
- `dataColors` -- palette for data series (6-12 colours recommended)
- `background` / `foreground` -- page and text defaults
- `tableAccent` -- header colour for tables and matrices
- `visualStyles` -- per-visual-type overrides (font sizes, padding, etc.)

See [Microsoft theme documentation](https://learn.microsoft.com/power-bi/create-reports/desktop-report-themes) for the full schema.

## Invalid Properties to Avoid

These properties look plausible but are **not in PBI's theme schema**. Including
them causes PBI Desktop to fail silently or crash when loading the report:

| Property | Location | Why invalid |
|---|---|---|
| `"radius": 8` | Inside `border` objects in `visualStyles` | Borders only accept `color` and `show` |
| `"page": { ... }` | Top-level key | Legacy pbiviz format — not valid in report themes |
| `"dropShadow": { "position": "Inner" }` | Inside `visualStyles` | No `position` sub-property exists for dropShadow |

**Safe top-level keys** for a custom theme:
`name`, `dataColors`, `background`, `foreground`, `tableAccent`,
`visualStyles`, `textClasses`, `outspaceColor`, `borderColor`, `shapeColors`

Always use `pbi report diff-theme` to preview changes before applying, and
open the report in Desktop once to confirm it loads before committing the file.

## Conditional Formatting

Apply data-driven formatting to individual visuals:

```bash
# Gradient background (colour scale from min to max)
pbi format background-gradient visual_abc --page page1 \
    --table Sales --column Revenue \
    --min-color "#FFFFFF" --max-color "#0078D4"

# Rules-based background (specific value triggers a colour)
pbi format background-conditional visual_abc --page page1 \
    --table Sales --column Status --value "Critical" --color "#FF0000"

# Measure-driven background (a DAX measure returns the colour)
pbi format background-measure visual_abc --page page1 \
    --table Sales --measure "Status Color"

# Inspect current formatting rules
pbi format get visual_abc --page page1

# Clear all formatting rules on a visual
pbi format clear visual_abc --page page1
```

## Workflow: Brand a Report

```bash
# 1. Create the theme file
cat > brand-theme.json << 'EOF'
{
  "name": "Acme Corp",
  "dataColors": ["#1B365D", "#5B8DB8", "#E87722", "#00A3E0", "#6D2077", "#43B02A"],
  "background": "#F8F8F8",
  "foreground": "#1B365D",
  "tableAccent": "#1B365D"
}
EOF

# 2. Preview the diff against the current theme
pbi report diff-theme --file brand-theme.json

# 3. Apply it
pbi report set-theme --file brand-theme.json

# 4. Verify
pbi report get-theme
```

## JSON Output

```bash
pbi --json report get-theme
pbi --json report diff-theme --file proposed.json
pbi --json format get vis1 --page p1
```