Blogs  |
27 mei 2026
Word master van je Power BI Refreshes: alles wat je moet weten over semantische modellen en refreshes in Microsoft Fabric
Optimaliseer je Power BI refreshes met slimme instellingen, gateways en incremental refresh voor actuele en betrouwbare rapportages.

En dan… je refresh faalt. 😬

Je opent de Fabric Monitor op een doordeweekse ochtend. Twee rijen. Eén groen vinkje, één rood kruis. Het refreshen van het Centraal Datamodel heeft gefaald — en niemand weet precies waarom.

Herkenbaar? Voor veel organisaties die werken met PowerBI en semantische modellen is dit een alledaags tafereel. En toch wordt er verrassend weinig aandacht besteed aan één van de meest kritische processen in je data-omgeving: het refreshen van je semantische modellen.

In deze blog neem ik je mee onder de motorkap van een Semantic Model refresh. We kijken naar wat er technisch gebeurt, waar het fout gaat, waarom het in het tijdperk van Microsoft Fabric nóg belangrijker is geworden om dit goed in te richten — en hoe je stap voor stap een robuust refresh mechanisme opbouwt.

Dit blog is geschreven door Anino Loche en verscheen eerder op zijn LinkedIn.

Waarom Power Bi Refreshes ook jóuw probleem is

Een semantisch model is niet zomaar een technisch artefact. Het is de ruggengraat van je rapportageomgeving. Het bevat je bedrijfsdata, je KPI’s, je beveiligingsregels. Elke dashboard, elk rapport, elke AI-toepassing die gebouwd wordt op PowerBI staat of valt bij de kwaliteit en versheid van dit model.

Wanneer een refresh faalt, zijn de gevolgen direct voelbaar:

  • Dashboards tonen verouderde of incomplete data
  • Beslissingen worden gemaakt op onjuiste inzichten
  • IT-teams worden ’s ochtends wakker met foutmeldingen die ze niet altijd direct kunnen duiden
  • In het ergste geval: rapportages die volledig leeg zijn door RLS-problemen of gebroken verbindingen

Met de introductie van Microsoft Fabric is er een nieuwe dimensie bijgekomen: Capacity Units (CU). Fabric werkt op basis van een gedeeld capaciteitsmodel. Elke refresh, elke query, elke bewerking verbruikt CU’s. Een slecht geconfigureerd refresh proces kan letterlijk je hele capaciteit overbelasten — met vertragingen en throttling voor alle gebruikers op je platform als gevolg.

Kort gezegd: een inefficiënt refresh mechanisme kost geld en schaadt de betrouwbaarheid van je data-omgeving. Dat is een businessrisico, geen technisch detail.

Wat er écht gebeurt als je op ‘Refresh’ klikt

Voor de data consultants die willen begrijpen hoe het werkt

Oké, laten we eerlijk zijn — als je op die refresh-knop klikt, denk je er misschien niet zo veel bij na. Maar er gebeurt achter de schermen heel wat! Laten we eens kijken wat er onder de motorkap van een import semantisch model afspeelt.

 

De 6 stappen van een refresh

Een refresh van een import semantisch model verloopt via de volgende stappen:

  1. Initiatie — De refresh wordt gestart via een scheduled trigger, on-demand of een API/XMLA-aanroep.
  2. Data ophalen — Er wordt verbinding gemaakt met de databron: SQL, OData, API, Lakehouse, Dataflows.
  3. Power Query transformaties — De M-queries worden uitgevoerd in de mashup engine.
  4. VertiPaq laden — De data wordt gecomprimeerd, geëncodeerd en geïndexeerd.
  5. DAX berekeningen — Calculated columns en calculated tables worden berekend.
  6. Commit / Swap — Het nieuwe model vervangt het oude model in het geheugen.

Elk van deze stappen heeft zijn eigen risico’s. En dat brengt ons bij de vraag die iedere PowerBI ontwikkelaar vroeg of laat stelt:

🔥 Waar gaat het vaak mis?

De meest voorkomende problemen bij het refreshen van semantische modellen vallen in zes categorieën:

  • Credentials & Connectiviteit — Verlopen of gewijzigde credentials (wachtwoorden, MFA, service accounts), een gateway die offline, verouderd of verkeerd geconfigureerd is, of schemawijzigingen in de brondata waarbij kolommen hernoemd of verwijderd zijn.
  • Performance — Een model dat te groot is voor het geheugen, Power Query stappen die de refresh vertragen, of berekende kolommen die de refreshtijd en het geheugengebruik verhogen.
  • Refresh Configuratie — Incorrecte of kapotte incrementele refresh configuratie, overlappende refreshes, of RLS-problemen die leiden tot lege visuals of toegangsproblemen.
  • Governance & Monitoring — Geen monitoring of alerts bij refresh failures, onduidelijk eigenaarschap en slechte documentatie die onderhoud risicovol maakt.
  • Parallelle conflicten — Twee refreshes tegelijk op hetzelfde model.
  • CU throttling — De capacity is overbelast door te veel refreshes.

Laten we de belangrijkste dieper induiken.

🔑 Credential issues

Bij credential issues draait het om het juist instellen van de Authentication Type. Maak gebruik van workspace identities, service principals, etc. Gebruik gateways alleen indien nodig, en richt autorisaties in met security groups.

Een veelgemaakte fout is dat een semantisch model geconfigureerd staat onder de persoonlijke credentials van een individuele medewerker. Zodra diegene van rol wisselt, MFA-instellingen wijzigen of het account verloopt — faalt de refresh. De oplossing: gebruik service principals of workspace identities en leg dit vast in security groups op verbindingsniveau.

💾 Memory pressure: de stille killer

Dit is één van de meest onderschatte problemen. Tijdens een refresh heeft Power BI tijdelijk meer dan twee keer de modelgrootte aan geheugen nodig: het bestaande model blijft beschikbaar voor gebruikers, terwijl het nieuwe model opgebouwd wordt. Hier door krijg je dus eigenlijk twee keer je model naast elkaar in het geheugen. Maar dat is nog niet alles. Het model heeft ook nog gebruikers die aan het querien zijn. Ook deze queries kosten memory. Zo kan een model wat stil staan 10GB kost in eens bijna 25GB kosten tijdens het verversen.

De veelvoorkomende oorzaken van memory druk tijdens een refresh zijn:

  • Te groot model — Er is meer dan 2x de modelgrootte nodig tijdens de refresh.
  • Hoge kardinaliteit — Kolommen met veel unieke waarden resulteren in grote dictionaries.
  • Calculated columns — DAX calculated columns worden in-memory berekend; zet deze naar je goud laag.

In Fabric gelden per SKU strikte geheugenlimieten per model. Wanneer het geheugen de limiet overschrijdt, geeft het systeem een foutmelding: de operatie wordt geannuleerd omdat er onvoldoende geheugen was om de bewerking te voltooien.

 

⏱️ Waarom duurt mijn refresh zo lang?

Een refresh die te lang duurt kan meerdere oorzaken hebben die op verschillende plekken in het proces zitten:

  • Bij Data ophalen — De bron reageert traag of de query is niet geoptimaliseerd.
  • Bij Power Query transformaties — Zware M-transformaties of te veel stappen in de mashup engine.
  • Bij VertiPaq laden — Grote tabellen met hoge kardinaliteit kosten veel tijd bij het comprimeren.
  • Bij DAX berekeningen — Complexe calculated columns die voor elke rij opnieuw berekend worden.

De oplossing? Breng berekeningen zo ver mogelijk upstream — naar je goud laag — zodat Power Query en DAX calculated columns / tables zo min mogelijk hoeft te doen.

🆕 Waarom refreshen belangrijker is dan ooit: het verhaal van de CU

Met de komst van Microsoft Fabric is er een compleet nieuw kostenmodel geïntroduceerd dat directe impact heeft op hoe je refreshes inricht.

 

Wat is een CU?

1 CU staat gelijk aan het gebruik van 2 vCores. 1 CU(s) staat voor het gebruik van 2 vCores gedurende 1 seconde. Een F2-capaciteit heeft 4 vCores en 2 CU per seconde beschikbaar. Over een hele dag (86.400 seconden) geeft dat een totaal van 172.800 CU(s) per dag. Een F64-capaciteit heeft 128 vCores en 64 CU per seconde beschikbaar — goed voor 5.529.600 CU(s) per dag.

 

CU-verbruik: Full vs. Incremental Refresh

Het CU-verbruik tijdens een refresh is aanzienlijk: een Full Refresh verbruikt hoog CU, omdat 100% van de data opnieuw geladen wordt. Een Incremental Refresh verbruikt beduidend minder, omdat slechts circa 20-30% van de data ververst wordt.

Dit verschil is enorm. Als je een groot model elke nacht volledig ververst, eet dat een significant deel van je dagelijkse CU-budget op. Bij CU-throttling worden alle processen op je capacity vertraagd — niet alleen jouw refresh, maar ook de queries van je eindgebruikers.

De conclusie: Slecht geconfigureerde refreshes zijn in Fabric geen technisch ongemak meer — ze zijn een directe kostenpost en een risico voor de beschikbaarheid van je platform.

 

🛠️ Hoe richt je een goed refresh mechanisme in?

Het inrichting van een goed en volledig refresh mechanisme gaat altijd volgens dezelfde stappen:

 

  1. ANALYSEER — Start met VertiPaq Analyzer. Identificeer welke kolommen het meeste geheugen verbruiken.
  2. VERKLEIN — Verwijder ongebruikte kolommen. Splits DateTime naar Date + Time. Verlaag kardinaliteit.
  3. OPTIMALISEER — Zet IsAvailableInMDX = false voor verborgen kolommen. Vervang calculated columns door Power Query of goud laag logica.
  4. ORCHESTREER — Spreid refreshes over tijd. Vermijd piekuren. Gebruik pipelines voor controle.
  5. PARTITIONEER — Implementeer incremental refresh. Partitioneer op datum, ververs alleen recente data.
  6. MONITOR — Bewaak continu met Capacity Metrics, DMV’s en Workspace Monitor.

 

Stap 1: Analyseer

Voordat je iets gaat aanpassen, moet je weten wat er aan de hand is. Begin met het in kaart brengen van de veelvoorkomende problemen: credential issues, memory pressure, te lange refresh duur, parallelle conflicten, CU throttling en schema changes.

 

Je gereedschapskist voor monitoring

Om te zien wat er écht gebeurt, heb je de juiste tools nodig: Fabric Capacity Metrics voor CU-verbruik, throttling en trends per workspace. VertiPaq Analyzer voor modelgrootte per kolom, dictionary sizes en encoding. Via DAX-Query view; info.partitions voor partitie-status en RefreshTime. Refresh History voor duur, status en foutmeldingen per dataset. Workspace Monitoring voor gedetailleerde operatie-logs.

 

Fabric Capacity Metrics

De Fabric Capacity Metrics app laat je precies zien welke datasets het meeste CU verbruiken, wanneer throttling optreedt en welke workspaces de meeste capaciteit opeisen. Onmisbaar als je serieus werk wilt maken van capaciteitsbeheer.

 

VertiPaq Analyzer

Dit gratis tool (te gebruiken via Tabular Editor of DAX Studio) geeft je een gedetailleerd inzicht in je modelgrootte op kolomniveau. Je ziet precies welke kolommen de meeste geheugenruimte innemen en waar je winst kunt behalen.

 

Workspace Monitor

De Workspace Monitor in Microsoft Fabric biedt gedetailleerde operatie-logs. Door een monitoring Eventhouse toe te voegen aan je workspace, worden alle activiteiten automatisch gelogd in een KQL-database. Zo krijg je inzicht in alle operaties — inclusief SemanticModelLogs — op gedetailleerd niveau.

Stap 2: Verklein je model

Verwijder ongebruikte kolommen, splits kolommen zoals DateTime-velden op in afzonderlijke Date en Time kolommen, en verlaag de kardinaliteit van je kolommen.

Praktische tip: Gebruik de Best Practice Analyzer in Tabular Editor om automatisch ongebruikte kolommen te detecteren. Je zult versteld staan hoeveel kolommen er in een gemiddeld model zitten die nooit gebruikt worden in visuals of measures — maar wel geheugen verbruiken bij elke refresh.

 

Stap 3: Optimaliseer je model voor een efficiënte refresh

Het verkleinen van je model is een goede start, maar optimaliseren gaat verder. Het gaat erom dat de data die wél in je model zit, zo efficiënt mogelijk opgeslagen en verwerkt wordt.

 

Verplaats berekeningen upstream

DAX calculated columns worden in-memory berekend tijdens de refresh — voor iedere rij, bij iedere refresh opnieuw. Verplaats berekeningen daarom zo ver mogelijk upstream: naar Power Query of je goud laag in het Lakehouse of Warehouse. Importeer al-berekende waarden en laat VertiPaq alleen nog comprimeren. Dit scheelt direct in refreshtijd én memory druk.PBIG – Word master van je Power BI Refreshes.pdf

 

Kies de juiste datatypes

Gebruik Date in plaats van DateTime als je de tijdcomponent niet nodig hebt, Integer in plaats van Decimal waar mogelijk, en wees spaarzaam met Text-velden. Kolommen met veel unieke waarden resulteren in grote dictionaries — hoe kleiner het domein van mogelijke waarden, hoe beter VertiPaq comprimeert.

 

Optimaliseer je modelstructuur

Werk met een ster-schema, vermijd brede feitentabellen en verwijder onnodige relaties. Een goed gestructureerd model is niet alleen beter voor query-performance, maar ook voor refresh-efficiëntie. Split waar mogelijk grote tabellen op in smallere, gerichte tabellen.

 

💡 Tip: IsAvailableInMDX = false

Zet IsAvailableInMDX = false voor verborgen kolommen om hierarchy-geheugen te besparen. Een kleine ingreep, maar zonder enige functionele impact. De Best Practice Analyzer in Tabular Editor detecteert deze kolommen automatisch voor je.

 

Stap 4: Orchestreer

Spreid refreshes over tijd, vermijd piekuren, en gebruik pipelines voor controle.

Denk na over wanneer je welke data refresht. Vaak hoef je niet alle data in het model te verversen. Kies bijvoorbeeld voor het verversen van de feiten niet de dimensies om de belasting te verlagen.

Daarnaast geld dat een refresh die om 08:00 gestart wordt — precies als alle medewerkers inloggen en queries beginnen te draaien — concurreert direct met gebruikersactiviteit om hetzelfde CU-budget. Plan je refreshes buiten piekuren en gebruik Fabric Data Pipelines om de volgorde en timing te controleren.

 

Stap 5: Partitioneer

Wat is een partitie?

Een partitie is een logische verdeling van een tabel in je semantisch model. In plaats van de volledige tabel “Verkopen” als één blok te laden, kun je deze opdelen in meerdere partities — bijvoorbeeld per jaar: 2024, 2025, 2026. 

Het grote voordeel: je kunt per partitie bepalen of en hoe vaak je deze ververst. Historische data (2 jaar geleden, 3 jaar geleden) verandert niet meer. Die hoef je dus ook niet elke nacht opnieuw te laden.

Full Refresh vs. Incremental Refresh

De keuze tussen Full en Incremental Refresh is fundamenteel:

Full Refresh:

  • Volledig model opnieuw laden
  • Simpel te configureren
  • Hoog CU-verbruik
  • 2x modelgrootte + overhead nodig

Incremental Refresh:

  • Alleen nieuwe/gewijzigde data
  • Automatisch partitie-beheer op datum
  • Minder CU-verbruik
  • Minder memory pressure

Voor gevorderde scenario’s zijn er daarnaast nog opties als Hybrid Tables (DirectQuery partitie voor real-time data), Custom Partitions en Scale-out Refresh.

 

Geavanceerde refresh opties

Er zijn meerdere manieren om je model te verversen:

  1. Optimaliseer het model zodat je memory optimaal gebruikt.
  2. Full Refresh — via scheduled refresh, handmatig of via API/XMLA.
  3. Incremental Refresh via desktop — via Power BI Desktop stel je de incremental refresh in om je tabel te verdelen in voorgeprogrammeerde partities.
  4. Pro Refresh via API — Neem de volledige controle en maak een refresh precies zoals jij hem nodig hebt.
  5. Pro Refresh via Semantic-link (labs) — Volledige controle via Python code in een Fabric Notebook.
  6. Advanced Refresh via pipeline — Gebruik een Fabric Data Pipeline voor één of meerdere tabellen/partities.

 

Moet ik wel alle tabellen verversen?

Nee! Dit is een cruciale inzicht die veel organisaties missen. Dimensietabellen (klanten, artikelen, leveranciers) veranderen veel minder frequent dan feitentabellen (verkopen, transacties). Door slim onderscheid te maken:

  • Dimensies → volledige verversing, maar minder frequent
  • Feiten → partitioneer op datum en ververs alleen recente partities

Met Advanced Refresh via een Fabric Notebook (Semantic Link Labs) kun je dit heel precies orchestreren: dimensies worden 1x per dag volledig ververst, terwijl de partitie van het huidige jaar en vorig jaar elke 10 minuten ververst wordt, en oudere partities slechts 1x per week.

Stap 6: Monitor continu

Bewaak je refresh omgeving continu met Capacity Metrics, info.partitions() en de Workspace Monitor. Stel alerts in bij failures, leg eigenaarschap vast en documenteer je refresh architectuur. Een refresh failure die om 03:00 ’s nachts optreedt en pas om 09:00 ontdekt wordt, kost je organisatie kostbare beslissingstijd.

📋 Het complete stappenplan: van diagnose tot controle

Samengevat is dit het stappenplan om master te worden van je eigen refreshproces:

  1. ANALYSEER — Start met VertiPaq Analyzer. Identificeer welke kolommen het meeste geheugen verbruiken.
  2. VERKLEIN — Verwijder ongebruikte kolommen. Splits DateTime naar Date + Time. Verlaag kardinaliteit.
  3. OPTIMALISEER — Zet IsAvailableInMDX = false voor verborgen kolommen. Vervang calculated columns door Power Query of goud laag logica.
  4. ORCHESTREER — Spreid refreshes over tijd. Vermijd piekuren. Gebruik pipelines voor controle.
  5. PARTITIONEER — Implementeer incremental refresh. Partitioneer op datum, ververs alleen recente data.
  6. MONITOR — Bewaak continu met Capacity Metrics, DMV’s en Workspace Monitor.

En zo weet je de volgende keer dat je ’s ochtends in Fabric kijkt en die rij met refreshes ziet, precies wat er achter dat groene vinkje, of rode kruis, gebeurt.
En belangrijker nog: je weet hoe je er invloed op hebt.
Van reactief brandjes blussen… naar proactief sturen op performance, kosten en betrouwbaarheid.
En dat is precies het verschil tussen een werkende data-oplossing — en een volwassen data platform.

Meld je aan voor de

DTX kwartaal update

Het laatste tech news, klantcases en events direct in je inbox.

Ik ga akkoord met de voorwaarden in het privacybeleid van DTX.*
Er ging iets mis. Probeer het opnieuw.
Succes! Je bent ingeschreven.