/pbir-format
Format reference for Power BI Enhanced Report (PBIR) JSON schemas and patterns. Automatically invoke when the user asks about PBIR JSON structure, visual.json properties, PBIR expressions, objects vs visualContainerObjects, theme inheritance, conditional formatting patterns,
$ npx -y skills add data-goblin/power-bi-agentic-development --skill pbir-format --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/pbir-format
Context preview
The summary Claude sees to decide when to auto-load this skill.
Format reference for Power BI Enhanced Report (PBIR) JSON schemas and patterns. Automatically invoke when the user asks about PBIR JSON structure, visual.json properties, PBIR expressions, objects vs visualContainerObjects, theme inheritance, conditional formatting patterns,
SKILL.md
pbir-format.SKILL.mdname: pbir-format
description: Format reference for Power BI Enhanced Report (PBIR) JSON schemas and patterns. Automatically invoke when the user asks about PBIR JSON structure, visual.json properties, PBIR expressions, objects vs visualContainerObjects, theme inheritance, conditional formatting patterns, extension measures, bookmarks, field references, filter formatting, query roles, PBIR page structure, report wallpaper, or any PBIR metadata format question.
PBIR Format Reference
Skill that teaches Claude about the Power BI Enhanced Report (PBIR) JSON format to read and use it. Doesn't support legacy `report.json` or `layout` report metadata. To convert from legacy to PBIR format, users have to open and save their reports in Power BI Desktop.
Follow within reason the [mental model](./important/MENTAL-MODEL.md) when working with reports.
**Hard rule:** Treat PBIR JSON as an implementation detail. Read it when schema context is useful, but make every report, visual, page, bookmark, filter, mobile-layout, and theme change through `pbir`. Never hand-edit, text-replace, or script writes to report JSON. If `pbir` cannot express a requested mutation, stop and report the capability gap instead of inventing a raw-JSON fallback.
General, critical guidance
- **Check examples:** Check [examples](./examples/) for a valid report
- **Take a backup:** Make a copy of the report before modifying it
- **PBIX vs PBIP vs PBIR:** Work on a local `.Report` folder in PBIR format. Use Power BI
Desktop or `pbir report convert` for supported conversions; do not unzip, rezip, or patch PBIX internals. Do not work directly on PBIT files.
- **Valid JSON vs. Rendering JSON:** Valid JSON does not guarantee rendering. A visual might not render if the bound field is invalid (missing, wrong table, or misspelled) in the visual.json, if the visual elements are cropped by their container, if a model performance issue causes the dax query to time out, if a model data quality issue results in (Blank) or empty values, etc. Check whether a visual rendered using tools like the chrome or chrome devTools MCP server if the report was published to Power BI, but it's often faster to just ask the user to check in Power BI Desktop or the browser.
- **Hierarchical formatting cascade:** In Power BI reports, formatting is determined by the following order of operations: defaults --> Theme wildcards (*) --> Theme visualTypes --> bespoke visual.json configuration. Theme overwrites defaults, visualType overrides wildcards in themes, and visual.json overrides all theme formatting. Prefer putting as much of the formatting in the theme as possible over bespoke visual.json formatting because then changes only need to happen in one place
- **PBIR files are strict JSON:** No comments allowed
- **DON'T MAKE ASSUMPTIONS:** Check the Microsoft documentation and other reputable resources for context if needed, or ask the user.
Report Structure
Report.Report/
+-- .pbi/localSettings.json # Local-only, gitignored
+-- .platform # Fabric Git integration
+-- definition.pbir # Semantic model connection (byPath or byConnection) can open this file in Power BI Desktop to open the report
+-- mobileState.json # PBIR-Legacy artifact only; current PBIR stores phone layout per-visual in mobile.json
+-- semanticModelDiagramLayout.json # Model diagrams
+-- CustomVisuals/ # Private custom visuals only
+-- definition/
| +-- version.json # REQUIRED -- PBIR version
| +-- report.json # REQUIRED -- report-level config, including theme, report filters, settings
| +-- reportExtensions.json # Extension measures and visual calculations (report- and visual-level DAX)
| +-- pages/
| | +-- pages.json # Page order, active page
| | +-- [PageName]/ # Power BI Desktop may generate names with spaces; recommend no spaces for human-authored names
| | +-- page.json # Page-level properties, including size, background, filters
| | +-- visuals/
| | +-- [VisualName]/
| | +-- visual.json # Visual config, formatting, and field data bindings <-- most important and complex file for report dev and formatting
| | +-- mobile.json # Mobile formatting of the visual (niche)
| +-- bookmarks/ # Bookmarks are a bad practice and should be avoided if possible!
| +-- bookmarks.json # Bookmark order and groups
| +-- [id].bookmark.json # Individual bookmark state containing a snapshot of the report basically
+-- StaticResources/
+-- RegisteredResources/ # Custom themes, images
+-- [ThemeName].json # Custom theme <-- second most important and complex file for formatting
+-- SharedResources/BaseThemes/ # Microsoft base themesRules
Follow within reason the [mental model](./important/MENTAL-MODEL.md) when reviewing or providing feedback on reports.
Modifying a report
1. Understand the user's request. Ask questions if necessary to clarify the business context -- focus on the business process, the users, and the model 2. Explore the report efficiently to locate relevant pages and visuals 3. Check the connected semantic model. For thin reports (`byConnection`), use `fab`, `pbir`, or `te` CLI tools to explore the model. For `byPath`, connect to the local model in Power BI Desktop. Understanding the model reveals available fields and calculation logic 4. Identify the appropriate visuals and pages to modify. Ask the user for clarification if needed 5. Plan modifications with the correct PBIR structure and property values
Creating a report
1. Same workflow as modifying, except the report is generated with `pbir new`. Do not scaffold
Read more
name: pbir-format description: Format reference for Power BI Enhanced Report (PBIR) JSON schemas and patterns. Automatically invoke when the user asks about PBIR JSON structure, visual.json properties, PBIR expressions, objects vs visualContainerObjects, theme inheritance, conditional formatting patterns, extension measures, bookmarks, field references, filter formatting, query roles, PBIR page structure, report wallpaper, or any PBIR metadata format question.
PBIR Format Reference
Skill that teaches Claude about the Power BI Enhanced Report (PBIR) JSON format to read and use it. Doesn't support legacy `report.json` or `layout` report metadata. To convert from legacy to PBIR format, users have to open and save their reports in Power BI Desktop.
Follow within reason the [mental model](./important/MENTAL-MODEL.md) when working with reports.
**Hard rule:** Treat PBIR JSON as an implementation detail. Read it when schema context is useful, but make every report, visual, page, bookmark, filter, mobile-layout, and theme change through `pbir`. Never hand-edit, text-replace, or script writes to report JSON. If `pbir` cannot express a requested mutation, stop and report the capability gap instead of inventing a raw-JSON fallback.
General, critical guidance
- **Check examples:** Check [examples](./examples/) for a valid report
- **Take a backup:** Make a copy of the report before modifying it
- **PBIX vs PBIP vs PBIR:** Work on a local `.Report` folder in PBIR format. Use Power BI
Desktop or `pbir report convert` for supported conversions; do not unzip, rezip, or patch PBIX internals. Do not work directly on PBIT files.
- **Valid JSON vs. Rendering JSON:** Valid JSON does not guarantee rendering. A visual might not render if the bound field is invalid (missing, wrong table, or misspelled) in the visual.json, if the visual elements are cropped by their container, if a model performance issue causes the dax query to time out, if a model data quality issue results in (Blank) or empty values, etc. Check whether a visual rendered using tools like the chrome or chrome devTools MCP server if the report was published to Power BI, but it's often faster to just ask the user to check in Power BI Desktop or the browser.
- **Hierarchical formatting cascade:** In Power BI reports, formatting is determined by the following order of operations: defaults --> Theme wildcards (*) --> Theme visualTypes --> bespoke visual.json configuration. Theme overwrites defaults, visualType overrides wildcards in themes, and visual.json overrides all theme formatting. Prefer putting as much of the formatting in the theme as possible over bespoke visual.json formatting because then changes only need to happen in one place
- **PBIR files are strict JSON:** No comments allowed
- **DON'T MAKE ASSUMPTIONS:** Check the Microsoft documentation and other reputable resources for context if needed, or ask the user.
Report Structure
Report.Report/
+-- .pbi/localSettings.json # Local-only, gitignored
+-- .platform # Fabric Git integration
+-- definition.pbir # Semantic model connection (byPath or byConnection) can open this file in Power BI Desktop to open the report
+-- mobileState.json # PBIR-Legacy artifact only; current PBIR stores phone layout per-visual in mobile.json
+-- semanticModelDiagramLayout.json # Model diagrams
+-- CustomVisuals/ # Private custom visuals only
+-- definition/
| +-- version.json # REQUIRED -- PBIR version
| +-- report.json # REQUIRED -- report-level config, including theme, report filters, settings
| +-- reportExtensions.json # Extension measures and visual calculations (report- and visual-level DAX)
| +-- pages/
| | +-- pages.json # Page order, active page
| | +-- [PageName]/ # Power BI Desktop may generate names with spaces; recommend no spaces for human-authored names
| | +-- page.json # Page-level properties, including size, background, filters
| | +-- visuals/
| | +-- [VisualName]/
| | +-- visual.json # Visual config, formatting, and field data bindings <-- most important and complex file for report dev and formatting
| | +-- mobile.json # Mobile formatting of the visual (niche)
| +-- bookmarks/ # Bookmarks are a bad practice and should be avoided if possible!
| +-- bookmarks.json # Bookmark order and groups
| +-- [id].bookmark.json # Individual bookmark state containing a snapshot of the report basically
+-- StaticResources/
+-- RegisteredResources/ # Custom themes, images
+-- [ThemeName].json # Custom theme <-- second most important and complex file for formatting
+-- SharedResources/BaseThemes/ # Microsoft base themesRules
Follow within reason the [mental model](./important/MENTAL-MODEL.md) when reviewing or providing feedback on reports.
Modifying a report
1. Understand the user's request. Ask questions if necessary to clarify the business context -- focus on the business process, the users, and the model 2. Explore the report efficiently to locate relevant pages and visuals 3. Check the connected semantic model. For thin reports (`byConnection`), use `fab`, `pbir`, or `te` CLI tools to explore the model. For `byPath`, connect to the local model in Power BI Desktop. Understanding the model reveals available fields and calculation logic 4. Identify the appropriate visuals and pages to modify. Ask the user for clarification if needed 5. Plan modifications with the correct PBIR structure and property values
Creating a report
1. Same workflow as modifying, except the report is generated with `pbir new`. Do not scaffold
Power BI AI skills and Power BI agents for Claude Code and GitHub Copilot: a plugin marketplace of Power BI skills, subagents, and hooks for semantic models, DAX, TMDL, reports, and AI dashboards. Includes Microsoft Fabric skills and Fabric agents. Weekly updates.
Repo: data-goblin/power-bi-agentic-development
Other skills on power-bi-agentic-development.
- /deneb-visuals
Deneb visual creation, Vega/Vega-Lite spec authoring, and Deneb best practices for PBIR reports. Automatically invoke whenever the user mentions "Deneb" in any context, or asks about Vega/Vega-Lite specs in Power BI, Deneb cross-filtering, Deneb interactivity, pbiColor theme
Open skill - /powerbi-custom-visuals
Power BI custom visual (.pbiviz) development with the pbiviz toolchain and its MCP server. Automatically invoke when the user mentions "custom visual", "pbiviz", "develop a Power BI visual", "powerbi-visuals-tools", "IVisual", "capabilities.json", "visual formatting model",
Open skill - /python-visuals
Python visual creation and matplotlib/seaborn patterns for PBIR reports. Automatically invoke when the user mentions "Python visual", "matplotlib in Power BI", "seaborn in Power BI", "pythonVisual", or asks to "create a Python visual", "add a matplotlib chart", "write a Python
Open skill - /r-visuals
R visual creation and ggplot2 patterns for PBIR reports. Automatically invoke when the user mentions "R visual", "ggplot2", "ggplot in Power BI", or asks to "create an R visual", "add an R chart", "write an R visual script", "inject an R script into Power BI".
Open skill - /svg-visuals
SVG generation via DAX measures and extension measures with ImageUrl data category for inline visualizations in PBIR reports. Automatically invoke when the user mentions "SVG visual", "DAX sparkline", "SVG measure", "inline graphics with DAX", "ImageUrl data category",
Open skill - /executing-spark
Execute arbitrary Python or PySpark code on Fabric Spark compute without creating a notebook artifact; ephemeral Livy sessions with full Delta table access. Automatically invoke when the user asks to "run PySpark in Fabric", "create a Livy session", "execute Python on Fabric
Open skill

