--- id: MinaSaad1/pbi-cli/power-bi-themes version: "eb18a5b8" license: MIT install: manual updated: 2026-07-27 --- # Power BI Themes — Manage report-wide themes and per-visual conditional formatting without needing Power BI Desktop. Apply JSON theme files to set colors, fonts, and visual defaults across your entire report, preview changes before committing, and apply data-driven formatting rules to individual visuals using gradient, rule-based, or measure-driven approaches. Publisher: MinaSaad1 · Stars: 424 · Updated: 2026-07-27 Install (manual): `git clone https://github.com/MinaSaad1/pbi-cli` ## SKILL.md # 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 ``` [View on SkillFed](https://skillfed.io/MinaSaad1/pbi-cli/power-bi-themes) · [View on GitHub](https://github.com/MinaSaad1/pbi-cli)