What it does
A save format for Power BI Desktop that writes the report and semantic model out as plain text files in a folder structure instead of a single binary .pbix. The semantic model is serialised as TMDL, the report as PBIR, and the whole thing is meant to sit in a Git repo and be read by humans.
Key facts
- PBIP is still in preview and has to be turned on under File > Options and settings > Options > Preview features before the save option appears.
- Saving a project produces
<name>.Report/and<name>.SemanticModel/folders, a<name>.pbippointer file and a.gitignore. Desktop only writes the.gitignoreif one doesn't already exist in that folder or a parent repo. - The default
.gitignoreexcludes**/.pbi/localSettings.jsonand**/.pbi/cache.abf— the cached data, in other words. What lands in Git is metadata, not the imported rows. - TMDL is a YAML-shaped text syntax with full parity to the Tabular Object Model, using indentation to express parent-child structure and one file per model object. Model folders break down into
tables,roles,culturesandperspectives, with root files for the database, model, relationships, expressions, data sources and DAX user-defined functions. - You can open a project from the
.pbipor fromdefinition.pbirinside a report folder. Multiple reports and models can share one project folder, so a per-report .pbip file isn't required. - Model metadata can be generated or rewritten programmatically with TOM — deserialise, edit, serialise back. This is what makes batch changes across measures or report pages practical.
- Editing files outside Desktop is supported in principle, and Tabular Editor and VS Code are named in the docs. Some files can break Desktop's ability to open the project, and Desktop will point at the offending file when it can.
- Some file schemas remain undocumented during preview and Microsoft reserves the right to change them.
When to use / skip
Use PBIP wherever the semantic model is treated as a product — an enterprise model with several developers, a review process, and someone who cares what changed between releases. Measure-level diffs and pull requests over TMDL are genuinely useful and they're the only way to get a meaningful code review of a Power BI model.
The report side is less mature than the model side. If your reason for adopting PBIP is "we want to review visual changes in a PR", set expectations low — PBIR diffs are legible but reviewing a layout change as text is not a pleasant job. And it's still preview, so anyone with a policy against preview features in production is going to make you argue for it.
Configuration decisions
- Whether the whole estate moves to PBIP or only the enterprise models. A mixed estate is normal; an undocumented mixed estate is not.
- Which tool owns the model definition — Desktop, Tabular Editor, or a script. Two tools writing the same TMDL with different conventions produces noisy diffs.
- Whether the
.gitignorestays as written. Committingcache.abfputs client data in the repo, so this one is a security decision, not a tidiness one. - Repo layout: one folder per solution, or a shared model folder with several report folders pointing at it.
- How PBIP relates to the workspace Git connection, since both produce serialised item definitions and you want one shape, not two.
Gotchas
- The
.gitignoreis only created when one doesn't already exist upstream. Drop a project into an existing repo with its own.gitignoreand the data cache can end up committed. - Hand-editing files Desktop doesn't expect will stop the project opening. Recovery is a text-editing job, not a Power BI job, and it happens on someone's deadline.
- Preview means the file schema can move. A model authored on a newer Desktop build can confuse an older one.
- Saving as PBIP doesn't retroactively give you history. The first commit is a single enormous diff and everything before it is still lost inside .pbix files.
- A semantic model that's had a write operation through XMLA can't be downloaded back as a .pbix, so "we'll just export it later and save as PBIP" isn't always available.
Consultant notes
- Position TMDL as the win, not PBIP generally. Being able to see that someone changed a measure's filter argument is the thing that sells this to a delivery manager.
- If the client is nervous about preview, the honest framing is that the format is in wide production use and Microsoft is still reserving the right to change undocumented files. Say both halves.
- Bundle the adoption with a naming and formatting convention for DAX. Text diffs expose inconsistency ruthlessly and it's better to fix that up front.
- Keep the original .pbix during migration. It costs nothing and it's the fallback when a project folder won't open.
Check whether PBIP has left preview and whether the undocumented file schemas have been published — both were still open at the last review