plugins/powerbi-authoring/skills/powerbi-report-planning/SKILL.md
Build a guided requirements-to-implementation workflow for new Power BI reports and dashboards from semantic models, datasets, or PBIP projects. Use when the user wants to: (1) plan then implement a report, (2) define audience, scope, page plan, design direction, dependencies, and delivery target, (3) create a locked report spec with approval before PBIR authoring. For direct edits to existing report files, use `powerbi-report-authoring`. For design-only critique or redesign, use `powerbi-report-design`. Triggers: "build me a dashboard", "create a new report", "plan then implement", "define and build Power BI report", "walk me through creating a report".
npx skillsauth add microsoft/skills-for-fabric powerbi-report-planningInstall 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.
Update Check — ONCE PER SESSION (mandatory) The first time this skill is used in a session, run the check-updates skill before proceeding.
- GitHub Copilot CLI / VS Code: invoke the
check-updatesskill.- Claude Code / Cowork / Cursor / Windsurf / Codex: compare local vs remote package.json version.
- Skip if the check was already performed earlier in this session.
This skill orchestrates the full lifecycle for a new Power BI report:
Define -> Inspect -> Spec -> Approve -> Build -> Validate -> Publish
It is intentionally broader than a pure requirements-gathering flow: it captures the report spec and continues into implementation after the user approves.
_brief/report-spec.md and get approval before implementation.powerbi-report-design and file mechanics through powerbi-report-authoring.Use this skill when the user wants to create a new Power BI report and needs both:
Examples:
Do not use this skill for a small edit to an existing report page. For
direct PBIR authoring tasks, use powerbi-report-authoring. For visual critique or
greenfield design guidance without the full guided workflow (a one-off
"redesign this" or "what should this look like?"), use
powerbi-report-design directly. This skill uses the design skill during
Rounds 3–4 — it does not replace it.
ask_user for each clarification._brief/report-spec.md before building.Before implementation, capture this status:
| Dependency | Purpose | Required When |
|---|---|---|
| Power BI Desktop | Open/reload PBIP and visually validate report | Always for local preview |
| PBIP/PBIR project | File-based report authoring | Always for generated reports |
| TMDL semantic model | Model persistence and source control | Required for model edits |
| powerbi-modeling-mcp | Inspect tables, columns, measures; create measures/columns; deploy semantic model | Required for live model authoring |
| powerbi-report-authoring skill | Validate PBIR, reload Desktop, screenshot pages | Required for report authoring validation |
| powerbi-report-management skill | Create/update/download Fabric reports | Required only for Fabric publishing |
| Node.js | Generator-based PBIR authoring | Recommended for reproducible reports |
If a dependency is unavailable, continue planning and mark the affected phase as blocked/manual. Do not pretend it is available.
Goal: identify the semantic model, report target, and available tooling.
Ask only what cannot be inspected automatically:
What semantic model or dataset should this report use?
Recommended choices should be concrete if candidates are discoverable. Enumerate
existing Fabric semantic models and local .SemanticModel folders in scope,
then present them as options and mark the best match as recommended. Example:
<DiscoveredSemanticModelName> (Recommended)Then inspect/check:
.pbip, .Report, .SemanticModel folders.Output working notes:
Dependency status:
- Semantic model:
- PBIP/PBIR:
- Desktop preview:
- Modeling MCP:
- Report-authoring skill:
- Fabric publishing:
- Node generator:
Goal: understand who the report is for and what decision/job it supports.
If both audience and job-to-be-done are already clear from the prompt, summarize the inferred answer instead of asking. Otherwise ask for the missing piece(s), one at a time.
Ask when audience is unclear:
Who is this report primarily for?
Recommended choices:
Then ask only if the job-to-be-done is still unclear:
What should the report help them do?
Recommended choices:
Capture:
Audience:
Primary purpose:
Tone:
Success criteria:
Goal: inspect the model and define the first-build scope boundary without re-asking for scope the user already gave.
Use whatever model-inspection capability is available — pick the first that applies, in order of preference:
powerbi-modeling-mcp-*) — connect to the
live model, list tables/columns/measures/relationships, and run DAX for
live validation.definition/model.tmdl,
definition/tables/*.tmdl, definition/relationships.tmdl) when no live
connection is available.Do not hardcode tool names in user-facing prompts — describe the inspection intent and let the agent pick the available tool.
Summarize:
Facts:
- table, grain, keys, useful measures
Dimensions:
- date/time, geography, entity, category, owner, status, segment
Existing measures:
- core available measures
Likely missing model work:
- measures
- calculated columns
- relationship fixes
- sort columns
- helper fields for slicers/search
Risks:
- nulls/sparsity
- inactive relationships
- high-cardinality slicers
- fields that will not filter as expected
After inspection, infer the first-build scope from the original request and prior answers. Do not ask a standalone scope question if the user already gave a page count, report type, or content boundary (for example, "build a 4 page dashboard"). Instead, summarize the boundary in working notes:
First-build scope:
- <focused first build / standard report / operational app / narrative report>
- inferred from: <user prompt | prior answer | model shape>
- included now:
- deferred:
Ask a scope question only when the boundary is unclear, too broad, or risky. If asking, present tailored choices from the inspected model rather than generic first-build options. Example:
The model supports sales, products, geography, discounts, and profitability. For this first build, should we keep it focused on executive performance, or include a deeper product/customer exploration too?
Goal: turn the model and scope into page architecture.
Invoke or explicitly consult powerbi-report-design for page-level archetype
routing and composition guidance. The design skill owns visual routing; do not
duplicate its routing table here. Use the data shape from Round 2 to surface
2-3 report shape options for user sign-off.
The five archetypes the design skill ships are: Executive Summary, Operational Monitor, Analytical Canvas, Narrative Story, Comparative Benchmark. Use the design skill's archetype and composition guidance for layout variants, multi-archetype reports, and cross-page variant rotation.
Ask only after applying the inferred first-build scope from Round 2:
Which report shape should we use?
Present 2–3 named compositions (e.g., Executive landing + Analytical
exploration + Comparative ranking for a multi-domain ask, or Single
executive landing for a focused ask). Recommend one based on Rounds 1–2
and mark it (Recommended).
Draft page list in the answer after the user chooses:
Proposed pages:
1. <Page> — archetype — purpose — core visuals — fields/measures
2. <Page> — archetype — purpose — core visuals — fields/measures
<repeat for each approved page>
Capture slicers and interactions:
Goal: lock the design identity, accessibility baseline, and delivery target.
Invoke or explicitly consult powerbi-report-design for design identity and
theme direction. Design identity (tone + signature) is owned by the design skill
— do not invent a parallel vocabulary here. Use the design skill's identity
guidance to pick a tone+signature combination, then surface it to the user.
Ask:
What should this report feel like?
Present 2–3 concrete identity options adapted to the audience and domain from
Rounds 1–2. Each option names a report feel and the one signature visual move
it implies. Recommend one and mark it (Recommended).
If the user has brand guidelines, make one option brand-forward rather than picking a generic tone.
Then ask delivery only if unclear:
Where should the finished report end up?
Recommended choices:
Design defaults (these come from the design skill's gotchas + base theme; applied automatically unless the user overrides):
Before producing _brief/report-spec.md for approval, get a canonical
Design Brief: YAML block from powerbi-report-design. The planner may provide
requirements, model inventory, page goals, and user constraints to the design
skill, but the planner must not author a competing detailed design skeleton.
The canonical design block must include:
generated_by: powerbi-report-designcontract_versionpages[] entry for every page in the page planpages[].layout_contract.canvaspages[].layout_contract.grid.regionspages[].layout_contract.placementspages[].layout_contract.space_auditpage_title textbox placement with non-empty title text per pagefilters region or a justified filter railcardVisual occupying the largest/dominant hero region
unless the design marks it as a composite KPI treatment with context and
rationaleIf the block is missing these items, stop and revise the design contract before
asking for approval or invoking powerbi-report-authoring.
After Rounds 0-4, produce one file and save it under ./_brief/ in the
current working directory:
./_brief/report-spec.md — the single source of truth for approval and
implementation handoff.report-spec.md has two layers:
yaml block containing the exact Design Brief: returned by
powerbi-report-design — the canonical implementation contract that
powerbi-report-authoring consumes.If Markdown prose and the embedded YAML disagree, fix report-spec.md before
building. Do not ask the authoring agent to choose between conflicting
instructions.
If the agent runtime exposes a dedicated session/scratch folder (for example a
session-state path injected by the harness), you may also write a copy there
for user visibility, but the canonical implementation handoff file remains
./_brief/report-spec.md unless every later authoring step carries the alternate
absolute path explicitly.
report-spec.md templateThe user-approval doc and agent handoff contract. The Markdown captures sign-off granularity; the embedded YAML captures exact implementation intent.
# Report Spec
## Report identity
- Report name:
- Semantic model:
- Audience:
- Primary purpose:
- Delivery target:
## User decisions and constraints
- Scope:
- Page count:
- Interactivity:
- Design direction:
- Publishing:
- Tooling:
- Model edit permissions:
- Accessibility:
- Data caveats:
## Narrative
- Core story:
- Audience promise:
- Key questions answered:
## Design identity (from `powerbi-report-design` Step 1)
- Tone: <named entry from tone-catalog, e.g. "Editorial Newsroom">
- Signature: <one defining move, e.g. "tabular numerals + display serif headlines">
- Brownfield delta (if applicable): <current_tone → target_tone>
## Page plan (archetypes from `powerbi-report-design` Step 3)
1. Page name
- Archetype: <Executive Summary | Analytical Canvas | …>
- Layout variant (A/B/C): <plus one-sentence variant_rationale>
- Purpose:
- Visuals:
- Fields/measures:
- Slicers/interactions:
## Design system summary
- Theme name + base palette (1–2 lines):
- Color semantics (which measure → which color, 1–2 lines):
- Typography pairing (display + body):
- Layout pattern (grid + gutter + density):
- Accessibility commitments:
## Model requirements
- Existing measures:
- New measures:
- New calculated columns:
- Relationship/sort requirements:
## Canonical design contract
Paste the exact fenced `yaml` block produced by `powerbi-report-design` here.
Do not rewrite it from planner memory and do not replace its mechanical
`layout_contract` with a freeform ASCII wireframe.
The YAML block is authoritative for implementation. `powerbi-report-authoring`
must implement this block; surrounding prose is context and conflict detection.
## Implementation notes
- Model changes:
- PBIR/report authoring:
- Validation:
- Desktop screenshot verification:
- Publishing boundary:
- Risks:
Before writing the approval question, verify the spec meets all of the
following. If any check fails, fix report-spec.md and the embedded
Design Brief: block before asking for approval.
Design Brief:.generated_by: powerbi-report-design and contract_version.pages[] entry.layout_contract.canvas, layout_contract.grid.regions, and
layout_contract.placements.layout_contract.space_audit with empty unplaced_regions
and an explicit empty-space/balance rationale.page_title textbox placement with non-empty title text.filters region or a justified filter rail; no
data visual starts under a slicer/header-band region.cardVisual is the largest/dominant hero region unless
the YAML explicitly describes a composite KPI treatment with context....), unresolved placeholders, or
pages/visuals promised in Markdown but omitted from the YAML.After writing report-spec.md, ask exactly one approval question:
Approve this report spec so I can start building?
Recommended choices:
Do not invoke authoring or publishing skills until the user approves.
When the user approves, execute this sequence:
_brief/report-spec.md,
or the explicitly carried alternate absolute path) and extract the embedded
Design Brief: YAML block. Verify it has generated_by: powerbi-report-design, contract_version, one populated layout_contract
per page, and space_audit per page before authoring. For greenfield, verify
the canvas is FHD (1920 x 1080) unless the user chose another size, and
verify the largest/dominant region is not a bare single-value cardVisual.refreshType=Calculate) unless a full source refresh is explicitly
required and safe.definition/database.tmdl, definition/model.tmdl,
definition/relationships.tmdl, and definition/tables/*.tmdl.powerbi-report-authoring guidance.Publish only when the approved delivery target includes publishing. Hand the
publish step to powerbi-report-management; do not author Fabric REST calls
or definition.pbir byConnection payloads from this skill. See
powerbi-report-management for the authoritative byConnection schemas
(minimal API form and full XMLA form for local Desktop validation), LRO
polling, and theme upload rules.
Planner-level rules to respect when invoking powerbi-report-management:
report.json.--verbose for long-running operations and poll LROs to a terminal
state (Succeeded / Failed).A report is not complete until:
definition.pbir points to the expected semantic model..pbip.Succeeded.byConnection schema and theme paths.development
Build a guided requirements-to-implementation workflow for new Power BI reports and dashboards from semantic models, datasets, or PBIP projects. Use when the user wants to: (1) plan then implement a report, (2) define audience, scope, page plan, design direction, dependencies, and delivery target, (3) create a locked report spec with approval before PBIR authoring. For direct edits to existing report files, use `powerbi-report-authoring`. For design-only critique or redesign, use `powerbi-report-design`. Triggers: "build me a dashboard", "create a new report", "plan then implement", "define and build Power BI report", "walk me through creating a report".
tools
Manage Power BI report workspace items in Microsoft Fabric via `az rest` CLI against the Fabric REST API. Use when the user wants to: (1) create reports from PBIR definitions, (2) get or download report definitions, (3) update report definitions or properties, (4) list workspace reports, (5) delete reports. For report layout authoring (pages, visuals, filters, formatting), use `powerbi-report-authoring`. Triggers: upload Power BI report, download PBIR definition, publish Power BI report to Fabric, manage Power BI reports.
development
Generate Power BI report visual design guidance before PBIR files are written. Use when the user wants to: (1) choose tone, signature, page archetypes, chart types, layout, color, typography, theme direction, or accessibility approach, (2) redesign/restyle an existing report, apply a brand, or critique chart/layout choices, (3) produce a design contract for `powerbi-report-authoring`. For end-to-end requirements, approval, and build sequencing, use `powerbi-report-planning`. Triggers: "design Power BI report", "make dashboard look professional", "choose chart type", "apply brand to report", "redesign report", "create design brief".
tools
Create and modify Power BI report files in PBIR/PBIP format using the `powerbi-report-author` and `powerbi-desktop` CLIs. Use when the user wants to: (1) implement an approved report spec or design brief, (2) add or edit pages, visuals, filters, slicers, bookmarks, themes, or formatting, (3) validate PBIR and verify rendering in Power BI Desktop. For open-ended visual design, use `powerbi-report-design` first. For end-to-end requirements and approval workflow, use `powerbi-report-planning` first. Triggers: "edit PBIR", "create Power BI report page", "add visual to PBIP", "format report visual", "validate Power BI report", "reload Desktop screenshot", "implement an approved PBIP report spec", "edit PBIR pages/visuals".