Skip to main content

pbir-cli

This skill should be used whenever the user mentions "pbir", "pbir-cli", "Power BI reports", or "PBI reports", works with .pbir, .pbip, or .pbix files, or wants to refresh, screenshot, or visually verify a report that is open in Power BI Desktop. Covers creating, exploring, formatting, validating, and publishing Power BI reports through the pbir CLI and object model, plus driving Power BI Desktop (canvas reload, page screenshots) and querying connected or local semantic models.

Informations de source

Dépôt
data-goblin/power-bi-agentic-development
Dernière activité de la source
15 octobre 2026 à 09:55
Langue détectée de SKILL.md
anglais
Étoiles
1 080
Forks
155

Options d'installation

Le prompt qui vérifie d'abord la source est sélectionné par défaut. Vous pouvez passer à une commande directe ou télécharger une copie locale.

Vérifiez les fichiers source

Lisez SKILL.md et les fichiers associés affichés par SkillsMP avant de décider de l'installer.

Explorateur de fichiers
100 fichiers

Affichage de SKILL.md

SKILL.md
Instructions source · Aperçu en lecture seule
name
pbir-cli
description
This skill should be used whenever the user mentions "pbir", "pbir-cli", "Power BI reports", or "PBI reports", works with .pbir, .pbip, or .pbix files, or wants to refresh, screenshot, or visually verify a report that is open in Power BI Desktop. Covers creating, exploring, formatting, validating, and publishing Power BI reports through the pbir CLI and object model, plus driving Power BI Desktop (canvas reload, page screenshots) and querying connected or local semantic models.
# Working with Power BI reports using `pbir` CLI for exploring, building, managing, formatting Power BI reports. All commands use `pbir`. **IMPORTANT:** ALWAYS use `pbir` CLI commands to inspect and modify reports. NEVER write, replace, copy, or patch report JSON files directly. If the CLI does not expose a required mutation, stop and report the missing capability; do not fall back to file editing. Reading JSON through `pbir cat`, `pbir get`, or read-only examples is allowed. **IMPORTANT:** FIRST Read and adhere to the mental model in [MENTAL-MODEL.md](important/MENTAL-MODEL.md). ## When `pbir` is missing Install it with `uv tool install pbir-cli` (or `pip install pbir-cli`). That is the route to use in every ordinary case, including when the command is missing entirely. `bin/fetch.sh` downloads a self-contained portable build instead. Reach for it **only** when `pbir` is not installed *and* installing it is not possible: no network access to PyPI, no Python, or a locked-down machine that forbids installs. A portable build does not update with `uv tool upgrade`, so preferring it when a normal install would have worked leaves the user on a stale CLI. If an install failed, fix the install rather than routing around it. ## Keeping the Fabric CLI current When publishing to Fabric (`pbir publish`) alongside the `fabric-cli` plugin, check the installed Fabric CLI (`fab`) if publishing reports a compatibility problem. Upgrade with `uv tool upgrade ms-fabric-cli` only when required or requested, and honor any user-pinned version. ## Learning from Mistakes Log learnings about the `pbir` CLI in the project's memory file: gotchas, unexpected behavior, user expectations, and design preferences. Use the agent-appropriate path: - **Claude Code:** `.claude/rules/pbir-cli.md` - **Cursor:** `.cursor/rules/pbir-cli.mdc` - **GitHub Copilot:** `.github/instructions/pbir-cli.instructions.md` Keep entries concise and generalizable. The memory file is not a change log. Prune redundancy, link out to references and examples rather than restating them. ## How to use `pbir` ### General workflow 1. Explore the report. The report must be in PBIR format: pbip, pbir-only, or pbix-with-PBIR-metadata. Prefer pbir or pbip. Whenever the user mentions Power BI Desktop or says the report is open in Desktop, run `pbir desktop list` FIRST: it maps each running instance to the file it has open (locating the report on disk) and confirms the bridge works before any edits begin. `pbir desktop` is Windows-only; on macOS and Linux do not use it (every invocation fails). Instead deploy with `pbir publish` to a sandbox workspace in Fabric and verify the rendered report in the browser via the Chrome MCP tools. 2. Identify the model. Reports generally should be thin reports connected to a remote model in Power BI or Fabric. 3. Clarify intent. For vague or open-ended instructions, consult **`references/vague-prompts.md`** and use `AskUserQuestion` to understand expectations and report context before mutating anything. 4. Plan changes. For new reports, pages, or visuals, draft a wireframe or mock-up for the user to approve before building. 5. Make changes. Reach for relevant files in `references/`, `examples/`, and related skills like `pbi-report-design`. 6. Validate. Mutating commands validate their own writes. Run explicit `pbir validate` after a coherent batch of changes and before completion; use narrower checks while iterating and `--all` for the final confidence pass. For visual confirmation, prefer the local loop when the report is open in Power BI Desktop: `pbir desktop refresh` then `pbir desktop screenshot` and inspect the PNG (see "Desktop Integration" below). Otherwise ask permission to publish to a sandbox workspace with `pbir publish` and inspect rendering via Chrome MCP, devtools CLI, or Playwright. 7. Iterate. Expect multiple rounds. Push back on one-shot expectations from vague prompts. 8. Record learnings. Add concise, generalizable entries to the memory file noted above. When the user has manually changed a report and asks to pull it down or learn from the differences, follow **`references/manual-roundtrip-review.md`**. ### Path syntax `pbir` uses a filesystem paradigm for identifying reports, pages, visuals etc. and glob syntax for bulk operations. Format: `ReportName.Report/PageName.Page/VisualName.Visual` - Type suffixes (`.Report`, `.Page`, `.Visual`) are required - Quote paths with spaces: `"My Report.Report/Dashboard.Page"` - Use glob patterns for bulk operations: `"Report.Report/**/*.Visual"` (requires `--force/-f` for `set` and `rm`) - `*.Visual`; all visuals on current page - `Page.Page/*.Visual`; all visuals on a specific page - `**/*.Visual`; all visuals across all pages - `**/card*.Visual`; visuals whose name starts with "card" - `**/*.Report/**/*.Visual`; all visuals across all reports - Properties via `get` or `set` and dot notation: `"Report.Report/Page.Page/Visual.Visual.title.fontSize"` - Filters/bookmarks: `"Report.Report/filter:Name"`, `"Report.Report/bookmark:Name"` - If multiple reports match, disambiguate with parent folder prefix - Absolute filesystem paths work too: `"C:\Reports\Sales.Report"`, `"C:\Reports\Flash.pbix"` (globs do not combine with absolute paths) - Workspace destinations use `.Workspace` suffix: `"My Workspace.Workspace/Report.Report"` ## Critical Rules Follow all rules below. 0. **ASK user for clarifications and push back on one-shot prompt requests.** Pursue an iterative multi-step way-of-working 1. **CHECK references before starting work.** Identify relevant [references](references/) and [examples](examples/) that can help you understand the user requirements 2. **NEVER edit report JSON files directly.** Always use `pbir` CLI commands. Use `pbir cat` or `pbir get` to inspect JSON or properties; use `pbir set` for any property not covered by a dedicated command. 3. **Discover before setting.** Run `pbir schema describe <type>` to list a visual type's objects, then `pbir schema describe <type> <object>` for property names, types, ranges, and enums before formatting. Do not guess property names 4. **Theme-first formatting.** Check `pbir visuals format` before applying bespoke formatting; the theme may already set the property. Prefer `pbir theme set-formatting` for changes that apply to all visuals of a type. Reserve `pbir visuals title/background/border` for one-off overrides 5. **Validate proportionally.** Mutating commands already validate their writes. Run `pbir validate "Report.Report"` after each coherent batch and before completion. Use `--qa` for overlap/overflow checks, `--fields` for model field verification, and `--all` for the final confidence pass 6. **Verify rendering through the Desktop bridge.** When the report is open in Power BI Desktop, run `pbir desktop refresh` after every change unless the user asks not to, then `pbir desktop screenshot` and inspect the PNG after every meaningful change. Validation cannot catch rendering problems (overlap, truncation, wrong field, illegible formatting); the screenshot is the only proof a change rendered as intended. When a request involves many changes, ask the user up front whether to refresh after each step (so they watch progress in the canvas) or once at the end. Check availability once with `pbir desktop list` before starting the loop; if the bridge is unavailable, do not retry it after every change (see "When the bridge is unavailable" below) 7. **Reference objects the same way in every DAX expression.** In `pbir model -q` queries, report-level measures and visual calculations, write columns as `'Table'[Column]` (table name always present and quoted) and measures as `[Measure]` with no table in front. The `Table.Field` form in `-d "Role:Table.Field"` and `--field` is `pbir` binding syntax, not DAX; use it only in those flags ## Core Workflows ### Exploration and Analysis Understand existing reports before modifying. **Always check page dimensions and existing visual positions before adding or resizing visuals** setting position/size without knowing the page dimensions causes errors. ```bash pbir desktop list # FIRST if Desktop is mentioned: instances (PID, open file) pbir ls # Find all reports pbir ls "Report.Report" # List pages/filters/theme pbir tree "Report.Report" -v # Full structure with fields pbir validate "Report.Report" # Health check pbir get "Report.Report" # Report properties pbir pages json "Report.Report/Page.Page" # Check page width/height ``` For deeper exploration, consult **`references/exploration.md`**. ### Model Discovery (Required Before Binding Fields) Always query the connected model to discover correct table/column/measure names. Never guess field names. ```bash pbir model "Report.Report" # Connection info (workspace, model, thick/thin) pbir model "Report.Report" -d # All tables, columns, measures pbir model "Report.Report" -d -t Sales # Filter to specific table pbir model "Report.Report" -q "EVALUATE VALUES('Geography'[Region])" # Check field values pbir model "Report.Report" -q "EVALUATE ROW(\"Revenue\", [Total Revenue])" # Test a measure pbir fields list "Report.Report" # Fields already in use across report ``` Routing depends on the report's model reference: thin reports (`byConnection`) query the Power BI / Fabric service; thick reports (`byPath`) query the local Analysis Services engine of the Power BI Desktop instance that has the report open, so `-q` and `-d` work fully offline against live model state. Local queries need the .NET Framework ADOMD client (found automatically from DAX Studio or Desktop installs; override with `PBIR_ADOMD_DIR`). For full model query patterns and field binding workflows, consult **`references/fields-and-bindings.md`**. ### Semantic Model + Report Workflows (`te` + `pbir`) Use `te` for semantic-model mutations and `pbir` for report mutations. A model rename can cascade inside the model while report bindings retain the old `Table.Field`; use `te deps --downstream`, then `pbir fields find/replace` and validate both layers. Consult **`references/te-cli-tandem.md`** for deploy order and complete workflows. ### Desktop Integration (Refresh and Screenshot) When a PBIP/PBIR report is open in Power BI Desktop on Windows, use the bridge for the shortest visual feedback loop: ```bash pbir desktop list pbir desktop refresh "Report.Report" pbir desktop screenshot "Report.Report/Page.Page" -o verify.png ``` Inspect the PNG after every meaningful batch. PBIX supports screenshots but not refresh; macOS/Linux do not support the bridge. When unavailable, validate, publish to an authorized sandbox, and inspect the service render. See **`references/desktop-integration.md`** for setup, multi-instance behavior, and troubleshooting. ### Creating Reports New reports include out of the box: - The **sqlbi** theme (professional colors, typography). Do not run `pbir theme apply-template` unless the user requests a different theme - A default **Page 1** with a **textbox** visual for the page title at position (20,20) height 90. Do not add a new textbox; rename the existing page instead. Place subsequent visuals at `y:120` or below to avoid overlapping the title textbox. Use `--no-title` on `pbir new report` to skip the default title textbox when the user wants a clean canvas Connection: pass `--connection "Workspace/Model.SemanticModel"`, or set an active connection first with `pbir connect` (optionally `pbir profile` / `pbir connect --profile <name>` to switch between saved connections). When an active connection is set, the connection flag can be omitted. ```bash pbir new report "Sales.Report" -c "Workspace/Model.SemanticModel" pbir pages rename "Sales.Report/Page 1.Page" --to "Overview" -f # Rename default page (new name via --to) pbir add visual card "Sales.Report/Overview.Page" --title "Revenue" -d "Values:Sales.Revenue" --y 120 pbir add filter Date Year -r "Sales.Report" pbir validate "Sales.Report" ``` Data-role names in `-d "Role:Table.Field"` (e.g. `Values`, `Category`, `Y`, `Series`, `Indicator`) come from the visual type's capability schema. Run `pbir add visual --list` or `pbir visuals bind --list-roles` to discover the roles for unfamiliar visual types. The CLI matches role names case-insensitively, so `Values:` and `values:` both work. For step-by-step creation guidance, use the **`create-pbi-report`** skill. ### Adding and Formatting Visuals **Formatting hierarchy**: base theme -> custom theme -> visual-type defaults -> individual visual overrides. Always check and prefer theme-level formatting before applying bespoke visual formatting. Use `pbir visuals format` to see the full cascade with source labels (default/wildcard/visualType/visual). ```bash # Add a visual with data binding (role names match the visual capability list) pbir add visual card "Report.Report/Page.Page" --title "Total Sales" -d "Values:Sales.Revenue" # ALWAYS check theme cascade first; see what formatting already applies pbir visuals format "Report.Report/Page.Page/Visual.Visual" # Set formatting in the THEME (preferred; applies to all visuals of this type) pbir theme set-formatting "Report.Report" "card.*.border.radius" --value 8 # Only format bespoke if genuinely one-off pbir visuals title "Report.Report/Page.Page/Visual.Visual" --text "Revenue" --fontSize 14 --show # Bind more fields pbir visuals bind "Report.Report/Page.Page/Visual.Visual" -a "Category:Products.ProductName" # Validate after changes pbir validate "Report.Report" # If the report is open in Desktop, confirm the rendering pbir desktop refresh "Report.Report" pbir desktop screenshot "Report.Report/Page.Page" -o verify.png # then Read verify.png ``` For bulk visual creation, see **`references/add-new-visual.md`**. For formatting workflows, consult **`references/format-visuals.md`** (theme-first approach, property discovery, glob patterns). ### Fast Rendered-Dashboard Loop For renderer-sensitive iteration, publish cadence, New Card selectors, SVG table density, and latest-only line labels, follow **`references/rendered-dashboard-loop.md`**. ### Visual Groups Visual groups bind multiple visuals so they move and scale together. Use them when a set of visuals should behave as a single unit (a header strip, a KPI row, a chart-plus-annotation pair). ```bash pbir visuals group "Report.Report/Page.Page" --list # List groups on page pbir visuals group "Report.Report/Page.Page" --create "KPI Group" # Create empty group pbir visuals group "Report.Report/Page.Page/Group.Visual" --add "Card.Visual" --add "KPI.Visual" pbir visuals group "Report.Report/Page.Page/Group.Visual" --remove "Card.Visual" pbir visuals group "Report.Report/Page.Page/Visual.Visual" --ungroup # Remove this visual from its group pbir visuals group "Report.Report/Page.Page/Group.Visual" --ungroup # Ungroup all members and delete the group ``` Default mode is `ScaleMode`; override with `--mode` if a different behavior is needed. ### Style Presets Style presets apply a curated bundle of formatting in one step. Use a preset when the user wants a consistent look across many visuals without specifying every property. ```bash pbir visuals preset --list # Available presets pbir visuals preset "Report.Report/Page.Page/Visual.Visual" --name minimal pbir visuals preset "Report.Report/**/*.Visual" --name presentation ``` Presets are themed; pair them with `pbir theme apply-template` for full visual consistency. ### Property Discovery (Required Before Formatting) Every visual type has dozens of objects with hundreds of properties. Use the schema discovery workflow to find the right object and property name before setting values. Do not guess property names. ```bash # Step 1: What objects exist for this visual type? (objects + property counts) pbir schema describe "lineChart" # Step 2: What properties does an object have? (includes types, ranges, enums, descriptions) pbir schema describe "lineChart" "lineStyles" # Step 3: What's currently set on a live visual? (shows source: default/wildcard/visualType/visual) pbir visuals format "Report.Report/Page.Page/Visual.Visual" pbir visuals format "Report.Report/Page.Page/Visual.Visual" -v # Include unset (None) properties pbir visuals format "Report.Report/Page.Page/Visual.Visual" -p lineStyles # Filter to object # Step 4: Fuzzy search for a property by name pbir visuals properties -s "marker" ``` For built-in visuals, the authoritative list of valid type ids and per-type `objects` names comes from Microsoft's core visual catalog (bundled and pinned by the CLI). Use it to confirm a type or object name exists before authoring: ```bash pbir schema types # Built-in visual + entity type ids (--vco for universal container objects, --selectors for selector objects) pbir schema describe "barChart" # Valid objects + their properties for one type pbir schema roles "barChart" # Data roles the type accepts (required? multiple? Column/Measure) pbir schema describe "tableEx" --json # Full JSON for agent consumption ``` `pbir schema describe` draws from this core catalog (the authority `pbir set` enforces) and enriches it with the theme schema for value ranges and enums. Custom visuals are out of scope for the catalog. Schema descriptions include practical usage notes (e.g., error bars as target lines, title.text supporting measure-driven dynamic values). Use `--json` output for full descriptions. For a complete offline reference of every property for every visual type, consult **`references/property-catalogue.md`**. It is a snapshot; `pbir schema types` and `pbir schema describe` are authoritative. ### Bulk Modification (Glob Patterns) ```bash # Set property on ALL visuals in report (glob requires -f) pbir set "Report.Report/**/*.Visual.title.show" --value false -f # Find all card visuals pbir find "Report.Report/**/card*.Visual" # Format all visuals on a page pbir visuals title "Report.Report/Page.Page" --show --fontSize 12 ``` ### Conditional Bulk Ops (--where) `--where` filters which visuals a glob operation targets. Available on `set` and all `visuals` property commands. ```bash pbir set "Report.Report/**/*.Visual.title.fontSize" --value 16 --where "visual_type=card" -f pbir visuals legend "Report.Report/**/*.Visual" --show --where "width__gt=400" pbir visuals resize "Report.Report/**/*.Visual" --width 350 --height 250 --where "visual_type=card" ```
Voir sur GitHub
Ce SKILL.md est tres volumineux, SkillsMP affiche donc ici seulement la premiere section. Voir sur GitHub