Back to Blog

Deploying Power BI Content - Pipelines, Git and What Actually Works

October 10, 2026•8 min read•Michael Ridland

Here's a scene I've watched play out in more than one Australian organisation. It's the last business day of the month. Someone in finance opens Power BI Desktop, makes a "quick fix" to a measure in the board reporting model, and hits Publish straight to the production workspace. Twenty minutes later the CFO's dashboard shows a revenue number that's off by a few million, and nobody can remember what the measure used to say.

That's what happens when there's no deployment process. It's also completely avoidable.

Microsoft's guidance on deploying content as part of content lifecycle management lays out the options for moving Power BI and Fabric content between stages. It's solid, if a bit long. This is my take on it, based on what we've set up for clients and what we've seen fail.

Why deployment deserves its own conversation

Content lifecycle management in Power BI has a few stages: plan, develop, validate, deploy, support and monitor, then retire. Deployment is the step where content moves from where it was built to where people use it.

In a lot of organisations, "deploy" means "Publish from Desktop". That's fine for personal BI. It's not fine once reports are business critical, because you lose:

  • A way to test changes before consumers see them
  • A record of what changed and who changed it
  • Any way to roll back cleanly
  • Separation between people who build and people who approve

The question isn't whether you need a deployment process. Once content matters, you do. The question is how heavy it should be.

The three main approaches

There are really three ways to deploy Power BI content properly, and they can be combined.

1. Fabric deployment pipelines

Deployment pipelines are built into the Power BI service. You set up a pipeline with stages (typically Development, Test and Production), assign a workspace to each stage, and promote content between them with a button click.

What's good about them:

  • Low barrier. A Power BI administrator or workspace owner can set one up in an afternoon. No DevOps skills required.
  • Deployment rules. You can change data source connections and parameters per stage, so Test points at the test database and Production points at production.
  • Comparison view. You can see what's different between stages before you deploy.
  • Selective deployment. Promote just the items you've changed.

What's annoying:

  • They require capacity. Workspaces need to be on Premium, PPU or Fabric capacity. That's not a problem for most mid-sized organisations any more, but it's worth checking.
  • The audit trail is thin. You get deployment history, but it's not the same as a proper version-controlled history of changes.
  • Approvals are basic. Anyone with the right permissions on the target stage can deploy. If you need formal sign-off, you'll handle it outside the tool or move to automation.

For a department that's currently publishing directly to production, deployment pipelines are the single biggest improvement for the least effort. I'd recommend them as the starting point for nearly everyone. We wrote more about getting the most out of deployment pipelines earlier this year.

2. Git integration

Fabric workspaces can connect directly to a Git repository in Azure DevOps or GitHub. Content is stored in source control as text files, using the Power BI Project (PBIP) format for reports and semantic models. Developers commit changes, and the workspace syncs from the branch.

This is a big deal, and it's the change I've been waiting years for. Before PBIP, a Power BI file was a binary PBIX blob. You could put it in source control, but you couldn't diff it, couldn't review it and couldn't merge two people's changes. Now a semantic model is a folder of TMDL files and a report is a folder of JSON. You can see exactly which measure changed in a pull request.

A common pattern we set up:

  • Each developer works in their own feature workspace connected to a feature branch
  • Changes go through a pull request to the main branch, with someone reviewing the diff
  • The development workspace syncs from main
  • A deployment pipeline promotes from development through test to production

This combines the best bits of both. Git gives you history, review and rollback. The pipeline gives you an easy promotion path with deployment rules.

The honest downsides: your BI developers now need to understand branches, commits and pull requests. For some analyst-heavy teams that's a real learning curve, and I've seen Git integration get switched off a few months later because nobody kept it up. Training matters more than tooling here. Also, not every Fabric item type supports Git integration equally well yet, so check the current support list for the items you rely on.

3. Automated deployment with Azure DevOps or GitHub Actions

The heaviest option is a full CI/CD pipeline. Your build pipeline picks up changes from the repository, runs validation, and deploys to target workspaces using the Fabric REST APIs, the XMLA endpoint, or tools like the fabric-cicd Python library and Tabular Editor's command line.

This gives you:

  • Proper approval gates. Production deployments can require sign-off from named approvers.
  • Automated testing. Run Best Practice Analyzer rules against the model, check DAX queries return expected values, fail the build if something's wrong.
  • Consistency with the rest of IT. If your software teams already deploy through Azure DevOps, BI deployments fit into the same process and the same change management.

The cost is complexity. Someone has to build and maintain those pipelines, manage service principals and their permissions, and fix things when an API changes. For a team of three BI developers, that's often more overhead than it's worth. For a central BI team managing certified enterprise content that feeds regulatory reporting, it's usually justified.

How to choose

Here's the rough guide I give clients:

Situation What I'd recommend
One or two creators, content not yet critical Publish from Desktop is fine, but keep PBIX files backed up somewhere sensible
Department with shared content and many consumers Deployment pipelines with Dev, Test and Prod
Multiple developers working on the same models Git integration plus deployment pipelines
Enterprise or regulated content Git integration plus automated CI/CD with approvals and testing

Don't jump straight to the bottom row because it sounds more professional. I've seen teams spend three months building an elaborate DevOps process for content that 20 people look at. Match the process to the risk.

Things that bite people after deployment

Deployment isn't finished when content lands in production. A few post-deployment tasks get forgotten constantly:

Refreshing the semantic model. Deploying metadata changes doesn't necessarily refresh data. If you added a column, it might be empty until the next scheduled refresh. Some teams trigger a refresh as part of the deployment automation.

Updating the app. If consumers use a Power BI app, deploying new content to the production workspace doesn't update the app automatically. Someone has to republish it. I can't count how many times a client has said "we deployed the fix but nobody can see it", and the answer is the app hasn't been updated.

Data source credentials. The first deployment of a new semantic model to a stage often needs credentials configured, and gateway connections mapped. Deployment rules help, but they don't cover everything.

Permissions on new items. New reports may not inherit the access you expect, particularly with app audiences. Check before you announce anything.

Communication. Tell consumers what changed. A two-line message in Teams saying "the margin calculation now excludes freight, here's why" prevents a week of confused emails.

Small habits that make a big difference

Beyond the tooling, a few habits separate teams that deploy confidently from teams that deploy nervously:

  • Nobody publishes directly to production. Make it a rule, and enforce it with workspace permissions. Production should only receive content via the pipeline.
  • Use parameters for connections. Server names and database names as Power Query parameters make deployment rules work properly. Hard-coded connection strings are the most common thing that breaks between stages.
  • Keep test data realistic. A test stage pointing at a database with 50 rows won't catch performance problems that appear with 50 million.
  • Write down the process. One page. Who can deploy, how, what to check afterwards. It sounds obvious, but most teams we review don't have it.

Where this is heading

Microsoft is clearly pushing toward Git-first development across all of Fabric, not just Power BI. PBIP and TMDL are becoming the default, deployment pipelines now handle more Fabric item types, and the APIs are steadily improving. If you're setting up a process today, I'd lean toward Git integration even if you start simple, because that's where the tooling investment is going.

I'd also expect AI to show up more in this process. We're already using Claude and Copilot to review TMDL diffs in pull requests, flagging measure changes that look risky or columns that got dropped. It's not a replacement for a human reviewer, but it catches the boring mistakes.

If you'd like help putting a deployment process in place that fits your team, rather than one copied from a slide deck, our Power BI consultants and Microsoft Fabric team set these up regularly. Usually the hardest part isn't the tooling. It's getting agreement on who's allowed to deploy what, and then sticking to it.