Pbir Format logo

Pbir Format

CommunityPopular
data-goblin
pbir-format

Format reference for Power BI Enhanced Report (PBIR) JSON schemas and patterns. Automatically invoke when the user asks about PBIR JSON structure, visual.json properties, PBIR expressions, objects vs visualContainerObjects, theme inheritance, conditional formatting patterns, extension measures, bookmarks, field references, filter formatting, query roles, PBIR page structure, report wallpaper, or any PBIR metadata format question.

Overview

Publisherdata-goblin
Repositorypower-bi-agentic-development
Skill namepbir-format
Stars
1K
Forks
149
Bundled files
122
LicenseGPL-3.0
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 122 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by data-goblin on GitHub. Read the source before you install it.

Installation

Install the Pbir Format AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/data-goblin/power-bi-agentic-development/tree/main/plugins/pbip/skills/pbir-format
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/data-goblin/power-bi-agentic-development.git /tmp/power-bi-agentic-development
mkdir -p .claude/skills
cp -r /tmp/power-bi-agentic-development/plugins/pbip/skills/pbir-format .claude/skills/pbir-format
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Pbir Format in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Pbir Format on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Pbir Format is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

PBIR Format Reference

Skill that teaches Claude about the Power BI Enhanced Report (PBIR) JSON format to read and use it. Doesn't support legacy report.json or layout report metadata. To convert from legacy to PBIR format, users have to open and save their reports in Power BI Desktop.

Follow within reason the mental model when working with reports.

Hard rule: Treat PBIR JSON as an implementation detail. Read it when schema context is useful, but make every report, visual, page, bookmark, filter, mobile-layout, and theme change through pbir. Never hand-edit, text-replace, or script writes to report JSON. If pbir cannot express a requested mutation, stop and report the capability gap instead of inventing a raw-JSON fallback.

General, critical guidance

  • Check examples: Check examples for a valid report
  • Take a backup: Make a copy of the report before modifying it
  • PBIX vs PBIP vs PBIR: Work on a local .Report folder in PBIR format. Use Power BI Desktop or pbir report convert for supported conversions; do not unzip, rezip, or patch PBIX internals. Do not work directly on PBIT files.
  • Valid JSON vs. Rendering JSON: Valid JSON does not guarantee rendering. A visual might not render if the bound field is invalid (missing, wrong table, or misspelled) in the visual.json, if the visual elements are cropped by their container, if a model performance issue causes the dax query to time out, if a model data quality issue results in (Blank) or empty values, etc. Check whether a visual rendered using tools like the chrome or chrome devTools MCP server if the report was published to Power BI, but it's often faster to just ask the user to check in Power BI Desktop or the browser.
  • Hierarchical formatting cascade: In Power BI reports, formatting is determined by the following order of operations: defaults --> Theme wildcards (*) --> Theme visualTypes --> bespoke visual.json configuration. Theme overwrites defaults, visualType overrides wildcards in themes, and visual.json overrides all theme formatting. Prefer putting as much of the formatting in the theme as possible over bespoke visual.json formatting because then changes only need to happen in one place
  • PBIR files are strict JSON: No comments allowed
  • DON'T MAKE ASSUMPTIONS: Check the Microsoft documentation and other reputable resources for context if needed, or ask the user.

Report Structure

Report.Report/
+-- .pbi/localSettings.json                # Local-only, gitignored
+-- .platform                              # Fabric Git integration
+-- definition.pbir                        # Semantic model connection (byPath or byConnection) can open this file in Power BI Desktop to open the report
+-- mobileState.json                       # PBIR-Legacy artifact only; current PBIR stores phone layout per-visual in mobile.json
+-- semanticModelDiagramLayout.json        # Model diagrams
+-- CustomVisuals/                         # Private custom visuals only
+-- definition/
|   +-- version.json                       # REQUIRED -- PBIR version
|   +-- report.json                        # REQUIRED -- report-level config, including theme, report filters, settings
|   +-- reportExtensions.json              # Extension measures and visual calculations (report- and visual-level DAX)
|   +-- pages/
|   |   +-- pages.json                     # Page order, active page
|   |   +-- [PageName]/                    # Power BI Desktop may generate names with spaces; recommend no spaces for human-authored names
|   |       +-- page.json                  # Page-level properties, including size, background, filters
|   |       +-- visuals/
|   |           +-- [VisualName]/
|   |               +-- visual.json        # Visual config, formatting, and field data bindings <-- most important and complex file for report dev and formatting
|   |               +-- mobile.json        # Mobile formatting of the visual (niche)
|   +-- bookmarks/                         # Bookmarks are a bad practice and should be avoided if possible!
|       +-- bookmarks.json                 # Bookmark order and groups
|       +-- [id].bookmark.json             # Individual bookmark state containing a snapshot of the report basically
+-- StaticResources/
    +-- RegisteredResources/               # Custom themes, images
        +-- [ThemeName].json               # Custom theme <-- second most important and complex file for formatting
    +-- SharedResources/BaseThemes/        # Microsoft base themes

Rules

Follow within reason the mental model when reviewing or providing feedback on reports.

Modifying a report

  1. Understand the user's request. Ask questions if necessary to clarify the business context -- focus on the business process, the users, and the model
  2. Explore the report efficiently to locate relevant pages and visuals
  3. Check the connected semantic model. For thin reports (byConnection), use fab, pbir, or te CLI tools to explore the model. For byPath, connect to the local model in Power BI Desktop. Understanding the model reveals available fields and calculation logic
  4. Identify the appropriate visuals and pages to modify. Ask the user for clarification if needed
  5. Plan modifications with the correct PBIR structure and property values

Creating a report

  1. Same workflow as modifying, except the report is generated with pbir new. Do not scaffold report JSON by hand
  2. Ensure definition.pbir is configured properly (byPath or byConnection)
  3. Use a theme.json file. Recommended: the SQLBI/Data Goblins theme
  4. Add filters with pbir add filter; see filter pane reference

Additional validation

For detailed report design guidance (layout, spacing, visual hierarchy, color, accessibility), see the pbi-report-design skill. Key rules enforced during validation:

  • Use a custom theme; push formatting to the theme over bespoke visual.json unless the user specifies otherwise
  • Visuals must not overlap; maintain equal spacing between visuals and page edges
  • Every page needs a title (textbox or background image). Ensure textboxes are tall enough to render (24-28 pt)
  • Follow the 3-30-300 rule: KPIs/cards at top, breakdowns in middle, detail at bottom. Maximum 2-3 slicers per page; use the filter pane for additional filtering
  • Prefer Deneb, Python, or R custom visuals over SVG or heavily customized core visuals -- balance elegance against technical debt
  • Use report extensions (thin report measures, visual calculations) only when model measures are not feasible
  • Centralize conditional formatting in extension or model measures referencing theme semantic colors ("bad", "good")
  • Use consistent colors to direct attention, not to decorate. Avoid pie charts beyond 5 categories
  • Sort visuals logically (typically descending by measure). Start chart axes at zero unless there is an explicit reason not to
  • Use consistent fonts. Set altText for accessibility. Name visuals descriptively (revenue_bar_chart not a1b2c3d4)
  • Eliminate redundant visuals. Consider the "Apply" button on high-cardinality slicers
  • See the Data Goblins report checklist for pre-deployment validation

What to Read for Common Tasks

TaskRead
Add or modify a visualreferences/visual-json.md -- expression syntax, field references, query roles, position, objects vs visualContainerObjects, selectors
Change formatting or colorsreferences/visual-container-formatting.md (container chrome) + references/theme.md (theme-level formatting). Prefer theme changes over bespoke visual formatting
Add conditional formattingreferences/schema-patterns/conditional-formatting.md + references/measures.md (extension measures for CF)
Add or configure filtersreferences/filter-pane.md -- all 7 filter types, default values, filter discovery
Work with the themereferences/theme.md -- inheritance, wildcards, visual-type overrides, filter pane styling, inspecting and modifying with jq
Push visual formatting to themereferences/theme.md -- preview and promote reusable formatting with pbir theme push-visual
Change page layout/backgroundreferences/page.md -- dimensions, background, wallpaper, visualInteractions
Create a tooltip pagereferences/page.md -- tooltip page setup (type, size, visibility) + visualTooltip opt-in on visuals
Create a drillthrough pagereferences/page.md -- drillthrough filter in page filterConfig
Change report settingsreferences/report.md -- themeCollection, resourcePackages, settings, outspacePane
Add extension measuresreferences/measures.md -- reportExtensions.json structure, DAX patterns, referencing
Add annotations / metadatareferences/annotations.md -- custom name-value metadata on reports, pages, and visuals for deployment scripts, documentation, and external tooling
Add images or SVGsreferences/images.md -- RegisteredResources, base64 in themes, SVG measures
Add or modify textboxesreferences/textbox.md -- paragraphs, textRuns, textStyle
Sort a visualreferences/sort-visuals.md -- sortDefinition inside query
Sync slicers across pagesreferences/visual-json.md -- syncGroup (groupName, fieldChanges, filterChanges)
Edit visual interactionsreferences/visual-json.md + references/page.md -- visualInteractions in page.json (NoFilter, Filter, Highlight)
Change table/matrix column widthsreferences/visual-json.md -- columnWidth with metadata selector
Group visualsreferences/visual-json.md -- visualGroup, parentGroupName, groupMode
Hide visuals or fieldsreferences/visual-json.md -- isHidden at root level, query projection control
Format chart elements (labels, markers, lines)references/visual-json.md -- labels, markers, lineStyles, dataPoint
Add analytics lines (reference, trend, error, forecast)references/visual-json.md -- y1AxisReferenceLine, trend, error, forecast
Work with bookmarksreferences/bookmarks.md -- bookmark state, filter snapshots, visual show/hide
Find model fieldsreferences/semantic-model/finding-fields.md -- pbir model, te, fab commands
Rebind to different modelreferences/semantic-model/report-rebinding.md -- byPath vs byConnection conversion
Understand schema versionsreferences/schemas.md -- all schema types and current versions
Validate or check conformancereferences/validation.md -- conformance dimensions, pbir validate categories, name and required-field rules, audit and discovery commands
Understand how visuals generate DAX queriesreferences/semantic-model/inferring-queries-from-visuals.md -- visual metadata → SUMMARIZECOLUMNS mapping, data roles, IGNORE() context
Build or verify DAX query patternsreferences/semantic-model/model-queries.md -- SUMMARIZECOLUMNS patterns, ROW(), query execution methods
Rename a table or field across a reportreferences/how-to/fix-broken-field-references.md -- complete pbir fields replace / replace-table workflow
Fix broken field references after model changesreferences/how-to/fix-broken-field-references.md -- diagnosis, repair workflow for renamed/moved/removed fields, slicer value pitfalls
Convert legacy report.json to PBIR formatreferences/how-to/convert-legacy-to-pbir.md -- format differences, step-by-step conversion, projections-to-queryState mapping, validation
Understand reportExtensions.json schemareferences/report-extensions.md -- file schema structure, entities, visual calculations; see references/measures.md for DAX authoring patterns
Set dynamic (measure-driven) alt textreferences/visual-container-formatting.md -- altText as a Measure expression under visualContainerObjects.general
Add a dynamic text run to a textboxreferences/textbox.md -- measure-bound textRuns; round-trip from Desktop required
Understand drill-down cross-filter behaviorreferences/visual-json.md -- drillFilterOtherVisuals vs visualInteractions
Register a custom visual (AppSource, org-store, private .pbiviz)references/report.md -- publicCustomVisuals, organizationCustomVisuals, resourcePackages
Understand schema version couplingreferences/schemas.md -- parent/embedded schema sets, copying fragments between reports
Set up mobile (phone) layoutreferences/pbir-structure.md -- mobile.json per-visual, coordinate space, git hygiene
Git hygiene for a PBIR projectreferences/pbir-structure.md -- what to track, ignore, and leave to Desktop

definition.pbir

A report must be connected to a semantic model. There are two ways to do this:

  • byPath -- Local PBIP reference/thick report: {"byPath": {"path": "../Model.SemanticModel"}} (schema 2.0.0)
  • byConnection -- Remote/thin report: {"byConnection": {"connectionString": "Data Source=powerbi://..."}} (schema 2.0.0)

Related Skills

  • pbip -- PBIP project operations: rename cascades, project forking, report JSON patterns
  • tmdl -- TMDL file format, authoring, and editing

References

Fetching Docs: To retrieve current Power BI developer/report format docs, use microsoft_docs_search + microsoft_docs_fetch (MCP) if available, otherwise mslearn search + mslearn fetch (CLI). Search based on the user's request and run multiple searches as needed to ensure sufficient context before proceeding.

Examples:

  • examples/K201-MonthSlicer.Report/ -- Real PBIR report with 7 visual types (slicer, advancedSlicerVisual, kpi, lineChart, scatterChart, tableEx, textbox), extension measures, bookmarks, conditional formatting
  • examples/visuals/ -- 54 standalone visual.json examples; see examples/visuals/__index.md for a catalog. Split into default/ (minimal, theme-only) and formatted/ (bespoke formatting, conditional formatting, gradients, filters)

Core references:

  • references/visual-json.md -- visual.json: expressions, field refs, query roles, position, objects vs vCO, selectors, sorting, filters, drill-down propagation
  • references/desktop-bridge.md -- Verifying PBIR edits on the canvas via pbir desktop reload + screenshot; preview setting; locating the open PBIP
  • references/pbir-structure.md -- PBIR folder structure, mobile.json storage mechanics, git hygiene
  • references/schemas.md -- Schema versions, URLs, and embedded schema coupling
  • references/validation.md -- Conformance dimensions and how to validate (schema, names and ids, required fields, fields, enums, roles, layout, theme, semantic); pbir validate categories; audit and discovery commands
  • references/enumerations.md -- Valid property enumerations
  • references/version-json.md -- version.json format (concise)
  • references/platform.md -- .platform file format (concise)
  • references/bookmarks.md -- Bookmark structure and state snapshots

Formatting & expressions:

  • references/theme.md -- Theme wildcards, inheritance, color system, filter pane styling, visual-type overrides, and the corresponding pbir theme commands
  • references/schema-patterns/ -- Expressions, selectors, conditional formatting, visual calculations
  • references/visual-container-formatting.md -- objects vs visualContainerObjects deep-dive; dynamic (measure-driven) altText
  • references/measures-vs-literals.md -- When to use measure expressions vs literal values
  • references/measures.md -- Extension measure patterns

Visual & page configuration:

  • references/textbox.md -- Textbox visual format; dynamic (measure-bound) text runs
  • references/page.md -- Page configuration and backgrounds
  • references/report.md -- Report-level settings; custom visual registration (AppSource, org-store, private .pbiviz)
  • references/wallpaper.md -- Report wallpaper/canvas background
  • references/filter-pane.md -- Filter pane formatting
  • references/sort-visuals.md -- Visual sort configuration
  • references/images.md -- Static images, base64 in themes, SVG measures
  • references/report-extensions.md -- reportExtensions.json format
  • references/annotations.md -- Custom metadata on reports, pages, and visuals

Semantic model integration:

  • references/semantic-model/ -- Field references, model structure, report rebinding, query inference

How-to guides:

  • references/how-to/ -- Advanced conditional formatting, SVG in visuals, fix broken field references, convert legacy to PBIR

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

and 62 more files.

Frequently asked questions

What does the Pbir Format AI skill do?

Format reference for Power BI Enhanced Report (PBIR) JSON schemas and patterns. Automatically invoke when the user asks about PBIR JSON structure, visual.json properties, PBIR expressions, objects vs visualContainerObjects, theme inheritance, conditional formatting patterns, extension measures, bookmarks, field references, filter formatting, query roles, PBIR page structure, report wallpaper, or any PBIR metadata format question.

Why use Pbir Format on TypingMind?

Because you install it once and use it with any model. Pbir Format is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Pbir Format in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/data-goblin/power-bi-agentic-development/tree/main/plugins/pbip/skills/pbir-format. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Pbir Format?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Pbir Format?

As many as you like. As long as a model supports skills, you can use Pbir Format with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Pbir Format AI skill free?

Yes. It is published on GitHub by data-goblin under the GPL-3.0 license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇