Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
julianobarbosa avatar

Power Bi Visuals

  • 48 installs
  • 6 repo stars
  • Updated July 22, 2026
  • julianobarbosa/claude-code-skills

Helps with ai & agent building tasks.

About

power-bi-visuals is a Claude Code skill for ai & agent building. It helps solo builders move faster with AI-assisted development.

  • power-bi-visuals
  • AI & Agent Building
  • AI-coding skill

Power Bi Visuals by the numbers

  • 48 all-time installs (skills.sh)
  • +1 installs in the week ending Aug 2, 2026 (Skillselion tracking)
  • Ranked #7,467 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
  • Data as of Aug 3, 2026 (Skillselion catalog sync)
npx skills add https://github.com/julianobarbosa/claude-code-skills --skill power-bi-visuals

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs48
repo stars6
Last updatedJuly 22, 2026
Repositoryjulianobarbosa/claude-code-skills

What it does

Helps with ai & agent building tasks.

Files

SKILL.mdMarkdownGitHub ↗

Power BI Visuals Skill

Create and manage visuals on PBIR report pages. No Power BI Desktop connection is needed -- these commands operate directly on JSON files.

Adding Visuals

# Add by alias (pbi-cli resolves to the PBIR type)
pbi visual add --page page_abc123 --type bar
pbi visual add --page page_abc123 --type card --name "Revenue Card"

# Custom position and size (pixels)
pbi visual add --page page_abc123 --type scatter \
    --x 50 --y 400 --width 600 --height 350

# Named visual for easy reference
pbi visual add --page page_abc123 --type combo --name sales_combo

Each visual is created as a folder with a visual.json file inside the page's visuals/ directory. The template includes the correct schema URL and queryState roles for the chosen type.

Binding Data

Visuals start empty. Use visual bind with Table[Column] notation to connect them to your semantic model. The bind options vary by visual type -- see the type table below.

# Bar chart: category axis + value
pbi visual bind mybar --page p1 \
    --category "Geography[Region]" --value "Sales[Revenue]"

# Card: single field
pbi visual bind mycard --page p1 --field "Sales[Total Revenue]"

# Matrix: rows + values + optional column
pbi visual bind mymatrix --page p1 \
    --row "Product[Category]" --value "Sales[Amount]" --value "Sales[Quantity]"

# Scatter: X, Y, detail, optional size and legend
pbi visual bind myscatter --page p1 \
    --x "Sales[Quantity]" --y "Sales[Revenue]" --detail "Product[Name]"

# Combo chart: category + column series + line series
pbi visual bind mycombo --page p1 \
    --category "Calendar[Month]" --column "Sales[Revenue]" --line "Sales[Margin]"

# KPI: indicator + goal + trend axis
pbi visual bind mykpi --page p1 \
    --indicator "Sales[Revenue]" --goal "Sales[Target]" --trend "Calendar[Date]"

# Gauge: value + max/target
pbi visual bind mygauge --page p1 \
    --value "Sales[Revenue]" --max "Sales[Target]"

Binding uses ROLE_ALIASES to translate friendly names like --value into the PBIR role name (e.g. Y, Values, Data). Measure vs Column is inferred from the role: value/indicator/goal/max roles create Measure references, category/row/detail roles create Column references. Override with --measure flag if needed.

Inspecting and Updating

# List all visuals on a page
pbi visual list --page page_abc123

# Get full details of one visual
pbi visual get visual_def456 --page page_abc123

# Move, resize, or toggle visibility
pbi visual update vis1 --page p1 --width 600 --height 400
pbi visual update vis1 --page p1 --x 100 --y 200
pbi visual update vis1 --page p1 --hidden
pbi visual update vis1 --page p1 --visible

# Delete a visual
pbi visual delete visual_def456 --page page_abc123

Container Properties

Set border, background, or title on the visual container itself:

pbi visual set-container vis1 --page p1 --background "#F0F0F0"
pbi visual set-container vis1 --page p1 --border-color "#CCCCCC" --border-width 2
pbi visual set-container vis1 --page p1 --title "Sales by Region"

Visual Calculations

Add DAX calculations that run inside the visual scope:

pbi visual calc-add vis1 --page p1 --role Values \
    --name "RunningTotal" --expression "RUNNINGSUM([Revenue])"

pbi visual calc-list vis1 --page p1
pbi visual calc-delete vis1 --page p1 --name "RunningTotal"

Bulk Operations

Operate on many visuals at once by filtering with --type or --name-pattern:

# Find visuals matching criteria
pbi visual where --page overview --type barChart
pbi visual where --page overview --type kpi --y-min 300

# Bind the same field to ALL bar charts on a page
pbi visual bulk-bind --page overview --type barChart \
    --category "Date[Month]" --value "Sales[Revenue]"

# Resize all KPI cards
pbi visual bulk-update --page overview --type kpi --width 250 --height 120

# Hide all visuals matching a pattern
pbi visual bulk-update --page overview --name-pattern "Temp_*" --hidden

# Delete all placeholders
pbi visual bulk-delete --page overview --name-pattern "Placeholder_*"

Filter options for where, bulk-bind, bulk-update, bulk-delete:

  • --type -- PBIR visual type or alias (e.g. barChart, bar)
  • --name-pattern -- fnmatch glob on visual name (e.g. Chart_*)
  • --x-min, --x-max, --y-min, --y-max -- position bounds (pixels)

All bulk commands require at least --type or --name-pattern to prevent accidental mass operations.

Supported Visual Types (32)

Charts

AliasPBIR TypeBind Options
barbarChart--category, --value, --legend
linelineChart--category, --value, --legend
columncolumnChart--category, --value, --legend
areaareaChart--category, --value, --legend
ribbonribbonChart--category, --value, --legend
waterfallwaterfallChart--category, --value, --breakdown
stacked_barstackedBarChart--category, --value, --legend
clustered_barclusteredBarChart--category, --value, --legend
clustered_columnclusteredColumnChart--category, --value, --legend
scatterscatterChart--x, --y, --detail, --size, --legend
funnelfunnelChart--category, --value
combolineStackedColumnComboChart--category, --column, --line, --legend
donut / piedonutChart--category, --value, --legend
treemaptreemap--category, --value

Cards and KPIs

AliasPBIR TypeBind Options
cardcard--field
card_visualcardVisual--field (modern card)
card_newcardNew--field
multi_row_cardmultiRowCard--field
kpikpi--indicator, --goal, --trend
gaugegauge--value, --max / --target

Tables

AliasPBIR TypeBind Options
tabletableEx--value
matrixpivotTable--row, --value, --column

Slicers

AliasPBIR TypeBind Options
slicerslicer--field
text_slicertextSlicer--field
list_slicerlistSlicer--field
advanced_sliceradvancedSlicerVisual--field (tile/image slicer)

Maps

AliasPBIR TypeBind Options
azure_map / mapazureMap--category, --size

Decorative and Navigation

AliasPBIR TypeBind Options
action_buttonactionButton(no data binding)
imageimage(no data binding)
shapeshape(no data binding)
textboxtextbox(no data binding)
page_navigatorpageNavigator(no data binding)

Suppressing Auto-Sync (--no-sync)

By default, every write command automatically syncs Power BI Desktop. When adding or binding many visuals in sequence, Desktop reloads after each one.

Use --no-sync on the visual command group to batch all changes, then call pbi report reload once at the end:

# Suppress sync while building visuals
pbi visual --no-sync add --page overview --type card --name rev_card
pbi visual --no-sync bind rev_card --page overview --field "Sales[Total Revenue]"
pbi visual --no-sync add --page overview --type bar --name sales_bar
pbi visual --no-sync bind sales_bar --page overview --category "Product[Category]" --value "Sales[Revenue]"

# Single reload when all visuals are done
pbi report reload

JSON Output

All commands support --json for agent consumption:

pbi --json visual list --page overview
pbi --json visual get vis1 --page overview
pbi --json visual where --page overview --type barChart

---

Gotchas

  • `visual bind` infers Measure vs Column from the role, not the underlying TMDL object: A role like --value always creates a Measure reference. If Sales[Revenue] is actually a column (not a measure), the visual renders BLANK with no error. Use --measure or rename to a real measure.
  • `bulk-bind` without `--type` or `--name-pattern` is blocked, but with a too-loose pattern it can rebind unrelated visuals: --name-pattern "Chart_*" matches Chart_Revenue, Chart_Margin, AND Chart_Drillthrough_Hidden. Always preview with pbi visual where first.
  • Visual position `--x`/`--y` is in report-design pixels, not screen pixels: A --x 1280 on a 1280-wide canvas places the visual at the right edge regardless of viewer screen size. Visuals positioned past canvas bounds render off-screen with no warning.
  • Visual calculations via `calc-add` run AFTER measures in the visual scope: Referencing a measure inside a visual calculation captures the post-filter value. Iterating over the calc as if it were a measure (e.g. inside SUMX) produces unexpected results because the calc only exists within the visual's query scope.
  • PBIR visual `name` is the folder slug — renaming requires file system move, not a CLI flag: The --name flag only applies at creation. Subsequent visual update does not rename. To rename, delete + re-add (losing the visual ID) or edit the file system directly.
  • *`bulk-delete --name-pattern "Placeholder_" is irreversible and skips no confirmation:** Each delete is a folder removal; combined with --no-sync you can wipe dozens of visuals before noticing. Always run pbi visual where` with the same pattern first.

Related skills

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.