Yorrick Zijlstra · Maart 2026 · 10 min leestijd
Power BI is van oorsprong een single-user tool. Je opent een .pbix-bestand, maakt je wijzigingen, en slaat op. Maar zodra je met meerdere ontwikkelaars aan hetzelfde model werkt, loopt dat vast. Wie heeft de laatste versie? Wie heeft wat aangepast? En hoe merge je twee parallelle wijzigingen zonder dat je elkaars werk overschrijft?
Sinds Power BI Desktop het .pbip-formaat ondersteunt, is er een serieus antwoord: versiebeheer met Git. In combinatie met Azure DevOps Repos krijg je branching, pull requests, code reviews en een volledige wijzigingshistorie -- precies zoals software-ontwikkelaars al jaren werken.
Een .pbix-bestand is een binair ZIP-archief. Git kan daar niet mee overweg: het ziet het hele bestand als een blob, niet als losse onderdelen. Twee ontwikkelaars die tegelijk aan hetzelfde .pbix werken, kunnen hun wijzigingen niet samenvoegen. Je bent veroordeeld tot "ik was er eerst" of handmatig copy-pasten van measures en tabellen.
Dat is precies waarom Microsoft het .pbip-formaat heeft geïntroduceerd.
Een .pbip (Power BI Project) is geen enkel bestand, maar een mapstructuur met leesbare tekstbestanden. In plaats van een binaire blob krijg je losse JSON- en TMDL-bestanden (Tabular Model Definition Language) per tabel, measure, relatie en expressie.
De structuur ziet er als volgt uit:
MijnProject.pbip
MijnProject.SemanticModel/
definition/
model.tmdl
tables/
fct_Verkopen.tmdl
dim_Product.tmdl
dim_Datum.tmdl
dim_Klant.tmdl
relationships.tmdl
expressions.tmdl
definition.pbism
MijnProject.Report/
definition/
report.json
pages/
Pagina1/
visuals/
...
definition.pbir
Het cruciale verschil: elke tabel, elke measure-groep en elke relatie is een apart bestand. Als jij aan fct_Verkopen.tmdl werkt en je collega aan dim_Product.tmdl, raakt jullie werk elkaar niet.
Open Power BI Desktop en ga naar File > Options and settings > Options > Preview features. Schakel Power BI project (.pbip) save format in. Herstart Desktop.
Sla je bestand nu op via File > Save as en kies het .pbip-formaat. Je ziet dat Power BI een mapstructuur aanmaakt in plaats van een enkel bestand.
Let op: Het .pbip-formaat is op dit moment nog een preview-feature. General Availability staat gepland voor Q3 2026. Het formaat is forward-compatible: je kunt een .pbip altijd openen in een nieuwere versie van Desktop. Zorg dat je team dezelfde (of nieuwere) versie van Desktop gebruikt.
Nu je een mapstructuur hebt, kun je Git gebruiken. De setup:
Maak een nieuwe Git-repository aan in Azure DevOps (of GitHub). Clone de repo lokaal.
git clone https://dev.azure.com/jouw-org/PowerBI/_git/SalesModel
cd SalesModel
Niet alle bestanden in een .pbip-project horen in Git. Voeg een .gitignore toe:
# Power BI lokale cache
.pbi/
*.pbix
# Lokale settings
localSettings.json
# OS bestanden
.DS_Store
Thumbs.db
Kopieer je .pbip-project naar de repo-map en maak je eerste commit:
git add .
git commit -m "Initieel semantisch model: star schema met 4 dimensies"
git push origin main
Met Git kun je parallel werken op branches. Voor Power BI-projecten werkt een eenvoudige strategie het beste:
| Branch | Doel | Wie |
|---|---|---|
main |
Productie-versie van het model. Altijd stabiel. | Niemand direct, alleen via PR |
develop |
Integratietak voor lopende ontwikkeling | Alle ontwikkelaars (via PR) |
feature/* |
Individuele wijzigingen | Per ontwikkelaar |
hotfix/* |
Urgente fixes op productie | Wie nodig is |
Een typische workflow:
# Nieuwe feature starten
git checkout develop
git pull origin develop
git checkout -b feature/voortschrijdend-gemiddelde
# Werk doen in Power BI Desktop...
# Wijzigingen committen
git add MijnProject.SemanticModel/
git commit -m "Voeg 3-maands voortschrijdend gemiddelde measure toe"
# Pull request aanmaken naar develop
git push origin feature/voortschrijdend-gemiddelde
In Azure DevOps maak je vervolgens een Pull Request aan. Je collega reviewt de DAX, keurt goed, en merged naar develop.
TMDL (Tabular Model Definition Language) is de tekstrepresentatie van je semantisch model. Elke tabel krijgt een eigen .tmdl-bestand. Hier is een voorbeeld van hoe een measure eruitziet in TMDL:
table fct_Verkopen
measure 'Totale Omzet' =
SUM(fct_Verkopen[Bedrag])
formatString: #,##0
displayFolder: Financieel
measure '% Groei MoM' =
VAR HuidigeMaand = [Totale Omzet]
VAR VorigeMaand =
CALCULATE(
[Totale Omzet],
DATEADD(dim_Datum[Datum], -1, MONTH)
)
RETURN
DIVIDE(HuidigeMaand - VorigeMaand, VorigeMaand)
formatString: 0.0%
displayFolder: Financieel
Omdat dit leesbare tekst is, kan Git precies tonen wat er veranderd is. Een diff laat zien: "Er is een nieuwe measure toegevoegd" of "De formatString van Totale Omzet is gewijzigd van #,##0 naar #,##0.00".
Merge conflicts ontstaan als twee ontwikkelaars tegelijkertijd hetzelfde bestand wijzigen. Met .pbip is de kans kleiner dan met .pbix (omdat onderdelen in aparte bestanden staan), maar het kan nog steeds gebeuren.
Wanneer het misgaat: twee ontwikkelaars passen dezelfde measure aan in fct_Verkopen.tmdl.
<<<<<<< HEAD
measure 'Totale Omzet' =
SUM(fct_Verkopen[Bedrag])
formatString: #,##0.00
=======
measure 'Totale Omzet' =
SUMX(fct_Verkopen, fct_Verkopen[Aantal] * fct_Verkopen[Prijs])
formatString: #,##0
>>>>>>> feature/omzet-herberekening
Omdat TMDL leesbare tekst is, kun je dit handmatig oplossen in VS Code of een andere editor. Kies de juiste versie, verwijder de conflict-markers, en commit het resultaat.
Tip: Open het model na het oplossen van een conflict altijd even in Power BI Desktop om te verifiëren dat het correct laadt. TMDL is gevoelig voor inspringing en syntax.
De beste manier om merge conflicts te voorkomen is goede afspraken:
git pull origin develop zodat je op de laatste versie werkt.Met Azure DevOps Pipelines kun je het deployment-proces automatiseren. Wanneer een pull request naar main wordt gemerged, kan een pipeline het model automatisch publiceren naar de Power BI Service.
Een basis YAML-pipeline:
trigger:
branches:
include:
- main
pool:
vmImage: 'windows-latest'
steps:
- task: PowerShell@2
displayName: 'Installeer Tabular Editor CLI'
inputs:
targetType: 'inline'
script: |
# Download Tabular Editor 2 portable (gratis, open source)
Invoke-WebRequest -Uri "https://github.com/TabularEditor/TabularEditor/releases/latest/download/TabularEditor.Portable.zip" -OutFile "te2.zip"
Expand-Archive -Path "te2.zip" -DestinationPath "$(Agent.ToolsDirectory)/TabularEditor"
- task: PowerShell@2
displayName: 'Deploy semantic model naar Power BI Service'
inputs:
targetType: 'inline'
script: |
$tePath = "$(Agent.ToolsDirectory)/TabularEditor/TabularEditor.exe"
$modelPath = "$(Build.SourcesDirectory)/MijnProject.SemanticModel/definition"
# Deploy via Tabular Editor CLI met service principal
& $tePath `
$modelPath `
-S "powerbi://api.powerbi.com/v1.0/myorg/MijnWorkspace" `
-D "SalesModel" `
-U "app:$(SP_APP_ID)@$(TENANT_ID)" `
-P "$(SP_SECRET)" `
-O -C -R
Let op: Voor deployment via een service principal heb je een Microsoft Entra App Registration nodig met de juiste Power BI API-permissies. Sla credentials altijd op als pipeline-variabelen of in Azure Key Vault, nooit in de code zelf. Tabular Editor is de standaard tool voor TMDL-deployment.
Als je organisatie Microsoft Fabric gebruikt, is er een alternatief: Fabric Git Integration. Hiermee koppel je een Fabric workspace direct aan een Azure DevOps of GitHub repository. Wijzigingen in de workspace worden automatisch gesynchroniseerd met Git, en andersom.
Het voordeel: je hoeft niet lokaal te werken. Ontwikkelaars maken wijzigingen in de Fabric workspace, committen naar een branch, en openen een pull request -- alles vanuit de browser.
Het nadeel: je bent afhankelijk van de Fabric-omgeving en hebt minder controle over het lokale ontwikkelproces. Voor teams die gewend zijn aan lokaal werken in Desktop, is de .pbip + Git-aanpak vaak prettiger.
Het Power BI-ecosysteem rond .pbip en Git ontwikkelt zich snel. Een paar relevante updates:
1. .pbix in Git zetten
Een binair bestand in Git is zinloos. Je krijgt geen diffs, geen merges, en je repo groeit snel naar gigabytes. Gebruik altijd .pbip.
2. Alles op main werken
Zonder branches verlies je het grootste voordeel van Git: parallel werken. Zelfs als je met twee mensen bent, gebruik branches en pull requests.
3. Credentials in de repo
Connection strings, API-keys en service principal secrets horen niet in Git. Gebruik Azure Key Vault of pipeline-variabelen.
4. Conflict-markers niet opruimen
Als je een merge conflict oplost maar de <<<<<< markers laat staan, kan Power BI Desktop het bestand niet openen. Controleer altijd of het model correct laadt na een merge.
5. Geen .gitignore
Zonder .gitignore komen lokale cache-bestanden en .pbix-backups in je repo terecht. Voeg de .gitignore toe voordat je je eerste commit maakt.
YorrData helpt bij het inrichten van samenwerking op semantische modellen, van Git-setup en branching-strategie tot CI/CD pipelines en governance.
Neem contact op →Hoe volwassen is jouw Power BI omgeving?
Doe de gratis scan en ontdek in 2 minuten hoe het staat met je architectuur, governance en meer.