From powerbi
Scaffolds a complete Power BI Desktop Project (PBIP) directory structure, assembles TMDL and report artifacts, validates the project integrity, and creates a distributable zip archive. Use this skill when all semantic model and report files are ready and need to be packaged into a valid PBIP. This is Stage 4 of the query-to-pbip pipeline.
How this skill is triggered — by the user, by Claude, or both
Slash command
/powerbi:project-packagerThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Scaffold, assemble, validate, and zip a Power BI Desktop Project (PBIP). This skill takes the TMDL files from the semantic mapper and the report files from the visual generator and packages them into a complete PBIP directory structure that can be opened in Power BI Desktop.
Scaffold, assemble, validate, and zip a Power BI Desktop Project (PBIP). This skill takes the TMDL files from the semantic mapper and the report files from the visual generator and packages them into a complete PBIP directory structure that can be opened in Power BI Desktop.
.zip) ready for distributionThe official Microsoft PBIP format (with TMDL semantic model and PBIR report format):
<ProjectName>/
├── <ProjectName>.pbip # Project entry point
├── .gitignore # Excludes local settings and cache
├── <ProjectName>.SemanticModel/
│ ├── .platform # Fabric Git integration (type: SemanticModel)
│ ├── definition.pbism # Semantic model pointer (version 4.2 for TMDL)
│ ├── diagramLayout.json # Model diagram layout (optional)
│ ├── .pbi/
│ │ └── editorSettings.json # Editor configuration
│ └── definition/
│ ├── database.tmdl # Database name + compatibility level
│ ├── model.tmdl # Model configuration
│ ├── relationships.tmdl # Table relationships
│ ├── cultures/
│ │ └── en-US.tmdl # Culture/locale definition
│ └── tables/
│ ├── fact_sales.tmdl
│ ├── dim_customer.tmdl
│ └── ...
└── <ProjectName>.Report/
├── .platform # Fabric Git integration (type: Report)
├── definition.pbir # Report pointer (version 4.0, references SemanticModel)
├── StaticResources/
│ └── SharedResources/
│ └── BaseThemes/
│ └── CY25SU11.json # Default Power BI theme
└── definition/
├── report.json # Report-level configuration (schema 3.1.0)
├── version.json # Report format version metadata
└── pages/
├── pages.json # Page ordering and active page
└── <pageId>/ # 20-char hex page identifier
├── page.json # Page definition (schema 2.0.0)
└── visuals/
├── <visualId>/ # 20-char hex visual identifier
│ └── visual.json # Visual definition (schema 2.5.0)
└── <visualId>/
└── visual.json
Create the full directory hierarchy. Use scripts/scaffold_pbip.py from the query-to-pbip skill:
python scaffold_pbip.py <ProjectName> --output <output-dir>
This generates all directories, pointer files, .platform files, and stub report files.
<ProjectName>.pbip — Project entry point:
{
"$schema": "https://developer.microsoft.com/json-schemas/fabric/pbip/pbipProperties/1.0.0/schema.json",
"version": "1.0",
"artifacts": [
{
"report": {
"path": "<ProjectName>.Report"
}
}
],
"settings": {
"enableAutoRecovery": true
}
}
definition.pbism — Semantic model pointer (in <ProjectName>.SemanticModel/):
{
"$schema": "https://developer.microsoft.com/json-schemas/fabric/item/semanticModel/definitionProperties/1.0.0/schema.json",
"version": "4.2",
"settings": {}
}
Version 4.2 indicates the semantic model definition is stored as TMDL in the definition/ folder.
definition.pbir — Report pointer (in <ProjectName>.Report/):
{
"$schema": "https://developer.microsoft.com/json-schemas/fabric/item/report/definitionProperties/2.0.0/schema.json",
"version": "4.0",
"datasetReference": {
"byPath": {
"path": "../<ProjectName>.SemanticModel"
}
}
}
Version 4.0 indicates the report definition is stored in PBIR format in the definition/ folder.
Each item folder (SemanticModel and Report) requires a .platform file for Fabric Git integration:
{
"$schema": "https://developer.microsoft.com/json-schemas/fabric/gitIntegration/platformProperties/2.0.0/schema.json",
"metadata": {
"type": "SemanticModel",
"displayName": "<ProjectName>"
},
"config": {
"version": "2.0",
"logicalId": "<generated-guid>"
}
}
The type field is "SemanticModel" or "Report" depending on the folder. The logicalId is a unique GUID.
definition/report.json — Report configuration:
{
"$schema": "https://developer.microsoft.com/json-schemas/fabric/item/report/definition/report/3.1.0/schema.json",
"themeCollection": {
"baseTheme": {
"name": "CY25SU11",
"reportVersionAtImport": {
"visual": "2.4.0",
"report": "3.0.0",
"page": "2.3.0"
},
"type": "SharedResources"
}
},
"resourcePackages": [
{
"name": "SharedResources",
"type": "SharedResources",
"items": [
{
"name": "CY25SU11",
"path": "BaseThemes/CY25SU11.json",
"type": "BaseTheme"
}
]
}
],
"settings": {
"useStylableVisualContainerHeader": true,
"exportDataMode": "AllowSummarized",
"defaultDrillFilterOtherVisuals": true,
"allowChangeFilterTypes": true,
"useEnhancedTooltips": true,
"useDefaultAggregateDisplayName": true
}
}
definition/version.json:
{
"$schema": "https://developer.microsoft.com/json-schemas/fabric/item/report/definition/versionMetadata/1.0.0/schema.json",
"version": "2.0.0"
}
definition/pages/pages.json — Page ordering:
{
"$schema": "https://developer.microsoft.com/json-schemas/fabric/item/report/definition/pagesMetadata/1.0.0/schema.json",
"pageOrder": ["<pageId>"],
"activePageName": "<pageId>"
}
Copy files from previous pipeline stages into the correct locations:
| Source | Destination |
|---|---|
database.tmdl | <ProjectName>.SemanticModel/definition/database.tmdl |
model.tmdl | <ProjectName>.SemanticModel/definition/model.tmdl |
relationships.tmdl | <ProjectName>.SemanticModel/definition/relationships.tmdl |
tables/*.tmdl | <ProjectName>.SemanticModel/definition/tables/ |
visual.json (per visual) | <ProjectName>.Report/definition/pages/<pageId>/visuals/<visualId>/visual.json |
Run validation to ensure project integrity:
python package_pbip.py <ProjectDir> --validate-only
Validation checks:
.pbip, .pbism, .pbir, database.tmdl, model.tmdl all exist.pbir references the correct .SemanticModel path4.x for TMDL format.platform exists in both SemanticModel and Reportdefinition/report.json and definition/version.json existpages.json exists, at least one page directory with page.jsonvisual.json.tmdl file in tables/Package the validated project into a zip archive:
python package_pbip.py <ProjectDir> --output <ProjectName>.zip
The zip excludes .pbi/localSettings.json and .pbi/cache.abf (local-only files).
| File Type | Encoding | Indentation | Line Endings |
|---|---|---|---|
.tmdl | UTF-8 (no BOM) | Tab | LF |
.json | UTF-8 (no BOM) | 2 spaces | LF |
.pbip, .pbism, .pbir, .platform | UTF-8 (no BOM) | 2 spaces | LF |
Before delivering the PBIP:
<ProjectName>.pbip is present in root.gitignore exists — Excludes .pbi/localSettings.json and .pbi/cache.abf.platform, definition.pbism (v4.2), database.tmdl, model.tmdl all exist.tmdl file in tables/cultures/en-US.tmdl existsrelationships.tmdl is present (even if empty).platform, definition.pbir (v4.0), definition/report.json, definition/version.jsonpages.json with at least one page ID, matching page directory with page.jsonvisual.json in a visual subdirectory.pbir → ../<ProjectName>.SemanticModel| Error | Resolution |
|---|---|
| Missing TMDL files from Stage 1 | Report which files are missing; do not create zip |
| Missing visual.json files from Stage 3 | Report which files are missing; do not create zip |
| Pointer path mismatch | Auto-correct the path based on project name |
| Empty tables directory | Warn but allow packaging (model may have no dimensions) |
| Missing .platform files | Generate them with new GUIDs |
| PBISM version mismatch | Update to version 4.2 for TMDL format |
To use the generated PBIP:
<ProjectName>.pbip in Power BI Desktop (June 2023 or later with PBIP preview enabled)npx claudepluginhub bcastelino/powerbi-dashboard-generator --plugin powerbi-dashboard-generatorSearches MemPalace before answering questions about past work, people, projects, or prior decisions. Returns verbatim stored content instead of guessing from model memory.
Guides Payload CMS config (payload.config.ts), collections, fields, hooks, access control, APIs. Debugs validation errors, security, relationships, queries, transactions, hook behavior.
Implements vector databases with Pinecone, Weaviate, Qdrant, Milvus, pgvector for semantic search, RAG, recommendations, and similarity systems. Optimizes embeddings, indexing, and hybrid search.