Excelgoodies logo +31 97 010285556

LEARN THIS HANDS ON

Power BI Reporting

. Live Online FILLING FAST
View all upcoming batches
Git, PBIP and Deployment Pipelines: Stop Overwriting Each Other’s Power BI Work

Git, PBIP and Deployment Pipelines: Stop Overwriting Each Other’s Power BI Work

You publish a fix to a measure at 16:00, someone else publishes a layout tweak at 16:05, and your change disappears. Tomorrow the dataset credentials are gone because a PBIX from someone’s desktop overwrote the workspace. Git, PBIP and deployment pipelines are the way out of this mess when a team is working on Power BI reports as a team.

This article walks through one realistic setup: a team developing a shared dataset and reports, using PBIP projects in Git for source control, and deployment pipelines for safe promotion. The goal is simple: no more silent overwrites, predictable releases, and a workflow that supports parallel work without chaos.


Scenario: The Team That Keeps Tripping Over Itself

You’ve got:

  • One Fabric/Power BI workspace used as the shared dev environment
  • A central dataset (import or DirectQuery) and 3–4 reports on top
  • 4 analysts, each with their own copy of the PBIX, all publishing directly to the same workspace

Symptoms:

  • Measures vanish: someone republishes an older PBIX with missing DAX fixes
  • Dataset changes collide: new columns or relationships disappear when another person publishes
  • Broken pipelines: deployment pipelines can’t reliably promote to test/prod because dev is constantly being overwritten from desktops

We’ll reframe this workspace into:

  • A Git-backed PBIP repository for the dataset and reports
  • A single dev workspace fed only from that repo
  • A deployment pipeline to test and production

And we’ll define how each analyst works without clobbering others.


Step 1: Move from PBIX to PBIP (Project Mode)

Why PBIP matters for teamwork

PBIX is a single binary file. Git can version it, but:

  • Merges are essentially impossible; you just pick one PBIX
  • You cannot meaningfully review changes in DAX or model metadata

PBIP (Power BI Project) represents a report or dataset as a folder with JSON metadata and separate files. As of late 2024 and onwards, PBIP is supported in Power BI Desktop (via the Power BI Project feature, which replaces the earlier "Enhanced report layout" preview) and integrates with Fabric/Power BI workspaces.

Key points about PBIP:

  • A PBIP project is a folder that contains:
    • A .pbip file (the project definition)
    • definition folder (model, report, queries as JSON and related artifacts)
    • Optional linked items (e.g. connections to existing datasets)
  • You can open PBIP projects directly in Power BI Desktop
  • Changes to measures, relationships, visuals, etc. are reflected in text-based files that Git can diff

Converting your existing PBIX

For each major artifact (shared dataset and each report):

  1. Open the PBIX in the latest Power BI Desktop (with Power BI Project mode enabled in Options if required).
  2. Use File → Save as and choose Power BI Project (.pbip).
  3. Confirm the project folder structure is created.
  4. Close and reopen from the .pbip file to ensure it loads correctly.

From now on, treat the PBIP folder as the source of truth. The PBIX is just a temporary artifact if you need one, not the master.


Step 2: Put PBIP Under Git – And Make It the Only Source of Truth

Repository layout that doesn’t fight you

Use one Git repo per logical solution. For our scenario:

powerbi-sales-analytics/
  README.md
  dataset-sales/
    dataset-sales.pbip
    definition/
      model.bim
      queries.json
      roles.json
  report-exec-summary/
    report-exec-summary.pbip
    definition/
      report.json
  report-ops-detail/
    report-ops-detail.pbip
    definition/
      report.json

Patterns that help:

  • One dataset PBIP (the shared semantic model)
  • One PBIP per report consuming that dataset
  • A clear naming convention matching workspace artifacts

Basic Git rules for the team

Write these down and enforce them:

  1. No direct PBIX publishing to shared workspaces.
  2. Every change starts from Git:
    • git pull before you open Desktop
    • git status before you publish
  3. Branch per change:
    • feature/new-measure-sales-margin
    • feature/report-layout-refresh
  4. Pull requests required for merging to main.

This doesn’t magically prevent conflicts, but it makes them visible and resolvable in Git instead of silently overwriting each other in the service.

Making DAX changes visible

With PBIP, measure changes are stored in text (typically in the model definition). Git diffs become useful:

-- Before
[Total Sales] = SUM ( 'Sales'[Amount] )

-- After
[Total Sales] = SUMX ( 'Sales', 'Sales'[Amount] )

You’ll see exactly which measures changed in a PR, instead of guessing from a binary PBIX.


Step 3: Align Workspace Artifacts With PBIP Projects

Your dev workspace should mirror your PBIP repo.

One dataset, multiple reports

In the dev workspace:

  • Dataset: Sales Analytics Dataset
  • Reports:
    • Sales Exec Summary
    • Sales Ops Detail

In Git/PBIP, names should match closely. This matters for deployment pipelines and for avoiding confusion when publishing.

Publish from PBIP, not PBIX

The publishing flow for an analyst working on the dataset:

  1. git pull on main (or your feature branch).
  2. Open dataset-sales.pbip in Desktop.
  3. Make your changes (DAX, relationships, queries).
  4. Save.
  5. Commit to your branch:
    • git commit -am "Add [Sales Margin] measure"
  6. Publish to the dev workspace from Desktop.

For reports consuming the dataset:

  1. git pull.
  2. Open the report PBIP.
  3. Confirm it is connected to the shared dataset in dev.
  4. Modify visuals.
  5. Save, commit, publish to dev.

The rule: every artifact in dev should be kept in sync with the latest version of its PBIP on the main branch.


Step 4: Bring in Deployment Pipelines – and Stop Using “Publish to Prod”

Deployment pipelines in Power BI/Fabric let you define:

  • Dev workspace
  • Test workspace
  • Prod workspace

You then promote artifacts between stages.

Why pipelines matter for teamwork

Without pipelines:

  • Anyone can publish straight to prod and overwrite everything
  • There’s no consistent way to validate changes in a test environment

With pipelines:

  • Only dev is directly published to
  • Test and prod are updated via deployment from the pipeline
  • You can compare artifacts and configuration (including connections) between stages

Basic pipeline setup for our scenario

  1. Create three workspaces:
    • Sales Analytics - Dev
    • Sales Analytics - Test
    • Sales Analytics - Prod
  2. Create a deployment pipeline and assign these workspaces to dev, test, prod.
  3. In dev, make sure you have:
    • Sales Analytics Dataset
    • Sales Exec Summary report
    • Sales Ops Detail report
  4. Use the pipeline to deploy from dev to test, then test to prod.

From this point:

  • Analysts only publish to Sales Analytics - Dev
  • Test and prod are updated via pipeline deploys, not Desktop

Handling connections and parameters across stages

If your dataset uses different data sources or parameters per environment:

  • Use parameters in Power Query for connection strings or server names
  • Use pipeline rules to map parameters or data source connections between dev/test/prod

This avoids manual edits in each workspace and reduces the risk of someone overwriting prod with dev credentials.


Step 5: Define Roles and Guardrails

Tools don’t fix process by themselves. You need clear responsibilities.

Roles in the scenario

  • Model owner:
    • Maintains the shared dataset
    • Reviews and merges changes to the model PBIP
  • Report authors:
    • Own specific reports
    • Change visuals, report-level measures, bookmarks
  • Release owner:
    • Controls deployments through the pipeline
    • Ensures dev is stable before promoting

Access control in workspaces

Use workspace roles to enforce this:

  • Dev workspace:
    • Model owner and report authors as Members or Contributors
    • Release owner as Admin
  • Test and prod workspaces:
    • Release owner as Admin
    • Others as Viewers or at most Members if needed for testing

This drastically reduces the chance that someone publishes directly to prod.


Step 6: Handling Conflicts Without Losing Work

Even with PBIP and Git, conflicts happen. The difference is that now you see them.

Typical conflict: two people edit the same measure

Flow:

  1. Analyst A changes [Total Sales] and pushes.
  2. Analyst B, on an older branch, also changes [Total Sales] and tries to merge.
  3. Git reports a conflict in the model definition file.

Resolution pattern:

  • Use Git’s diff tools to inspect both versions of the measure
  • Agree on the correct logic (team conversation, not silent overwrite)
  • Edit the conflicted file to contain the final DAX
  • Commit the resolved version

Avoiding invisible workspace overwrites

Because dev is always published from PBIP projects tracked in main:

  • If someone publishes from a local PBIX that isn’t in Git, you’ll see the discrepancy: dev workspace no longer matches main
  • You can then either roll back dev via pipeline or republish from the PBIP

It’s worth periodically checking that dev artifacts match the repo by comparing last modified times and known changes.


Step 7: A Concrete Workflow for the Team

Let’s turn this into a daily routine for our four-analyst team.

For a dataset change

  1. Create a branch: feature/add-sales-margin-measure.
  2. git pull on main.
  3. Open dataset-sales.pbip and implement the new measure.
  4. Save and test locally by publishing to dev.
  5. Validate in dev (check report visuals, refresh behaviour).
  6. Commit and push the branch.
  7. Create a pull request.
  8. Model owner reviews the DAX and impact.
  9. Merge to main.
  10. Release owner uses the pipeline to deploy dev → test → prod after any required validation.

For a report layout change

  1. Create a branch: feature/update-exec-summary-layout.
  2. git pull.
  3. Open report-exec-summary.pbip.
  4. Make layout changes (no dataset changes).
  5. Publish to dev and validate.
  6. Commit, push, PR.
  7. After review, merge and deploy via pipeline.

No one touches prod directly. No one keeps a private PBIX as the “real” version.


One Takeaway You Can Implement This Month

If you do nothing else, implement this sequence:

  1. Convert your main PBIX files to PBIP projects.
  2. Put those PBIP folders into Git with a clear repo structure.
  3. Create dev/test/prod workspaces and link them in a deployment pipeline.
  4. Ban direct publishing to test/prod; only dev can receive Desktop publishes.

Once this is in place, you’ll still have disagreements about DAX and layout, but you’ll stop losing work to silent overwrites—and that’s the foundation for a sane Power BI team environment.

Editor's Note

This article reflects the shift from ad‑hoc PBIX publishing to Git‑backed PBIP projects and deployment pipelines, particularly in teams where multiple analysts share datasets and reports in common workspaces.

Professionals who want to apply these patterns to their own data can explore Excelgoodies' Power BI Reporting programme - taught live by instructors, with certification awarded once a real project is running at work.

Insights compiled through ongoing industry research and discussions within the Excelgoodies Analytics Community.

Power BI

New

Next Batches Now Live

Power BIPower BI
SQLSQL
Power AppsPower Apps
Power AutomatePower Automate
Microsoft FabricMicrosoft Fabrics
AzureAzure Data Engineering
Explore Dates & Reserve Your Spot → Reserve Your Spot →