From pbip
Provides format reference for Power BI Enhanced Report (PBIR) JSON schemas and patterns. Useful for reading, writing, or modifying PBIR report metadata.
How this skill is triggered — by the user, by Claude, or both
Slash command
/pbip:pbir-formatThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
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.
examples/K201-MonthSlicer.Report/StaticResources/RegisteredResources/SqlbiDataGoblinTheme.jsonexamples/K201-MonthSlicer.Report/StaticResources/SharedResources/BaseThemes/CY24SU10.jsonexamples/K201-MonthSlicer.Report/definition.pbirexamples/K201-MonthSlicer.Report/definition/bookmarks/54698b9cd0a0c57906b7.bookmark.jsonexamples/K201-MonthSlicer.Report/definition/bookmarks/71abeb475381792b035d.bookmark.jsonexamples/K201-MonthSlicer.Report/definition/bookmarks/82ce9a7f49847d03190a.bookmark.jsonexamples/K201-MonthSlicer.Report/definition/bookmarks/8f5a4883bde0d3bd075d.bookmark.jsonexamples/K201-MonthSlicer.Report/definition/bookmarks/958f29ad733c047ee0b8.bookmark.jsonexamples/K201-MonthSlicer.Report/definition/bookmarks/bookmarks.jsonexamples/K201-MonthSlicer.Report/definition/bookmarks/e5b8aa0b8e0565be9ce0.bookmark.jsonexamples/K201-MonthSlicer.Report/definition/pages/AfterReport.Page/page.jsonexamples/K201-MonthSlicer.Report/definition/pages/AfterReport.Page/visuals/ButtonSlicer_TopCenter.Visual/visual.jsonexamples/K201-MonthSlicer.Report/definition/pages/AfterReport.Page/visuals/ButtonSlicer_TopCenter_2.Visual/visual.jsonexamples/K201-MonthSlicer.Report/definition/pages/AfterReport.Page/visuals/KPI_TopLeft.Visual/visual.jsonexamples/K201-MonthSlicer.Report/definition/pages/AfterReport.Page/visuals/LineChart_TopLeft.Visual/visual.jsonexamples/K201-MonthSlicer.Report/definition/pages/AfterReport.Page/visuals/ScatterChart_MiddleLeft.Visual/visual.jsonexamples/K201-MonthSlicer.Report/definition/pages/AfterReport.Page/visuals/Table_TopCenter.Visual/visual.jsonexamples/K201-MonthSlicer.Report/definition/pages/AfterReport.Page/visuals/Textbox_TopLeft.Visual/visual.jsonexamples/K201-MonthSlicer.Report/definition/pages/Before Report.Page/page.jsonexamples/K201-MonthSlicer.Report/definition/pages/Before Report.Page/visuals/KPI_TopLeft.Visual/visual.jsonSkill 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 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.
.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.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 themes
Follow within reason the mental model when reviewing or providing feedback on 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 logicpbir new. Do not scaffold
report JSON by handdefinition.pbir is configured properly (byPath or byConnection)pbir add filter; see filter pane referenceFor detailed report design guidance (layout, spacing, visual hierarchy, color, accessibility), see the pbi-report-design skill. Key rules enforced during validation:
"bad", "good")altText for accessibility. Name visuals descriptively (revenue_bar_chart not a1b2c3d4)| Task | Read |
|---|---|
| Add or modify a visual | references/visual-json.md -- expression syntax, field references, query roles, position, objects vs visualContainerObjects, selectors |
| Change formatting or colors | references/visual-container-formatting.md (container chrome) + references/theme.md (theme-level formatting). Prefer theme changes over bespoke visual formatting |
| Add conditional formatting | references/schema-patterns/conditional-formatting.md + references/measures.md (extension measures for CF) |
| Add or configure filters | references/filter-pane.md -- all 7 filter types, default values, filter discovery |
| Work with the theme | references/theme.md -- inheritance, wildcards, visual-type overrides, filter pane styling, inspecting and modifying with jq |
| Push visual formatting to theme | references/theme.md -- preview and promote reusable formatting with pbir theme push-visual |
| Change page layout/background | references/page.md -- dimensions, background, wallpaper, visualInteractions |
| Create a tooltip page | references/page.md -- tooltip page setup (type, size, visibility) + visualTooltip opt-in on visuals |
| Create a drillthrough page | references/page.md -- drillthrough filter in page filterConfig |
| Change report settings | references/report.md -- themeCollection, resourcePackages, settings, outspacePane |
| Add extension measures | references/measures.md -- reportExtensions.json structure, DAX patterns, referencing |
| Add annotations / metadata | references/annotations.md -- custom name-value metadata on reports, pages, and visuals for deployment scripts, documentation, and external tooling |
| Add images or SVGs | references/images.md -- RegisteredResources, base64 in themes, SVG measures |
| Add or modify textboxes | references/textbox.md -- paragraphs, textRuns, textStyle |
| Sort a visual | references/sort-visuals.md -- sortDefinition inside query |
| Sync slicers across pages | references/visual-json.md -- syncGroup (groupName, fieldChanges, filterChanges) |
| Edit visual interactions | references/visual-json.md + references/page.md -- visualInteractions in page.json (NoFilter, Filter, Highlight) |
| Change table/matrix column widths | references/visual-json.md -- columnWidth with metadata selector |
| Group visuals | references/visual-json.md -- visualGroup, parentGroupName, groupMode |
| Hide visuals or fields | references/visual-json.md -- isHidden at root level, query projection control |
| Format chart elements (labels, markers, lines) | references/visual-json.md -- labels, markers, lineStyles, dataPoint |
| Add analytics lines (reference, trend, error, forecast) | references/visual-json.md -- y1AxisReferenceLine, trend, error, forecast |
| Work with bookmarks | references/bookmarks.md -- bookmark state, filter snapshots, visual show/hide |
| Find model fields | references/semantic-model/finding-fields.md -- pbir model, te, fab commands |
| Rebind to different model | references/semantic-model/report-rebinding.md -- byPath vs byConnection conversion |
| Understand schema versions | references/schemas.md -- all schema types and current versions |
| Validate or check conformance | references/validation.md -- conformance dimensions, pbir validate categories, name and required-field rules, audit and discovery commands |
| Understand how visuals generate DAX queries | references/semantic-model/inferring-queries-from-visuals.md -- visual metadata → SUMMARIZECOLUMNS mapping, data roles, IGNORE() context |
| Build or verify DAX query patterns | references/semantic-model/model-queries.md -- SUMMARIZECOLUMNS patterns, ROW(), query execution methods |
| Rename a table or field across a report | references/how-to/fix-broken-field-references.md -- complete pbir fields replace / replace-table workflow |
| Fix broken field references after model changes | references/how-to/fix-broken-field-references.md -- diagnosis, repair workflow for renamed/moved/removed fields, slicer value pitfalls |
| Convert legacy report.json to PBIR format | references/how-to/convert-legacy-to-pbir.md -- format differences, step-by-step conversion, projections-to-queryState mapping, validation |
| Understand reportExtensions.json schema | references/report-extensions.md -- file schema structure, entities, visual calculations; see references/measures.md for DAX authoring patterns |
| Set dynamic (measure-driven) alt text | references/visual-container-formatting.md -- altText as a Measure expression under visualContainerObjects.general |
| Add a dynamic text run to a textbox | references/textbox.md -- measure-bound textRuns; round-trip from Desktop required |
| Understand drill-down cross-filter behavior | references/visual-json.md -- drillFilterOtherVisuals vs visualInteractions |
| Register a custom visual (AppSource, org-store, private .pbiviz) | references/report.md -- publicCustomVisuals, organizationCustomVisuals, resourcePackages |
| Understand schema version coupling | references/schemas.md -- parent/embedded schema sets, copying fragments between reports |
| Set up mobile (phone) layout | references/pbir-structure.md -- mobile.json per-visual, coordinate space, git hygiene |
| Git hygiene for a PBIR project | references/pbir-structure.md -- what to track, ignore, and leave to Desktop |
A report must be connected to a semantic model. There are two ways to do this:
{"byPath": {"path": "../Model.SemanticModel"}} (schema 2.0.0){"byConnection": {"connectionString": "Data Source=powerbi://..."}} (schema 2.0.0)pbip -- PBIP project operations: rename cascades, project forking, report JSON patternstmdl -- TMDL file format, authoring, and editingFetching Docs: To retrieve current Power BI developer/report format docs, use microsoft_docs_search + microsoft_docs_fetch (MCP) if available, otherwise mslearn search + mslearn fetch (CLI). Search based on the user's request and run multiple searches as needed to ensure sufficient context before proceeding.
Examples:
examples/K201-MonthSlicer.Report/ -- Real PBIR report with 7 visual types (slicer, advancedSlicerVisual, kpi, lineChart, scatterChart, tableEx, textbox), extension measures, bookmarks, conditional formattingexamples/visuals/ -- 54 standalone visual.json examples; see examples/visuals/__index.md for a catalog. Split into default/ (minimal, theme-only) and formatted/ (bespoke formatting, conditional formatting, gradients, filters)Core references:
references/visual-json.md -- visual.json: expressions, field refs, query roles, position, objects vs vCO, selectors, sorting, filters, drill-down propagationreferences/desktop-bridge.md -- Verifying PBIR edits on the canvas via pbir desktop reload + screenshot; preview setting; locating the open PBIPreferences/pbir-structure.md -- PBIR folder structure, mobile.json storage mechanics, git hygienereferences/schemas.md -- Schema versions, URLs, and embedded schema couplingreferences/validation.md -- Conformance dimensions and how to validate (schema, names and ids, required fields, fields, enums, roles, layout, theme, semantic); pbir validate categories; audit and discovery commandsreferences/enumerations.md -- Valid property enumerationsreferences/version-json.md -- version.json format (concise)references/platform.md -- .platform file format (concise)references/bookmarks.md -- Bookmark structure and state snapshotsFormatting & expressions:
references/theme.md -- Theme wildcards, inheritance, color system, filter pane styling,
visual-type overrides, and the corresponding pbir theme commandsreferences/schema-patterns/ -- Expressions, selectors, conditional formatting, visual calculationsreferences/visual-container-formatting.md -- objects vs visualContainerObjects deep-dive; dynamic (measure-driven) altTextreferences/measures-vs-literals.md -- When to use measure expressions vs literal valuesreferences/measures.md -- Extension measure patternsVisual & page configuration:
references/textbox.md -- Textbox visual format; dynamic (measure-bound) text runsreferences/page.md -- Page configuration and backgroundsreferences/report.md -- Report-level settings; custom visual registration (AppSource, org-store, private .pbiviz)references/wallpaper.md -- Report wallpaper/canvas backgroundreferences/filter-pane.md -- Filter pane formattingreferences/sort-visuals.md -- Visual sort configurationreferences/images.md -- Static images, base64 in themes, SVG measuresreferences/report-extensions.md -- reportExtensions.json formatreferences/annotations.md -- Custom metadata on reports, pages, and visualsSemantic model integration:
references/semantic-model/ -- Field references, model structure, report rebinding, query inferenceHow-to guides:
references/how-to/ -- Advanced conditional formatting, SVG in visuals, fix broken field references, convert legacy to PBIRnpx claudepluginhub data-goblin/power-bi-agentic-development --plugin pbipManages Power BI reports via the `pbir` CLI: create, explore, format, validate, and publish .pbir/.pbip/.pbix files. Also drives Power BI Desktop (canvas reload, screenshots) and queries semantic models.
Creates and modifies Power BI report files in PBIR/PBIP format using powerbi-report-author and powerbi-desktop CLIs. Use for implementing report specs, adding visuals, and validating PBIR.