Twee manieren om data te verbinden in Power BI

Wanneer je een databron koppelt aan Power BI, kies je een verbindingsmodus. De twee hoofdopties zijn Import mode en DirectQuery. Een derde optie — het Composite model — combineert beiden. De keuze bepaalt hoe Power BI omgaat met de data: slaat het een kopie op of bevraagt het de bron live?

Dit lijkt op het eerste gezicht een technisch detail, maar het heeft verstrekkende gevolgen voor de gebruikerservaring, de DAX-mogelijkheden, de belasting op de brondatabase en de kosten. Het is een architectuurkeuze die je vroeg in het project goed moet maken.

Import mode: data wordt gekopieerd naar Power BI

Bij Import mode wordt een kopie van de data opgeslagen in de in-memory engine van Power BI (VertiPaq). Alle queries worden uitgevoerd tegen deze lokale kopie, niet tegen de brondatabase. Dit heeft de volgende eigenschappen:

  • Maximale performance: VertiPaq is een kolomgeoriënteerde in-memory engine die speciaal is gebouwd voor analytische queries. Aggregaties over miljoenen rijen duren milliseconden.
  • Volledige DAX-ondersteuning: Alle DAX-functies zijn beschikbaar, inclusief time intelligence, iterators en complexe calculate-expressies.
  • Niet real-time: Data is actueel tot het moment van de laatste scheduled refresh. Bij een dagelijkse refresh is de data maximaal 24 uur oud.
  • Limieten op datasetgrootte: Pro: 1 GB, Premium Per User: 100 GB, Premium: geen praktische limiet.
  • Scheduled refresh: Power BI Service ververst de dataset periodiek. Je kunt dit configureren van 1x per dag (Pro) tot meerdere keren per uur (Premium).

DirectQuery: elke interactie voert een query uit op de bron

Bij DirectQuery slaat Power BI geen data op. In plaats daarvan genereert Power BI bij elke gebruikersinteractie (klikken op een filter, hover over een visual, openen van een rapport) een SQL-query die direct naar de brondatabase wordt gestuurd.

  • Altijd actuele data: Omdat elke klik een live query uitvoert, zijn de gegevens altijd zo actueel als de brondatabase.
  • Belasting op brondatabase: Elke visualisatieklik genereert meerdere queries. Bij 50 gelijktijdige gebruikers kan dit de productiedatabase zwaar belasten.
  • Beperkte DAX: Niet alle DAX-functies zijn ondersteund in DirectQuery. Time intelligence functies, complexe iterators en sommige statistische functies zijn beperkt of niet beschikbaar.
  • Trager responsetime: De snelheid is afhankelijk van de brondatabase. Een query over 10 miljoen rijen in een niet-geoptimaliseerde SQL-tabel duurt seconden tot tientallen seconden.
  • Geen datasetgrootte-limiet: Omdat er geen data wordt opgeslagen in Power BI, geldt er geen grootte-limiet vanuit Power BI zelf.

Vergelijking: performance

In de praktijk is Import mode vrijwel altijd sneller voor eindgebruikers. VertiPaq-queries zijn geoptimaliseerd voor analytische workloads en gebruiken SIMD-instructies voor parallelle verwerking. Een CALCULATE(SUM(Factuur[Bedrag]), FILTER(...)) over 5 miljoen rijen duurt in VertiPaq typisch 50–200 milliseconden.

Dezelfde query via DirectQuery op een Azure SQL-database (goed geïndexeerd, columnstore) duurt 500ms–3 seconden. Op een niet-geoptimaliseerde database of via een REST API (zoals Exact Online) kan dit oplopen tot 10–30 seconden per visual. Een dashboard met 8 visuals kan dan minuten laden.

Vergelijking: data-actualiteit vs. scheduled refresh

KenmerkImport modeDirectQuery
Data-actualiteitTot moment van laatste refreshReal-time (seconden vertraging)
Refresh frequentie (Pro)Max. 8x per dagN.v.t. (altijd live)
Refresh frequentie (Premium)Elk half uur of continueN.v.t.
Performance bij gebruikerUitstekend (ms)Matig tot goed (s)
Belasting bronsysteemAlleen tijdens refreshBij elke gebruikersinteractie

Vergelijking: beperkingen in DAX en modellering

Dit is het minst zichtbare maar meest impactvolle verschil voor Power BI-ontwikkelaars. In DirectQuery zijn de volgende DAX-functies en -patronen niet of beperkt beschikbaar:

  • Time intelligence functies (SAMEPERIODLASTYEAR, DATESINPERIOD, etc.) werken alleen als de date-tabel volledig is gemarkeerd als date-tabel én in Import mode is geladen.
  • Row-level iterators (SUMX, AVERAGEX met complexe expressies) zijn beperkt in expressiviteit.
  • Berekende kolommen en berekende tabellen zijn niet beschikbaar in DirectQuery (ze bestaan alleen in Import mode).
  • Many-to-many relaties zijn beperkt ondersteund.

In de praktijk betekent dit dat je veel van de geavanceerde DAX-patronen die je nodig hebt voor serieuze management reporting (rolling averages, YTD vs. PYTD, dynamische segmentatie) niet of nauwelijks kunt implementeren in DirectQuery.

De hybride aanpak: Composite model

Seit Power BI versie 2.79 (2020) is het Composite model beschikbaar. Hiermee kun je Import- en DirectQuery-tabellen combineren in één dataset. De meest gebruikte configuratie is:

  • Feittabellen: DirectQuery op een geoptimaliseerde brondatabase (bijv. Azure Synapse) voor real-time data.
  • Dimensietabellen: Import mode voor het cachen van relatief kleine lookuptabellen (klanten, producten, medewerkers).

Dit geeft het beste van beide werelden: actuele transactiedata met de performance van gecachte dimensies. Maar het voegt ook complexiteit toe: het Composite model heeft zijn eigen set beperkingen en vereist diepgaande kennis van Power BI internals.

Aanbevelingen per scenario

Op basis van onze projectervaring gelden de volgende aanbevelingen:

  • Financiële rapportages (Exact Online, AFAS): Import mode via Azure SQL. Dagelijkse of meermaal daagse refresh is meer dan voldoende. Full DAX-functionaliteit essentieel voor time intelligence.
  • Operationele dashboards (transport, zorg): Import mode via Azure SQL met meerdere refreshes per dag (Premium) of Import mode met uurlijkse refresh (Pro). Actueel genoeg voor stuurinformatie.
  • Real-time operationele monitoring: DirectQuery op Azure Synapse of een geoptimaliseerde Azure SQL-database. Accepteer de DAX-beperkingen en bouw een eenvoudiger model.
  • Zeer grote datasets (>100 GB): DirectQuery op Azure Synapse Analytics of Databricks, of Import mode met Premium en incremental refresh.

De standaardkeuze van Argus BI is: Import mode op Azure SQL. Dit geeft de beste balans tussen performance, DAX-expressiviteit en actualiteit voor 90% van de use-cases.

Twijfel over Import vs. DirectQuery?

Argus BI helpt bij de architectuurkeuze voor uw Power BI-omgeving. Wij bouwen dashboards die performant zijn en goed schalen — ongeacht de databron.

Bespreek je Power BI architectuur

Veelgestelde vragen

Is DirectQuery altijd langzamer dan Import?

In de praktijk is DirectQuery bijna altijd trager voor eindgebruikers. Elke klik op een visual genereert een query naar de brondatabase. Import mode slaat data op in de VertiPaq-engine, die extreem snel is. De uitzondering is wanneer de brondatabase speciaal is geoptimaliseerd voor analytische queries (zoals Azure Synapse Analytics), maar zelfs dan is Import mode voor de meeste use-cases sneller.

Kan ik real-time data hebben met Import mode?

Import mode is niet real-time maar kan wel zeer frequent worden ververst. Met Power BI Premium of Premium Per User kun je een dataset elk uur of vaker verversen. Voor de meeste management-rapportages is dagelijkse verversing voldoende. Echte real-time vereisten (seconden tot minuten vertraging) vereisen DirectQuery of streaming datasets.

Wat is het verschil tussen Dual en DirectQuery in een Composite model?

In een Composite model kan een tabel worden ingesteld als Import, DirectQuery of Dual. Dual-tabellen gedragen zich als Import wanneer ze worden gecombineerd met andere Import-tabellen, en als DirectQuery wanneer ze worden gecombineerd met DirectQuery-tabellen. Dit is ideaal voor dimensietabellen die je wilt cachen maar ook wil combineren met live DirectQuery-feittabellen.

Hoe groot mag een Power BI dataset worden met Import mode?

Met een Power BI Pro-licentie is de limiet 1 GB per dataset. Met Power BI Premium Per User (PPU) is dat 100 GB. Met Power BI Premium (P-tiers) zijn er geen praktische limieten voor de meeste organisaties. Optimaliseer datasets via columnstore-compressie en het verwijderen van overbodige kolommen om ruim binnen de limieten te blijven.