PBIP Project Skill
This skill helps create and manage Power BI Desktop Project (PBIP) structure for source control-friendly Power BI development.
When to Use This Skill
- •Starting a new Power BI project from scratch
- •Converting an existing concept into a PBIP structure
- •Setting up the folder structure for semantic models and reports
- •Creating pointer files (
.pbip,.pbism,.pbir) - •Configuring project-level settings
PBIP Project Structure
A complete PBIP project has this structure:
code
<ProjectName>.pbip # Project pointer file
├── <ProjectName>.SemanticModel/ # Semantic model folder
│ ├── definition.pbism # Semantic model pointer
│ ├── model.bim # Model metadata (auto-generated)
│ └── definition/ # TMDL files
│ ├── database.tmdl
│ ├── model.tmdl
│ ├── relationships.tmdl
│ ├── tables/
│ │ └── <TableName>.tmdl
│ └── expressions.tmdl
├── <ProjectName>.Report/ # Report folder
│ ├── definition.pbir # Report pointer
│ ├── report.json # Report configuration
│ └── definition/ # Report definition files
│ ├── pages/
│ │ └── <PageId>/
│ │ └── page.json
│ └── ...
└── .pbi/ # Local settings (gitignored)
└── localSettings.json
Creating a New PBIP Project
Step 1: Create the Project Pointer File
Create <ProjectName>.pbip:
json
{
"version": "1.0",
"artifacts": [
{
"report": {
"path": "<ProjectName>.Report"
}
}
],
"settings": {
"enableAutoRecovery": true
}
}
Step 2: Create the Semantic Model Folder
Create <ProjectName>.SemanticModel/definition.pbism:
json
{
"version": "1.0",
"datasetReference": {
"byPath": null,
"byConnection": null
}
}
Step 3: Create Core TMDL Files
Create <ProjectName>.SemanticModel/definition/database.tmdl:
tmdl
database '<ProjectName>' compatibilityLevel: 1567
Create <ProjectName>.SemanticModel/definition/model.tmdl:
tmdl
model Model culture: en-US defaultPowerBIDataSourceVersion: powerBI_V3 discourageImplicitMeasures: true sourceQueryCulture: en-US
Step 4: Create the Report Folder
Create <ProjectName>.Report/definition.pbir:
json
{
"version": "1.0",
"datasetReference": {
"byPath": {
"path": "../<ProjectName>.SemanticModel"
},
"byConnection": null
}
}
Create <ProjectName>.Report/report.json:
json
{
"$schema": "https://developer.microsoft.com/json-schemas/fabric/item/report/definition/report/1.0.0/schema.json",
"themeCollection": {
"baseTheme": {
"name": "CY24SU06",
"reportVersionAtImport": "5.55",
"type": "SharedResources"
}
},
"config": {
"version": 5,
"defaultDrillFilterOtherVisuals": true
},
"objects": {}
}
File Format Requirements
Encoding
- •All text files MUST be UTF-8 without BOM
- •JSON files use 2-space indentation
- •TMDL files use tab indentation
Line Endings
- •Use LF (Unix-style) line endings for cross-platform compatibility
- •Configure
.gitattributesfor consistent line endings:
code
*.tmdl text eol=lf *.json text eol=lf *.pbip text eol=lf *.pbism text eol=lf *.pbir text eol=lf
Git Configuration
Recommended .gitignore
code
# Local Power BI settings (contains user-specific paths) .pbi/ **/localSettings.json # Cache files *.abf **/cache.abf # Temporary files *.tmp ~$*
Recommended .gitattributes
code
# Ensure consistent line endings *.tmdl text eol=lf *.json text eol=lf *.pbip text eol=lf *.pbism text eol=lf *.pbir text eol=lf # Treat binary files appropriately *.abf binary *.pbix binary
Naming Conventions
| Item | Convention | Example |
|---|---|---|
| Project name | PascalCase | SalesAnalytics |
| Folder names | Match project name | SalesAnalytics.SemanticModel |
| TMDL files | lowercase with hyphens | date-table.tmdl |
| Page folders | GUID format | ReportSection1a2b3c4d |
Boundaries and Constraints
DO
- •Always create files with UTF-8 encoding (no BOM)
- •Always include
compatibilityLevelin database.tmdl - •Always set
discourageImplicitMeasures: truein model.tmdl - •Create
.gitignoreto exclude local settings - •Use relative paths in pointer files
DO NOT
- •Never modify
.pbi/localSettings.json- this is user-specific - •Never commit
cache.abffiles - •Never hardcode absolute file paths
- •Never include credentials in source files
Workflow Integration
After creating the project structure:
- •Add tables - Use the
semantic-modelskill to add tables and relationships - •Add measures - Use the
daxskill to create measures - •Create visuals - Use the
report-visualsskill to build reports - •Validate - Use the
best-practicesskill to check quality
Opening in Power BI Desktop
- •Open Power BI Desktop
- •File > Open report
- •Select the
.pbipfile - •Power BI will load the project from source files
Common Issues
"Cannot find semantic model"
- •Verify the path in
definition.pbirpoints to the correct semantic model folder - •Ensure
definition.pbismexists in the semantic model folder
"Invalid TMDL syntax"
- •Check for proper indentation (tabs for TMDL)
- •Verify quotes match the expected style (single quotes for identifiers)
- •Ensure compatibility level is supported
"Report won't load"
- •Check that
report.jsonhas valid JSON syntax - •Verify the schema reference is correct
- •Ensure page folders contain valid
page.jsonfiles