skills/power-bi-report/SKILL.md
Scaffold, validate, preview, and manage Power BI PBIR report projects using pbi-cli. Invoke this skill whenever the user mentions "create report", "new report", "PBIR", "scaffold", "validate report", "report structure", "preview report", "report info", "reload Desktop", "convert report", ".pbip project", "report project", or wants to understand the PBIR folder format, set up a new report from scratch, or work with the report as a whole. For specific tasks, see also: power-bi-visuals (charts, binding), power-bi-pages (page management), power-bi-themes (themes, formatting), power-bi-filters (page/visual filters).
npx skillsauth add julianobarbosa/claude-code-skills power-bi-reportInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Manage Power BI PBIR report projects at the top level -- scaffolding, validation, preview, and Desktop integration. No connection to Power BI Desktop is needed for most operations.
PBIR (Enhanced Report Format) stores reports as a folder of JSON files:
MyReport.Report/
definition.pbir # dataset reference
definition/
version.json # PBIR version
report.json # report settings, theme
pages/
pages.json # page order
page_abc123/
page.json # page settings
visuals/
visual_def456/
visual.json # visual type, position, bindings
Each file has a public JSON schema from Microsoft for validation. PBIR is GA as of January 2026 and the default format in Desktop since March 2026.
# Scaffold a new report project
pbi report create ./MyProject --name "Sales Report"
# With dataset reference
pbi report create ./MyProject --name "Sales" --dataset-path "../Sales.Dataset"
This creates the full folder structure with definition.pbir, report.json,
version.json, and an empty pages/ directory.
# Show report metadata summary (pages, theme, dataset)
pbi report info
pbi report info --path ./MyReport.Report
# Validate report structure and JSON files
pbi report validate
Validation checks:
definition.pbir, report.json, version.json)pages.json match actual page foldersStart a live HTML preview of the report layout:
pbi report preview
Opens a browser showing all pages with visual placeholders, types, positions, and data bindings. The preview auto-refreshes when files change.
Requires the preview optional dependency: pip install pbi-cli-tool[preview]
# Trigger Power BI Desktop to reload the current report
pbi report reload
Power BI Desktop's Developer Mode auto-detects TMDL changes but not PBIR
changes. This command sends a keyboard shortcut to the Desktop window to
trigger a reload. Requires the reload optional dependency: pip install pbi-cli-tool[reload]
By default, every write command (add-page, delete-page, set-background,
set-theme, etc.) automatically syncs Power BI Desktop after each operation.
When building a report in multiple steps, this causes Desktop to reload after
every single command.
Use --no-sync on the report command group to suppress per-command syncs,
then call pbi report reload once at the end:
# BAD: Desktop reloads after every command
pbi report add-page --display-name "Overview" --name overview
pbi report set-background overview --color "#F2F2F2"
# GOOD: suppress sync during build, reload once at the end
pbi report --no-sync add-page --display-name "Overview" --name overview
pbi report --no-sync set-background overview --color "#F2F2F2"
pbi report reload
--no-sync is available on: report, visual, filters, and bookmarks
command groups.
# Convert a .Report folder into a distributable .pbip project
pbi report convert ./MyReport.Report --output ./distributable/
All report commands auto-detect the .Report folder:
pbi report --path ./MyReport.Report info*.Report/definition/.pbip: finds sibling .Report folder from .pbip fileThis workflow uses commands from multiple skills:
# 1. Scaffold report (this skill)
pbi report create . --name "SalesDashboard" --dataset-path "../SalesModel.Dataset"
# 2. Add pages (power-bi-pages skill)
pbi report add-page --display-name "Overview" --name overview
pbi report add-page --display-name "Details" --name details
# 3. Add visuals (power-bi-visuals skill)
pbi visual add --page overview --type card --name revenue_card
pbi visual add --page overview --type bar --name sales_by_region
# 4. Bind data (power-bi-visuals skill)
pbi visual bind revenue_card --page overview --field "Sales[Total Revenue]"
pbi visual bind sales_by_region --page overview \
--category "Geo[Region]" --value "Sales[Amount]"
# 5. Apply theme (power-bi-themes skill)
pbi report set-theme --file brand-colors.json
# 6. Validate (this skill)
pbi report validate
pbi-cli covers both the semantic model layer and the report layer:
# Model layer (requires pbi connect)
pbi connect
pbi measure create Sales "Total Revenue" "SUM(Sales[Amount])"
# Report layer (no connection needed)
pbi report create . --name "Sales"
pbi visual add --page overview --type card --name rev_card
pbi visual bind rev_card --page overview --field "Sales[Total Revenue]"
| Skill | When to use | |-------|-------------| | power-bi-visuals | Add, bind, update, delete visuals | | power-bi-pages | Add, remove, configure pages and bookmarks | | power-bi-themes | Themes, conditional formatting | | power-bi-filters | Page and visual filters |
pbi --json report info
pbi --json report validate
report validate passes a PBIR that Desktop refuses to open: Validation only checks JSON structure and required files — it does not verify dataset binding, schema-URL versions, or visual queryState consistency. A clean validate followed by a Desktop "cannot open report" is a known footgun.--dataset-path is relative to the .Report folder, not the CWD: A ../Sales.Dataset argument resolves correctly at create time, but if you later move the .Report folder the binding silently breaks. Use a stable workspace layout or absolute paths in CI.pbi report reload sends keyboard shortcuts to whatever window has focus: If the user is typing in another app when the reload fires, keystrokes land in that app instead. Run reload only at the end of a batch and tell the user not to context-switch.report convert to .pbip does not bundle the semantic model: It produces a .pbip shell referencing the dataset by path. Distributing the resulting folder without also packaging the .SemanticModel directory yields a "dataset not found" error on open.--no-sync only applies to the command group it's on: pbi visual --no-sync add ... followed by pbi report set-background ... will still sync after the second command. Set --no-sync on every group involved in the batch.development
End-to-end branch delivery: commit (no AI attribution) → push → open a pull request → ensure a Board work item exists (create one per task, assigned to the configured user, if none) and link it → after merge, clean up branch and worktree. Auto-detects the platform from the remote — Azure Repos + Boards (azure-devops-node-api SDK; OAuth Bearer push fallback via `az`) or GitHub (Octokit; `gh` for auth). Scripts are TypeScript, run via `bun`. Use whenever asked to "ship", "ship it", "ship this branch", "open a PR", "push and open a PR", "raise a PR", "deliver this", "send this for review", or "create a PR and link the work item" — and when a direct push to main is blocked and the change needs to go through a PR instead.
testing
Brief description of what this skill does. Include specific triggers - when should Claude use this skill? Example triggers, file types, or keywords that indicate this skill applies.
tools
Manage and troubleshoot PATH configuration in zsh. Use when adding tools to PATH (bun, nvm, Python venv, cargo, go), diagnosing "command not found" errors, validating PATH entries, or organizing shell configuration in .zshrc and .zshrc.local files.
tools
Zabbix monitoring system automation via API and Python. Use when: (1) Managing hosts, templates, items, triggers, or host groups, (2) Automating monitoring configuration, (3) Sending data via Zabbix trapper/sender, (4) Querying historical data or events, (5) Bulk operations on Zabbix objects, (6) Maintenance window management, (7) User/permission management