From powerbi
Guide to develop Power BI Reports in PBIR format. Use this skill for any development operation against a Power BI Report PBIR file format including (1) Creating new reports on top of semantic models, (2) Editing visuals, pages, and bookmarks, (3) Aligning and laying out visuals, (4) Rebinding reports to different semantic models, (5) Deploying reports to Fabric workspaces, (6) Exporting reports from workspaces. Do NOT use for semantic model development or TMDL (use powerbi-semantic-model), or workspace/pipeline administration (use fabric-cli).
How this skill is triggered — by the user, by Claude, or both
Slash command
/powerbi:powerbi-report-authoringThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
This skill provides guidance on how to develop Power BI reports using the PBIR (Power BI Report) JSON file format.
assets/templateReport/report-layout.pngassets/templateReport/report.dummyModel/definition.pbismassets/templateReport/report.dummyModel/definition/database.tmdlassets/templateReport/report.dummyModel/definition/model.tmdlassets/templateReport/report/StaticResources/RegisteredResources/theme.jsonassets/templateReport/report/definition.pbirassets/templateReport/report/definition/pages/mainPage/page.jsonassets/templateReport/report/definition/pages/mainPage/visuals/barChart/visual.jsonassets/templateReport/report/definition/pages/mainPage/visuals/dateSlicer/visual.jsonassets/templateReport/report/definition/pages/mainPage/visuals/logo/visual.jsonassets/templateReport/report/definition/pages/mainPage/visuals/timeSeries/visual.jsonassets/templateReport/report/definition/pages/mainPage/visuals/title/visual.jsonassets/templateReport/report/definition/pages/mainPage/visuals/topCard/visual.jsonassets/templateReport/report/definition/pages/pages.jsonassets/templateReport/report/definition/report.jsonassets/templateReport/report/definition/version.jsonassets/templateReport/template-report-kb.mdassets/templateReport/templateReport.pbipscripts/bpa-rules-report.jsonscripts/bpa.ps1This skill provides guidance on how to develop Power BI reports using the PBIR (Power BI Report) JSON file format.
$schema; call out violations and propose fixes.Before making any changes to an existing report, always gather context first:
definition/ folder with report.json, pages/, and version.json.pages/pages.json to understand the page structure and order.visual.json to understand visual types, positions, and field mappings.definition.pbir to understand which semantic model the report is connected to (byPath or byConnection).StaticResources/RegisteredResources/ for custom themes and images.Example of a report folder using PBIR format:
Report/
├── StaticResources/ # stores report resources such as images, custom themes,...
│ ├── RegisteredResources/
│ │ ├── logo.jpg
│ │ ├── CustomTheme4437032645752863.json
├── definition/ # stores the entire report definition: pages, visuals, bookmarks
│ ├── bookmarks/
│ │ ├── Bookmark7c19b7211ada7de10c30.bookmark.json
│ │ ├── bookmarks.json
│ ├── pages/
│ │ ├── 61481e08c8c340011ce0/
│ │ │ ├── visuals/
│ │ │ │ ├── 3852e5607b224b8ebd1a/
│ │ │ │ │ ├── visual.json
│ │ │ │ │ ├── mobile.json
│ │ │ │ ├── 7df3763f63115a096029/
│ │ │ │ │ ├── visual.json
│ │ │ ├── page.json
│ │ ├── pages.json
│ ├── version.json
│ ├── report.json
├── semanticModelDiagramLayout.json # Copy of the semantic model diagram layout the report is connected to.
└── definition.pbir # Overall definition of the report and core settings. Also holds the reference to the semantic model of the report, it's possible to rebind the report to a different semantic model by updating this file.
All report objects have a name property. For example see the visual.json:
{
"$schema": "https://developer.microsoft.com/json-schemas/fabric/item/report/definition/visualContainer/2.1.0/schema.json",
"name": "5868707ac858bcbe007a",
"position": {
"x": 32.118081180811807,
"y": 216.32472324723247,
"z": 4000,
"height": 492.16236162361622,
"width": 366.52398523985238,
"tabOrder": 2000
},
"visual": {
"visualType": "barChart",
"drillFilterOtherVisuals": true
}
}
By default PBIR folder uses the internal name property of pages, visuals and bookmarks in the files or folders. For example consider the following path of a visual:
Sales.Report\definition\pages\89a9619c7025093ade1c\visuals\5acb1caf298449a8acb4\visual.json
89a9619c7025093ade1c is the name of the page and 5acb1caf298449a8acb4 the name of the visual.
assets/templateReport/report/definition and assets/templateReport/report/StaticResources to the *.Report folder.definition.pbir to point to the target semantic model (use byPath for local, byConnection for workspace).Use this workflow when the user wants to add/modify/remove visuals, pages, or bookmarks in an existing report.
visuals/ directory with a visual.json file. Use the correct $schema and set appropriate position, visual.visualType, and field mappings.visual.json — update field mappings, position, or visual type.pages/, add a page.json, and update pages/pages.json with the new page entry.pages.json, bookmarks.json).definition/ folder with the report pages.position property of each visual (x, y, height, width, z, tabOrder) and take into consideration the page dimensions (default 1280x720) in page.json to understand the current layout and identify misalignments or overlaps.y (for rows) and x (for columns) values.visual.json with the corrected position properties.name property is used by default in folder and file names. You can rename folders for: pages, visuals, and bookmarks.mainPage, salesBarChart, dateFilter).name property in JSON files remains unchanged — only the folder name changes).fabric-cli skill to export the report code definition from the workspace.[Name].Report/definition/ local folder.report.json, version.json, and pages/ with at least one page.Update definition.pbir — CRITICAL: When deploying a report to a workspace, the definition.pbir must use a byConnection configuration targeting a workspace semantic model:
{
"$schema": "https://developer.microsoft.com/json-schemas/fabric/item/report/definitionProperties/2.0.0/schema.json",
"version": "4.0",
"datasetReference": {
"byConnection": {
"connectionString": "semanticmodelid=[SemanticModelId]"
}
}
}
Deploy using Fabric CLI — Use the fabric-cli skill to deploy. You can deploy with a new name if needed.
Verify deployment — Confirm the report appears in the target workspace and opens correctly.
Edit definition.pbir — Configure a byPath property using a relative reference to the semantic model folder:
{
"$schema": "https://developer.microsoft.com/json-schemas/fabric/item/report/definitionProperties/2.0.0/schema.json",
"version": "4.0",
"datasetReference": {
"byPath": {
"path": "../Sales.SemanticModel"
}
}
}
Verify field references — After rebinding, check that visual field mappings (Entity and Property references in visual.json files) are still valid against the new semantic model.
Find the semantic model ID — Use Fabric CLI or workspace API to locate the target semantic model ID.
Edit definition.pbir — Configure a byConnection property targeting the semantic model ID:
{
"$schema": "https://developer.microsoft.com/json-schemas/fabric/item/report/definitionProperties/2.0.0/schema.json",
"version": "4.0",
"datasetReference": {
"byConnection": {
"connectionString": "semanticmodelid=[SemanticModelId]"
}
}
}
Verify field references — Ensure visual field mappings are compatible with the new semantic model.
After any report modification, always verify your work:
$schema URL.Entity (table name) and Property (column/measure name) references in visual.json files match the connected semantic model.pages/pages.json lists all page folders and the order is correct.definition.pbir — Confirm the semantic model reference (byPath or byConnection) is correctly configured.Run the script scripts/bpa.ps1 against the report definition. If no specific BPA rules are mentioned, use the default set of rules in scripts/bpa-rules-report.json.
Run BPA — Execute the Best Practice Analysis script:
scripts/bpa.ps1 -reports [path to the report definition folder] -rulesFilePath [path to the BPA rules json file]
Report findings — Categorize results by severity levels (Critical, High, Medium, Info) and propose fixes.
$schema URL, validate the file structure against it, and fix any missing or extra properties.Entity and Property values to match valid semantic model objects.definition.pbir uses byConnection (not byPath) when deploying to a workspace. Check that the semantic model ID is correct.pages/ folder is missing subfolders.External references (request markdown when possible):
npx claudepluginhub daniel-yapp/powerbi-agentic-plugins --plugin powerbiCreates structured, bite-sized implementation plans from specs or requirements before writing code. Useful for breaking down multi-step tasks into testable steps with file structure and task boundaries.