Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Manage Power BI report pages and bookmarks -- add, remove, configure, and lay out pages in PBIR reports using pbi-cli. Invoke this skill whenever the user mentions "add page", "new page", "delete page", "page layout", "page size", "page background", "hide page", "show page", "drillthrough", "page order", "page visibility", "page settings", "page navigation", "bookmark", "create bookmark", "save bookmark", "delete bookmark", or wants to manage bookmarks that capture page-level state. Also invoke
.claude/skills/minasaad1-power-bi-pages/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | -38% | 0% |
| case-02 | ✗→✓ | ▲ Improved | -44% | 0% |
| case-03 | ✗→✓ | ▲ Improved | -9% | 0% |
| case-04 | ✗→✓ | ▲ Improved | -21% | 0% |
| case-07 | ✗→✓ | ▲ Improved | -22% | 0% |
Manage pages in PBIR reports. Pages are folders inside definition/pages/ containing a page.json file and a visuals/ directory. No Power BI Desktop connection is needed.
bash# List all pages with display names, order, and visibility pbi report list-pages # Get full details of a specific page pbi report get-page page_abc123
get-page returns:
name, display_name, ordinal (sort order)width, height (canvas size in pixels)display_option (e.g. "FitToPage")visual_count -- how many visuals on the pageis_hidden -- whether the page is hidden in the navigation panepage_type -- "Default" or "Drillthrough"filter_config -- page-level filter configuration (if any)visual_interactions -- custom visual interaction rules (if any)page_binding -- drillthrough parameter definition (if drillthrough page)bash# Add with display name (folder name auto-generated) pbi report add-page --display-name "Executive Overview" # Custom folder name and canvas size pbi report add-page --display-name "Details" --name detail_page \ --width 1920 --height 1080
Default canvas size is 1280x720 (standard 16:9). Common alternatives:
bash# Delete a page and all its visuals pbi report delete-page page_abc123
This removes the entire page folder including all visual subdirectories.
bash# Set a solid background colour pbi report set-background page_abc123 --color "#F5F5F5"
Control whether a page appears in the report navigation pane:
bash# Hide a page (useful for drillthrough or tooltip pages) pbi report set-visibility page_abc123 --hidden # Show a hidden page pbi report set-visibility page_abc123 --visible
Bookmarks capture page-level state (filters, visibility, scroll position). They live in definition/bookmarks/:
bash# List all bookmarks in the report pbi bookmarks list # Get details of a specific bookmark pbi bookmarks get "My Bookmark" # Add a new bookmark pbi bookmarks add "Executive View" # Delete a bookmark pbi bookmarks delete "Old Bookmark" # Toggle bookmark visibility pbi bookmarks set-visibility "Draft View" --hidden
Drillthrough pages have a pageBinding field in page.json that defines the drillthrough parameter. When you call get-page on a drillthrough page, the page_binding field returns the full binding definition including parameter name, bound filter, and field expression. Regular pages return null.
To create a drillthrough page, add a page and then configure it as drillthrough in Power BI Desktop (PBIR drillthrough configuration is not yet supported via CLI -- the CLI can read and report on drillthrough configuration).
bash# 1. Add pages in order pbi report add-page --display-name "Overview" --name overview pbi report add-page --display-name "Sales Detail" --name sales_detail pbi report add-page --display-name "Regional Drillthrough" --name region_drill # 2. Hide the drillthrough page from navigation pbi report set-visibility region_drill --hidden # 3. Set backgrounds pbi report set-background overview --color "#FAFAFA" # 4. Verify the setup pbi report list-pages
Page commands inherit the report path from the parent pbi report group:
pbi report --path ./MyReport.Report list-pages*.Report/definition/.pbip: finds sibling .Report folder from .pbip fileBy default, every write command automatically syncs Power BI Desktop. When setting up multiple pages in sequence, Desktop reloads after each one.
Use --no-sync on the report command group to batch all page changes, then call pbi report reload once at the end:
bash# Suppress sync while setting up pages pbi report --no-sync add-page --display-name "Overview" --name overview pbi report --no-sync add-page --display-name "Details" --name details pbi report --no-sync set-background overview --color "#F2F2F2" pbi report --no-sync set-background details --color "#F2F2F2" # Single reload when all page setup is done pbi report reload
bashpbi --json report list-pages pbi --json report get-page page_abc123 pbi --json bookmarks list
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-06 | pass→pass | 12,107 | 7,360 | -39% | 1 | 1 | 0% | 2,050 | 2,407 | +17% | 0 | 0 | — |
case-01 | fail→pass | 18,514 | 4,431 | -76% | 1 | 1 | 0% | 3,383 | 2,094 | -38% | 0 | 0 | — |
case-02 | fail→pass | 17,380 | 4,037 | -77% | 1 | 1 | 0% | 3,533 | 1,964 | -44% | 0 | 0 | — |
case-03 | fail→pass | 11,210 | 3,294 | -71% | 1 | 1 | 0% | 2,051 | 1,874 | -9% | 0 | 0 | — |
case-04 | fail→pass | 12,729 | 3,719 | -71% | 1 | 1 | 0% | 2,373 | 1,885 | -21% | 0 | 0 | — |
case-05 | pass→fail | 15,149 | 13,952 | -8% | 1 | 1 | 0% | 2,784 | 4,009 | +44% | 0 | 0 | — |
case-07 | fail→pass | 10,872 | 1,747 | -84% | 1 | 1 | 0% | 1,890 | 1,466 | -22% | 0 | 0 | — |
case-08 | fail→pass | 11,669 | 1,961 | -83% | 1 | 1 | 0% | 2,132 | 1,485 | -30% | 0 | 0 | — |
case-09 | fail→pass | 10,649 | 1,724 | -84% | 1 | 1 | 0% | 1,853 | 1,535 | -17% | 0 | 0 | — |
case-10 | fail→pass | 13,237 | 2,298 | -83% | 1 | 1 | 0% | 2,432 | 1,562 | -36% | 0 | 0 | — |
case-11 | fail→pass | 13,568 | 1,884 | -86% | 1 | 1 | 0% | 2,312 | 1,548 | -33% | 0 | 0 | — |
case-12 | fail→pass | 12,211 | 3,175 | -74% | 1 | 1 | 0% | 2,050 | 1,695 | -17% | 0 | 0 | — |
case-13 | fail→pass | 13,949 | 2,309 | -83% | 1 | 1 | 0% | 2,508 | 1,585 | -37% | 0 | 0 | — |
case-14 | fail→pass | 10,733 | 1,557 | -85% | 1 | 1 | 0% | 1,862 | 1,377 | -26% | 0 | 0 | — |
case-15 | fail→pass | 10,996 | 2,416 | -78% | 1 | 1 | 0% | 1,796 | 1,502 | -16% | 0 | 0 | — |
case-16 | fail→pass | 9,763 | 2,325 | -76% | 1 | 1 | 0% | 1,574 | 1,631 | +4% | 0 | 0 | — |
case-17 | fail→pass | 8,777 | 2,793 | -68% | 1 | 1 | 0% | 1,442 | 1,665 | +15% | 0 | 0 | — |
case-18 | fail→pass | 13,602 | 3,678 | -73% | 1 | 1 | 0% | 2,312 | 1,853 | -20% | 0 | 0 | — |
case-19 | fail→pass | 9,677 | 2,456 | -75% | 1 | 1 | 0% | 1,738 | 1,686 | -3% | 0 | 0 | — |
case-20 | pass→pass | 6,097 | 1,365 | -78% | 1 | 1 | 0% | 969 | 1,423 | +47% | 0 | 0 | — |
case-21 | fail→pass | 14,687 | 2,087 | -86% | 1 | 1 | 0% | 2,849 | 1,621 | -43% | 0 | 0 | — |
case-22 | pass→pass | 6,858 | 2,339 | -66% | 1 | 1 | 0% | 1,175 | 1,509 | +28% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +77 percentage points is the difference between those two pass rates over the 22 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.