Powerbi Report CLI
MicrosoftOfficialPublished by Microsoft
- Skill
- Tool integration
- Data and AI
- MIT
- Low risk
AutoGineer summary
Written by AutoGineer from the skill’s own files, not by the author
The powerbi-report-cli skill provides a structured, mode-based framework for managing the entire Power BI report lifecycle. It acts as a dispatcher across four distinct phases: planning (requirements and scope), design (visual and layout strategy), authoring (local PBIR/PBIP file manipulation and validation), and management (Fabric item transport and rebinding). The skill enforces strict boundaries between these modes to ensure quality, requiring explicit approval for new reports and utilizing a dedicated CLI for metadata-driven validation and authoring tasks.
What it does
- Guides users through report requirements, scope, and page planning.
- Provides design contracts for visual archetypes, layouts, and branding.
- Enables local editing, validation, and previewing of PBIR and PBIP files.
- Handles report item transport to and from Microsoft Fabric.
- Supports re-theming, conditional formatting, and visual configuration.
- Enforces a mandatory approval gate for greenfield report development.
When to use it
- When planning a new Power BI report from a semantic model.
- When you need to define a professional design brief or layout strategy.
- When editing local PBIR/PBIP files, including visuals, filters, and themes.
- When validating report structure and formatting before deployment.
- When publishing or managing report items within a Fabric workspace.
Advantages
- Ensures consistent report quality through a structured, multi-mode workflow.
- Prevents premature publishing by enforcing a mandatory approval barrier.
- Uses a dedicated CLI to eliminate guesswork in PBIR schema and property editing.
- Maintains clear separation between design intent and technical implementation.
- Provides robust validation tools to catch errors before Fabric deployment.
Usage examples
- “Create a new executive report from this semantic model.”
- The agent enters planning mode, inspects the model, generates a report spec, and requests user approval before proceeding.
- “Design an operational page and choose the right charts.”
- The agent enters design mode, produces a design brief with page archetypes and chart recommendations.
- “Add a KPI page to this PBIP, validate it, and take screenshots.”
- The agent enters authoring mode, modifies the local PBIP files, runs validation, and captures screenshots for review.
- “Publish this local PBIP to my Fabric workspace and rebind it.”
- The agent enters management mode, performs the upload to Fabric, and completes the rebind operation.
Install
Download the skill as a ZIP:
https://mp-staging.autogineer.com/agent-skills/microsoft/powerbi-report-cli/downloadUnzip it into the cross-client skills folder of your project:
mkdir -p .agents/skills && unzip powerbi-report-cli.zip -d .agents/skills
Documentation by Microsoft
Telemetry — MANDATORY. Every
api.fabric.microsoft.comcall must carryx-ms-fabric-skill: powerbi-report-cli(az rest:--headers "x-ms-fabric-skill=powerbi-report-cli"), including every LRO poll,fabric_lroand retry. Snippets omit it — add it anyway.
CRITICAL NOTES
To find workspace details, including its ID, from a workspace name: list all workspaces, then use JMESPath filtering.
To find item details, including its ID, from a workspace ID, item type, and item name: list all items of that type in that workspace, then use JMESPath filtering.
Use
powerbi-report-clifor the report artifact: requirements, design, PBIR/PBIP page and visual edits, preview, and publishing. Semantic model, measure, and DAX work belongs to a semantic-model skill. Natural-language questions about report data belong tofabriciq.
Power BI Reports - CLI Skill
This skill owns the Power BI report lifecycle end to end: requirements and scope, visual design, local PBIR/PBIP authoring and preview, and report-item transport to and from Microsoft Fabric.
It is a mode dispatcher and intentionally contains no detailed procedures. Select the mode that matches the request, then read the matching mode reference end to end before acting. The mode file holds the required workflow, commands, payloads, templates, and failure rules.
Mode Selection
| Mode | Use when the request... | Existing route examples | Read first |
|---|---|---|---|
planning | creates a new report/dashboard and needs requirements, model/dependency inspection, scope, a page plan, and approval before implementation | create a report, build a dashboard, create from a semantic model, plan then implement, walk me through creating a report | references/planning.md, then references/planning-part-02.md |
design | decides what a report should look like: tone, signature, page archetype, chart type, layout, color, typography, theme direction, accessibility, brand application, redesign, or critique | design a Power BI report, make the dashboard professional, choose a chart, apply a brand, redesign the report, create a design brief | references/design.md |
authoring | reads or edits local PBIR/PBIP files, validates them, previews the report, or captures screenshots | edit PBIR, create/add a report page or visual, format a visual, add filters/slicers/bookmarks/themes, validate PBIR, preview/reload/screenshot in Desktop or service | references/authoring.md |
management | moves a report definition to or from Fabric or manages the workspace report item | publish/upload/download PBIR or PBIP, list reports, get/update/delete a report, rebind a report | references/management.md |
Mode Boundary Rules
Classify by intent, not by which file or tool is already open.
designdecides what the report should look like;authoringwrites the PBIR that realizes it. Choosing a chart type isdesign; encoding it intovisual.jsonisauthoring.Restyling or reformatting an existing local report is
authoring, even when the request uses design language. Usedesignwhen the user wants advice or a design contract rather than a file change.authoringchanges local files and performs preview/validation. It does not publish to Fabric.managementtransports definitions and manages Fabric report items. It does not invent or directly author PBIR content.planningowns the guided requirements-to-approval flow for a new report. A focused edit to an existing report goes directly toauthoring.
A greenfield request can span modes in this order:
planning -> design -> authoring -> managementHandle one mode at a time. Announce each switch and read the new mode reference
before starting that part. The planning approval gate is a turn boundary:
never build or publish until the user explicitly approves the locked spec in a
later reply.
GREENFIELD APPROVAL BARRIER — MANDATORY. When a new-report request asks to plan, build, and/or publish but the user has not approved a locked spec in a prior reply, set the current phase to
approval_pendingand keepplanningas the only active mode. In this phase, do not loadauthoringormanagement, edit/scaffold PBIR or semantic-model files, generate synthetic data, call Fabric write APIs, or publish. Persist_brief/report-spec.md, ask for explicit approval, and end the turn. The build/publish wording in the original request is desired future scope, not approval to cross this barrier.
Required Deliverable by Mode
| Mode | Completion requirement |
|---|---|
planning | Persist _brief/report-spec.md or the user-named equivalent, ask for explicit approval, and stop before implementation. |
design | Produce the complete Design Brief: contract, including design_identity and a page archetype/layout contract for every page. Do not edit PBIR or call Fabric APIs. |
authoring | Persist the requested PBIR/PBIP changes, validate each logical batch, then complete the selected preview and screenshot-review workflow required by the authoring reference. Do not publish. |
management | Complete the requested Fabric report operation, including LRO polling and documented readback verification. |
Rules
MUST
Select the narrowest mode that fully covers the current request.
Read
references/<mode>.mdend to end before the first command or file edit in that mode. When an already-loaded mode explicitly routes one narrow cross-mode operation to a named topic reference, treat that topic reference as the complete handoff; do not load the target mode's umbrella file unless the work expands beyond that operation.In
planningmode, also readreferences/planning-part-02.mdbefore producing_brief/report-spec.md; it contains the required canonical design contract and approval checks.Across a multi-turn task, retain a compact working state containing resolved workspace/item/model IDs, local and downloaded paths, and references already read. Reuse it in later turns unless the user explicitly requests a fresh query or the preceding operation invalidated a value.
Preserve every argument and safety boundary documented by the selected mode.
Announce and perform an explicit mode switch when the request crosses a boundary.
Use the
powerbi-report-authorCLI metadata and validation surfaces instead of guessing PBIR schemas, roles, formatting properties, selectors, or enum values.Keep local edits local unless the user explicitly requests publishing.
Resolve Fabric workspace and item IDs by listing and filtering rather than guessing identifiers.
Produce the artifact the user requested; reading or summarizing a reference is not task completion.
PREFER
Infer facts already present in the prompt, semantic model, existing PBIP, or prior approved spec instead of asking again.
Load only the selected mode and its directly relevant topic references.
Reuse reference guidance already loaded in the current task. Open a new reference only when the requested operation or an observed mismatch requires it.
Preserve the user's existing project structure, schemas, host, operation, binding, and delivery target unless the selected mode explicitly requires a change.
AVOID
Acting from this dispatcher without reading the selected mode reference.
Reloading this dispatcher, a mode file, or a topic reference already read in the current task solely because the conversation advanced to a later turn.
Loading a retired sibling skill name; planning, design, authoring, and management are modes of this skill.
Editing PBIR or calling Fabric APIs in
planningordesign.Publishing from
authoring, or authoring PBIR content frommanagement.Bypassing the planning approval gate because the original request also asked to build or publish.
<!-- BEGIN GENERATED REFERENCE INDEX -->
Complete Reference Index
Open every relevant reference directly from this index. Files named part-XX continue the named topic.
Authoring
Design
Mode Guides
<!-- END GENERATED REFERENCE INDEX -->
Examples
| User request | Mode |
|---|---|
| "Create a new executive report from this semantic model." | planning |
| "Design an operational page and choose the right charts." | design |
| "Add a KPI page to this PBIP, validate it, and take screenshots." | authoring |
| "Publish this local PBIP to my Fabric workspace and rebind it." | management |
Route Compatibility
The merged skill preserves the four previous route surfaces. Treat the following phrases as explicit aliases for the corresponding mode:
| Mode | Preserved route phrases |
|---|---|
planning | create a report; build a report; create a dashboard; create a new report from scratch; create a report from a semantic model or dataset link; build a report for this model; make me a dashboard; plan then implement; walk me through creating a report |
design | design Power BI report; make dashboard look professional; choose chart type; apply brand to report; redesign report; create design brief; Power BI report design archetype |
authoring | edit PBIR; create Power BI report page; add visual to PBIP; format report visual; validate Power BI report; preview Power BI report; Power BI Desktop preview status; preview report in service; preview report in browser; screenshot report page; screenshot all report pages; list preview hosts; implement dashboard in PBIP; add dashboard visuals to report; implement an approved PBIP report spec; edit PBIR pages/visuals; edit a Power BI report |
management | upload PBIR report definition; upload Power BI report; download PBIR definition; publish PBIR definition; publish Power BI report to Fabric; manage Power BI reports; list workspace reports |
Files
- ATTRIBUTION.mdAdded by AutoGineer881 B
- LICENSELicence file added by AutoGineer1.1 KiB
- SKILL.md16.1 KiB
- apm.yml642 B
- references/authoring-part-02.md14.6 KiB
- references/authoring-part-03.md16.0 KiB
- references/authoring-part-04.md15.9 KiB
- references/authoring.md16.8 KiB
- references/authoring/authoring-workflows.md11.7 KiB
- references/authoring/bookmark.md14.3 KiB
- references/authoring/button-part-02.md16.1 KiB
- references/authoring/button-part-03.md7.7 KiB
- references/authoring/button.md15.7 KiB
- references/authoring/card-part-02.md16.1 KiB
- references/authoring/card-part-03.md8.6 KiB
- references/authoring/card.md6.4 KiB
- references/authoring/cartesian-part-02.md17.7 KiB
- references/authoring/cartesian-part-03.md12.3 KiB
- references/authoring/cartesian-part-04.md15.8 KiB
- references/authoring/cartesian.md18.0 KiB
- references/authoring/color-strategy.md8.4 KiB
- references/authoring/conditional-formatting-part-02.md13.5 KiB
- references/authoring/conditional-formatting-part-03.md16.0 KiB
- references/authoring/conditional-formatting-part-04.md14.0 KiB
- references/authoring/conditional-formatting-part-05.md16.9 KiB
- references/authoring/conditional-formatting-part-06.md14.7 KiB
- references/authoring/conditional-formatting-part-07.md14.5 KiB
- references/authoring/conditional-formatting.md18.2 KiB
- references/authoring/custom-visuals.md13.9 KiB
- references/authoring/expressions.md11.9 KiB
- references/authoring/field-parameters.md5.1 KiB
- references/authoring/filter-pane.md5.0 KiB
- references/authoring/filters.md9.3 KiB
- references/authoring/formatting-overview.md4.8 KiB
- references/authoring/formatting-part-02.md3.3 KiB
- references/authoring/formatting.md17.0 KiB
- references/authoring/image.md12.6 KiB
- references/authoring/kpi.md2.5 KiB
- references/authoring/map.md13.4 KiB
- references/authoring/model-binding.md7.7 KiB
- references/authoring/page-formatting.md4.5 KiB
- references/authoring/powerbi-desktop.md2.4 KiB
- references/authoring/powerbi-report-author-cli-part-02.md3.2 KiB
- references/authoring/powerbi-report-author-cli.md17.7 KiB
- references/authoring/preview-part-02.md16.9 KiB
- references/authoring/preview-part-03.md4.0 KiB
- references/authoring/preview-part-04.md2.5 KiB
- references/authoring/preview.md16.1 KiB
- references/authoring/re-theming-part-02.md16.8 KiB
- references/authoring/re-theming-part-03.md4.9 KiB
- references/authoring/re-theming.md1.5 KiB
- references/authoring/screenshot-review.md5.0 KiB
- references/authoring/shape.md13.6 KiB
- references/authoring/slicers-part-02.md16.3 KiB
- references/authoring/slicers.md15.6 KiB
- references/authoring/table.md17.5 KiB
- references/authoring/textbox.md5.6 KiB
- references/authoring/theming-part-02.md6.7 KiB
- references/authoring/theming.md16.4 KiB
- references/authoring/version-control.md6.6 KiB
- references/design.md17.3 KiB
- references/design/accessibility.md11.4 KiB
- references/design/anti-patterns.md18.5 KiB
- references/design/archetype-composition.md3.4 KiB
- references/design/archetypes/analytical-canvas.md17.7 KiB
- references/design/archetypes/comparative-benchmark-part-02.md5.7 KiB
- references/design/archetypes/comparative-benchmark.md15.8 KiB
- references/design/archetypes/executive-summary.md14.7 KiB
- references/design/archetypes/narrative-story.md18.1 KiB
- references/design/archetypes/operational-monitor.md17.0 KiB
- references/design/assets/base.json7.5 KiB
- references/design/brownfield.md5.7 KiB
- references/design/chart-selection.md9.8 KiB
- references/design/color.md10.5 KiB
- references/design/design-brief-part-02.md13.7 KiB
- references/design/design-brief.md8.8 KiB
- references/design/interactivity.md9.2 KiB
- references/design/layout.md11.3 KiB
- references/design/pre-flight-checklist.md10.8 KiB
- references/design/signatures.md12.3 KiB
- references/design/tone-catalog.md14.4 KiB
- references/design/typography.md9.2 KiB
- references/design/visual-cookbook-part-02.md11.0 KiB
- references/design/visual-cookbook.md16.7 KiB
- references/management-part-02.md17.2 KiB
- references/management-part-03.md7.5 KiB
- references/management-part-04.md16.7 KiB
- references/management.md10.1 KiB
- references/planning-part-02.md11.2 KiB
- references/planning.md19.5 KiB
references/design/anti-patterns.md
Anti-Patterns — The Dashboard Slop Catalog
Contents
Why This Catalog Exists
Cluster 1 — Visual Noise (Chartjunk)
Cluster 2 — Misleading Encoding
Cluster 3 — Cognitive Overload
Cluster 4 — Color Misuse
Cluster 5 — Interactivity Theater
Cluster 6 — Archetype Mismatch
LLM-Specific Failure Modes
Detection Heuristics
Severity Model
Remediation Quick-Reference
Pre-Publish Review Workflow
Cross-Reference to Other Documents
Why This Catalog Exists
LLMs producing dashboard layouts gravitate toward a set of attractor states — generic, cluttered, misleading designs that look complete but fail users. This is the refusal list: when the agent detects these patterns in its own output, it must stop and fix before emitting.
This catalog is advisory. It assigns severity levels but never blocks output. Strong warnings surface to the user for explicit confirmation.
Cluster 1 — Visual Noise (Chartjunk)
| Anti-Pattern | Why It Fails | Do Instead | PBI Tell |
|---|---|---|---|
| 3D effects | Perspective distortion destroys precision; occludes data | Flat 2D equivalent | Any 3D visual type selected |
| Drop shadows on visuals | Pure decoration; adds visual weight without information | Remove all shadows; rely on whitespace for separation | shadow enabled in visual formatting |
| Saturated background fills | Competes with data ink; reduces text contrast | White or near-white canvas (#FFFFFF, #F9F9F9) | background.color is a saturated hue |
Cluster 2 — Misleading Encoding
| Anti-Pattern | Why It Fails | Do Instead | PBI Tell |
|---|---|---|---|
| Truncated bar baseline | Bars starting at non-zero exaggerate differences by 2-10× | Always start bars at zero; use dot plot if range is narrow | valueAxis.start ≠ 0 on bar chart |
| Dual y-axis chart | Implies correlation by scale manipulation; easy to lie with | Two separate charts, shared x-axis, stacked vertically | secondaryYAxis enabled |
| Pie chart >5 slices | Angle encoding is imprecise; small slices become invisible | Sorted horizontal bar chart | Pie/donut with >5 data points |
| Stacked bar for mid-stack comparison | Only bottom and top segments have a common baseline | Grouped bar or small multiples | Stacked bar with >2 segments compared across categories |
| Unshared small-multiple axes | Different scales make comparison impossible — defeats the purpose | Force identical axis range on all multiples | Auto-scale per tile |
| Gauge / speedometer | Uses large area for one number; no trend; arbitrary dial range | Card + sparkline or bullet graph | Gauge visual type |
| Radar / spider chart | Area distortion; axis order changes shape; unreadable | Grouped bar or parallel coordinates | Radar visual type |
| Area chart for non-stacked data | Fill implies volume/accumulation that may not exist | Line chart for trends; area only for stacked composition | areaChart for single series |
Cluster 3 — Cognitive Overload
| Anti-Pattern | Why It Fails | Do Instead | PBI Tell |
|---|---|---|---|
| KPI carpet-bombing | 8+ cards in a row; nothing stands out; reader skips all | 3–4 KPIs max; pick the ones that drive decisions | >6 card visuals on one page |
| 12+ visuals on a page | Exceeds working memory; user scans nothing carefully | 5–7 visual groups; use drill-through for depth | Visual count >12 on single page |
| Alert fatigue | Everything highlighted = nothing highlighted | Reserve red/amber for actionable exceptions only | >3 conditional-format rules using red |
| Embedded detail matrix on exec page | Executives scan, not read; a 50-row matrix wastes their time | Summary KPIs on exec page; matrix on drill-through detail page | Matrix with >10 rows on a page with cards |
| Wall of slicers | 5+ slicers consume space and paralyze with choice | 2–3 key slicers visible; rest in filter pane or collapsible panel | >4 slicer visuals on one page |
| Wrong date slicer grain | Full-date Between picker used for yearly executive filtering; control may not render and adds precision users do not need | Match slicer to grain: Year/Period dropdown or tile for annual/quarterly executive pages; full-date Between only for renderable Date/DateTime range exploration | Executive page with yearly data but slicer_type: between on full-date key |
| Slicer sizing shortcut | Shrinking slicer height/font hides clipping instead of solving layout; dropdown/date chrome still needs space | Follow the slicer sizing formula from the authoring mode and enlarge the reserved band/rail | Slicer height near 48px, 8pt text, or clipped lower row |
| Multi-page report without navigation | Users don't discover pages beyond the first | Add page navigator or button-based navigation | >3 pages with no navigator or nav buttons |
| Variant default-bias / uniform-variant pages | Picking layout variant A on every page — or any single variant uniformly across same-archetype pages — without consulting the selection table. Produces interchangeable, templatized reports that ignore each page's data shape | Walk the Layout Variants selection table in the archetype file per page, using each page's own data signals (KPI count, slicer count, viewing distance, comparison shape, narrative structure). Record variant_rationale per page. Same-archetype reports should rotate variants where data supports it; use references/design/archetype-composition.md for cross-page rotation guidance | Every page in a multi-page report has the same layout_variant; or variant_rationale is missing / generic across pages |
| Mono-archetype report | Copy-pasting page 1's archetype to pages 2-N instead of routing each page independently. A 4-page report covering distinct subject areas gets shipped with all 4 pages using the same archetype because the agent never re-walked the router after page 1. Pages all look the same regardless of audience/purpose differences | Re-walk the archetype decision for every page using that page's audience, purpose, and cadence. Multi-domain "cover everything" requests almost always decompose into 3-4 different archetypes (Executive landing + Comparative ranking + Analytical exploration + Narrative timeline). Use references/design/archetype-composition.md for common multi-archetype compositions | 3+ pages all share one archetype; or every page's archetype field equals page 1's |
| Silent-guess on a vague prompt | Receiving a prompt that's missing audience, purpose, page count, or filtering depth — and producing a design brief anyway based on a default assumption. The user gets a templatized "make a report about X" output that doesn't match their actual need | Treat missing audience, purpose, page count, or filtering depth as vagueness. Stop and offer 2–3 named, concrete options (each referencing a specific archetype + variant combination, in user-facing language). Only after the user picks, or after two clarification rounds with a documented assumption, proceed to design | Brief has no record of clarification; prompt was 1-line broad ("build a dashboard for X") and brief jumps straight to layout |
| Mandatory archetype component fill | Treating every box in an archetype wireframe as required creates redundant cards/callouts that do not answer a new question | Treat variant zones as advisory; drop or repurpose any component without insight_basis / callout_value_basis | Callout repeats the same absolute measure as the adjacent chart |
Cluster 4 — Color Misuse
| Anti-Pattern | Why It Fails | Do Instead | PBI Tell |
|---|---|---|---|
| Rainbow categorical on ordered data | No perceptual order; readers can't decode high vs low | Sequential single-hue ramp (Blues, viridis) | dataColors with rainbow hues on a sorted dimension |
| Categorical palette on ordinal data | Distinct hues imply no order; misleads on ranked data | Sequential or diverging palette | Categorical colors assigned to ordered field |
| Red/green as sole signal | 8% of males are red-green CVD; information invisible | Add icon + text label alongside color | Red and green used without secondary channel |
| Low-contrast labels | <4.5:1 body-text ratio; unreadable on projectors and low-quality screens | Minimum #767676 on white for body text | Text color with contrast ratio <4.5:1 |
| Semantic color flip | Green=bad violates universal convention; confuses everyone | Respect standard semantics; never invert | good theme color mapped to a negative outcome |
| Pastel for critical status | Light pink doesn't signal urgency; fails to grab attention | Saturated red for critical; pastel only for context/background | Conditional format using pastel for "critical" threshold |
| >8 categorical hues | Colors become indistinguishable; cognitive overload | Group tail categories into "Other"; limit to 7–8 | dataColors with >8 entries actively used |
Cluster 5 — Interactivity Theater
| Anti-Pattern | Why It Fails | Do Instead | PBI Tell |
|---|---|---|---|
| Headline behind a click | Primary insight invisible until interaction | Show insight on page load; interactions reveal depth | Key metric visible only via drill-through or bookmark |
| Invisible slicer state | User can't tell what's filtered; data appears wrong/incomplete | Show active filter indicators; use slicer headers | Slicers with hidden headers or no default label |
| Drill without breadcrumb | User gets lost; can't return to overview | Always add back button; show drill path in page subtitle | Drill-through page without back button |
| Bookmark overload | >10 bookmarks become unmanageable; states conflict | 5–8 bookmarks max; clear, descriptive names | >10 bookmarks defined |
| Slicer in prime real estate | Top-left position wasted on controls, not insight | Slicers in filter strip, right rail, or collapsible panel | Slicer visual at position x<200, y<100 |
| Auto-cycling carousel | Users can't control pace; miss data; a11y violation | Static views with manual next/prev buttons | Timer-driven bookmark cycling |
Cluster 6 — Archetype Mismatch
| Anti-Pattern | Why It Fails | Do Instead | PBI Tell |
|---|---|---|---|
| Executive page with 30 visuals | Executives scan for 15 seconds; 30 visuals need 15 minutes | 4–6 visual groups; cards + 1 hero chart | Archetype=exec + visual count >10 |
| Operational without timestamp | Users can't assess data freshness; stale data = wrong decisions | Show "Last refreshed: {time}" in footer on every ops page | No timestamp or refresh indicator on operational page |
| Analytical without export/drill | Analysts need to dig; no drill-through = dead end | Enable drill-through, export, personalize visuals | Archetype=analytical + no drill-through pages |
| Narrative without thesis | Story pages without a headline are just data dumps | Every narrative page leads with a finding statement | Narrative page without text visual stating insight |
| Default "All" on large model | Loads millions of rows on first view; slow, meaningless overview | Pre-filter to recent period or top-N by default | No default slicer selection + large dataset |
| Comparative with unsynchronized slicers | Comparing A vs B but slicers don't apply equally | Use sync slicers across all compared pages/visuals | Comparative layout with independent slicer states |
LLM-Specific Failure Modes
Common mistakes LLMs make when generating PBI report definitions:
| Failure Mode | Description | Fix |
|---|---|---|
| Clustered bar for everything | Default chart choice regardless of question type | Consult the chart selection decision matrix |
| Ignoring small multiples | Uses multi-series line or stacked bar instead of small multiples for comparison | Use small multiples when comparing >3 categories |
| One line chart per measure | Every KPI gets its own line chart; no hierarchy or grouping | Combine related measures; use cards for single values |
| Missing sortBy | Bar charts left in alphabetical order | Apply descending sort on the value measure |
| Ignoring numeric alignment | Proportional-looking figures or left-aligned numbers in comparison tables/matrices | Use tabular-looking fonts where available, right-align numeric columns, and apply consistent number formatting |
| Skipping alt text | Alt text field left empty on every visual | Write insight-driven alt text for every visual |
| Hardcoding hex colors | Inline #FF0000 instead of theme reference | Use theme dataColors and sentiment keys |
| Six font sizes | Each visual gets a different type size | Follow the 4-tier type ramp |
| Pixel drift | Positions not on 8px grid; edges misaligned | Snap all x, y, width, height to multiples of 8 |
| Title as chart type | "Bar Chart" or "Line Chart" as visual title | Title states the insight: "Sales declined 8% in Q4" |
Detection Heuristics
Automated and semi-automated checks to catch anti-patterns:
| # | Check | What to Look For | Severity |
|---|---|---|---|
| 1 | Hue count | >8 distinct hues in dataColors actively rendered | warn |
| 2 | Dual axis | secondaryYAxis enabled on any visual | strong-warn |
| 3 | Card count | >6 card visuals on a single page | warn |
| 4 | Bar baseline | valueAxis.start ≠ 0 on bar or column chart | strong-warn |
| 5 | Pie slice count | Pie or donut with >5 data points in field | warn |
| 6 | Visual density | >12 visuals on a single page | warn |
| 7 | Pixel grid | Any position.x, y, width, height not divisible by 8 | info |
| 8 | Contrast ratio | Any text/background pair below 4.5:1 | strong-warn |
| 9 | Alt text | Alt text field empty on any non-decorative visual | warn |
| 10 | Inline hex | Hardcoded hex color not referencing theme | info |
| 11 | Freshness indicator | Operational page missing refresh timestamp | warn |
| 12 | Ramp bloat | >4 distinct fontSize values across visual titles/labels | info |
Severity Model
| Level | Label | Meaning | Agent Behavior |
|---|---|---|---|
info | Informational | Stylistic concern; may be intentional | Log internally; do not surface unless asked |
warn | Warning | Likely unintentional; surface to user | Surface in review summary; suggest fix |
strong-warn | Strong Warning | High risk of misleading or inaccessible output | Recommend explicit user confirmation before proceeding |
Important: This system is advisory only. It never blocks output or refuses to generate. The agent surfaces findings and recommendations; the user decides.
Remediation Quick-Reference
For each detected anti-pattern, the recommended fix action:
| Anti-Pattern Detected | Immediate Fix | Time to Fix |
|---|---|---|
| 3D visual | Replace with flat 2D equivalent | 1 min |
| Truncated baseline | Set valueAxis.start: 0 | 30 sec |
| Dual axis | Split into two visuals, stack vertically | 5 min |
| Pie >5 slices | Replace with sorted horizontal bar | 3 min |
| >12 visuals | Move detail to drill-through page | 10 min |
| >8 colors | Group tail categories into "Other" | 5 min |
| Missing alt text | Write insight-driven text per template | 2 min/visual |
| Pixel drift | Snap x/y/w/h to multiples of 8 | 1 min/visual |
| Rainbow on sequential | Replace with single-hue sequential ramp | 3 min |
| Missing timestamp | Add "Last refreshed" text box in footer | 2 min |
| Hardcoded hex | Move colors to theme JSON | 5 min |
| Ramp bloat (>4 sizes) | Standardize to 4-tier type ramp | 5 min |
| Unsorted bars | Apply descending sort by value measure | 30 sec |
| Gauge | Replace with card + sparkline | 3 min |
| Slicer in top-left | Move to filter strip or right rail | 2 min |
| Bookmark overload | Consolidate to ≤8; delete redundant states | 10 min |
| No navigation | Add page navigator or button navigation | 5 min |
| Semantic color flip | Correct to standard green=good/red=bad | 2 min |
Pre-Publish Review Workflow
Run these checks in order before delivering any report:
1. LAYOUT CHECK
□ Visual count ≤ 7 groups per page
□ All positions on 8px grid
□ Consistent gutters (16px or 24px)
□ Page margins ≥ 24px all sides
□ Title/header/breadcrumb height matches layout contract (~72px FHD / ~48px 1280x720)
2. COLOR CHECK
□ ≤ 8 categorical hues
□ No rainbow on ordered data
□ All text passes WCAG contrast (4.5:1 body, 3:1 large)
□ No red/green as sole signal
□ CVD simulation passes
□ All colors from theme (no inline hex)
3. TYPOGRAPHY CHECK
□ ≤ 4 distinct font sizes
□ Right-align numeric columns; use tabular-looking digits where comparison matters
□ Consistent number formatting across pages
□ No text below 8pt
4. CHART CHECK
□ Every chart answers a stated question
□ Bars start at 0
□ No dual axes
□ No pie with >5 slices
□ All bar charts sorted by value (unless meaningful order)
5. INTERACTIVITY CHECK
□ Primary insight visible on page load
□ Slicer state visible
□ Drill-through has back button
□ ≤ 8 bookmarks
□ All cross-filter interactions deliberately configured
6. ACCESSIBILITY CHECK
□ Alt text on every non-decorative visual
□ Tab order matches reading order
□ Keyboard navigation works end-to-end
□ Touch targets ≥ 24×24px
□ High-contrast mode tested
7. ARCHETYPE CHECK
□ Visual density matches archetype
□ Interaction budget matches archetype
□ Typography tier matches archetype
□ Color palette matches archetypeCross-Reference to Other Documents
| Anti-Pattern Cluster | Primary Reference | Secondary Reference |
|---|---|---|
| Visual noise | chart-selection.md — Anti-patterns section | layout.md — Whitespace tiers |
| Misleading encoding | chart-selection.md — Decision matrix | chart-selection.md — Encoding accuracy |
| Cognitive overload | layout.md — Visual hierarchy, Templates | interactivity.md — Interaction budgets |
| Color misuse | color.md — Palette tables, CVD | accessibility.md — Contrast workflow |
| Interactivity theater | interactivity.md — Taxonomy, titles | interactivity.md — Bookmark rules |
| Archetype mismatch | layout.md — Composition templates | All reference documents' archetype sections |
Requirements and compatibility
Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta
“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.
Security
What our scanner noticed· Low risk
- Phrasing that asks for actions without confirmation
- Instructions that use the network
A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.
Attribution and licence
- Published by
- Microsoft
- Publisher
- Microsoft (Official)
- Source
- microsoft/skills-for-fabric · skills/powerbi-report-cli · commit f8fac11
- Licence
- MIT License (redistribution allowed)
- LICENSE (added by AutoGineer from LICENSE)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
- Also distributed in
- microsoft/skills-for-fabric
AutoGineer is not affiliated with or endorsed by Microsoft.
Download ZIP
The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download powerbi-report-cli.zip