terug naar blog
Microsoft Fabric10 min read

Dataflows Gen2 in Microsoft Fabric: Complete Power Query Migratiegids

#fabric#dataflows#dataflows-gen2#power-query#lakehouse

Als je dataflows in Power BI hebt gebruikt, denk je misschien dat Dataflows Gen2 in Microsoft Fabric gewoon een versie-update zijn. Dat is niet zo. Ze zijn volledig opnieuw opgebouwd en werken totaal anders.

Het heeft even geduurd voordat ik begreep waarom Microsoft überhaupt een nieuwe versie heeft gemaakt. Het bleek dat de oude dataflows enkele fundamentele beperkingen hadden, en Dataflows Gen2 lost de meeste daarvan op.

Wat was er mis met gewone dataflows

Gewone dataflows (nu Gen1 genoemd) waren nuttig, maar hadden problemen:

  • Performance was wisselvallig, vooral bij grote datasets
  • Je kon niet echt bepalen waar de data terechtkwam
  • Vernieuwingstijden waren onvoorspelbaar
  • Beperkte transformatiemogelijkheden vergeleken met volledige Spark
  • Sloeg data op in Dataverse of Power BI storage (een black box)

Ze werkten prima voor kleine tot middelgrote ETL-taken, maar schaalden niet goed.

Wat maakt Gen2 anders

Dataflows Gen2 draaien op Spark in plaats van de oude Power Query engine. Dit verandert alles aan hoe ze werken.

Belangrijkste verschillen:

  • Spark backend - veel sneller voor grote datatransformaties
  • Destination control - je kiest waar data landt (Lakehouse of Warehouse)
  • Delta table output - data wordt geschreven als echte Delta tables
  • Better monitoring - echte Spark logs en metrics
  • Meer flexibel - kan Power Query mixen met aangepaste Spark code

De Power Query interface ziet er vergelijkbaar uit, maar onder de motorkap wordt je M code vertaald naar Spark-operaties.

Gen1 bestaat nog steeds

Je kunt nog steeds gewone dataflows maken in Microsoft Fabric. Ze verschijnen als gewoon "dataflow" en niet "Dataflow Gen2". Microsoft heeft Gen1 nog niet afgeschreven, maar Dataflows Gen2 is duidelijk de toekomst.

Een Dataflow Gen2 maken

Het proces is vrij eenvoudig:

  1. Ga naar je Microsoft Fabric workspace
  2. Klik op New > Dataflow Gen2
  3. Haal data op en bouw je transformaties (dezelfde Power Query ervaring)
  4. Configureer je data destination
  5. Sla op en publiceer

Het Power Query gedeelte voelt identiek aan gewone dataflows. De magie zit in stap 4, waar je de destination kiest.

Schrijven naar een Lakehouse

Dit is het meest voorkomende patroon. Je dataflow schrijft data naar Delta tables in een Lakehouse.

Wanneer je een Dataflow Gen2 publiceert:

  1. Klik op een query in je dataflow
  2. Rechtsonder zie je "data destination"
  3. Selecteer Lakehouse
  4. Kies je target Lakehouse
  5. Kies een table name
  6. Stel de write mode in (append, replace, etc.)

Write modes uitgelegd:

  • Replace - verwijdert de bestaande table en schrijft nieuwe data (full refresh)
  • Append - voegt nieuwe rijen toe aan de bestaande table (incremental)

Voor de meeste use cases is replace eenvoudiger. Append is handig als je alleen nieuwe records wilt laden, maar vereist dat je zelf de deduplication logic afhandelt.

# the dataflow generates spark code similar to this
df.write.format("delta") \
    .mode("overwrite") \
    .option("mergeSchema", "true") \
    .saveAsTable("your_table_name")

Nadat de dataflow is uitgevoerd, verschijnen je data in het Lakehouse als een Delta table. Je kunt deze queryen met SQL, gebruiken in notebooks, of er Semantic models bovenop bouwen.

Table naming

Gebruik duidelijke en consistente namen voor je tables. Iets als bronze_raw_sales of silver_cleaned_customers. Zo is het meteen duidelijk welke tables brondata zijn versus getransformeerde data.

Schrijven naar een Warehouse

Je kunt de output van Dataflows Gen2 ook naar een Microsoft Fabric Warehouse schrijven in plaats van een Lakehouse.

Hetzelfde proces, maar selecteer Warehouse als destination. Data wordt geschreven als gewone SQL tables, niet als Delta tables.

Wanneer gebruik je een Warehouse als destination:

  • Je bent meer vertrouwd met T-SQL dan met Spark
  • Je downstream tools begrijpen alleen SQL databases
  • Je hebt geen Spark-processing nodig op de data
  • Je wilt traditionele database constraints en indexes

Persoonlijk kies ik standaard voor een Lakehouse, tenzij er een specifieke reden is om een Warehouse te gebruiken. Lakehouses zijn flexibeler en integreren beter met de rest van Microsoft Fabric.

Als je twijfelt over deze beslissing, heb ik een gedetailleerde vergelijking van Lakehouses versus Warehouses geschreven die je misschien helpt.

Incremental refresh patronen

Een van de beste features in Dataflows Gen2 is het correct omgaan met incremental loads.

Oude dataflows hadden incremental refresh, maar het was omslachtig. Dataflows Gen2 maakt het explicieter.

Patroon 1: Eenvoudige append

Als je source alleen nieuwe records bevat (geen updates):

  1. Voeg een filter toe in Power Query om alleen nieuwe records op te halen (gebaseerd op datum of id)
  2. Stel de destination in op append mode
  3. Elke refresh voegt alleen de nieuwe rijen toe

Patroon 2: Upsert logic

Als je updates van bestaande records moet afhandelen, wordt het complexer. Je hebt twee opties:

Optie a: Gebruik replace mode en herlaad alles. Eenvoudig, maar langzaam voor grote tables.

Optie b: Gebruik een merge pattern met een notebook na de dataflow. De dataflow plaatst de data in staging en de notebook voert een Delta merge operation uit.

# example merge pattern in a notebook
from delta.tables import DeltaTable

# your dataflow writes to a staging table
staging_df = spark.table("staging_sales")

# merge into the main table
target_table = DeltaTable.forName(spark, "sales")

target_table.alias("target").merge(
    staging_df.alias("source"),
    "target.order_id = source.order_id"
).whenMatchedUpdateAll() \
 .whenNotMatchedInsertAll() \
 .execute()

Dit patroon kost meer werk om in te stellen, maar presteert veel beter voor grote incremental loads.

Scheduling en refresh

Dataflows Gen2 worden standaard niet automatisch gerefresht. Je moet een schedule instellen.

Twee manieren om een refresh te triggeren:

Optie 1: Ingebouwde schedule

  1. Ga naar je workspace
  2. Zoek je Dataflow Gen2
  3. Klik op de drie puntjes > Settings
  4. Stel een refresh schedule in

Werkt prima voor eenvoudige gevallen. Beperkt tot standaard schedule-opties zoals dagelijks of wekelijks.

Optie 2: Data pipeline

Flexibelere aanpak. Maak een data pipeline die de dataflow triggert.

Hiermee kun je:

  • De dataflow uitvoeren op basis van events of dependencies
  • Meerdere dataflows achter elkaar uitvoeren
  • Error handling en retry logic toevoegen
  • De dataflow uitvoeren met parameters

Voor alles behalve basic scheduling zou ik een pipeline gebruiken.

Performance tips

Dataflows Gen2 is sneller dan Gen1, maar je kunt nog steeds trage dataflows schrijven.

Dingen die echt belangrijk zijn voor performance:

1. Filter vroeg

Push filters zo dicht mogelijk naar de source. Laad geen miljoen rijen om er later maar 1000 uit te filteren.

Power Query query folding is nog steeds van toepassing. Houd in de gaten of je stappen naar de source worden gevouwen of in memory plaatsvinden.

2. Vermijd onnodige columns

Verwijder columns die je niet nodig hebt vroeg in de transformatie. Minder data die door de pipeline beweegt, betekent snellere processing.

3. Gebruik native connectors

Native Microsoft Fabric connectors (voor SQL, Blob Storage, etc.) zijn geoptimaliseerd. Custom connectors of web calls zijn langzamer.

4. Split grote dataflows

Eén gigantische dataflow met 50 queries is langzamer dan 5 kleinere dataflows met elk 10 queries. Je kunt meerdere dataflows parallel uitvoeren via een pipeline.

5. Let op cross-joins

Het mergen van tables zonder de juiste join keys kan je row count enorm laten toenemen. Power Query waarschuwt je hier niet altijd voor.

Monitoring en debugging

Wanneer een dataflow faalt, krijg je nu daadwerkelijk nuttige logs.

Ga naar je workspace > zoek je dataflow > klik erop > view refresh history

Je ziet dan:

  • Duur voor elke query
  • Spark metrics (rows processed, data read)
  • Werkelijke error messages met line numbers
  • Query plan information

Veel beter dan Gen1, waar je alleen "refresh failed" kreeg en moest raden waarom.

Refresh failures

De meeste dataflow failures zijn problemen met de source connection of query folding. Controleer eerst je data source credentials en kijk daarna in de logs welke specifieke query is mislukt.

Wanneer gebruik je Dataflows Gen2 versus andere opties

Microsoft Fabric biedt meerdere manieren om data te laden. Dit is wanneer Dataflows Gen2 logisch zijn:

Gebruik Dataflows Gen2 wanneer:

  • Je vertrouwd bent met Power Query en daarmee wilt blijven werken
  • Je transformaties voornamelijk standaard ETL zijn (filters, joins, aggregations)
  • Je een visual interface wilt, geen code
  • Je team Power Query al kent van Power BI
  • Data volumes klein tot middelgroot zijn (onder een paar honderd GB)

Gebruik notebooks in plaats daarvan wanneer:

  • Je complexe Python- of Scala-transformaties nodig hebt
  • Je werkt met echt grote datasets
  • Je machine learning of advanced analytics nodig hebt
  • Je volledige controle wilt over Spark configurations
  • Power Query je source system niet ondersteunt

Gebruik data pipelines wanneer:

  • Je meerdere dataflows of notebooks moet orchestreren
  • Je conditional logic of branching hebt
  • Je files moet kopiëren of API's moet aanroepen
  • Je migreert van Azure Data Factory

Voor de meeste Power BI developers die naar Microsoft Fabric komen, zijn Dataflows Gen2 het natuurlijke startpunt. Je kent Power Query al, dus de leercurve is minimaal.

Migreren van Gen1 naar Gen2

Als je bestaande Gen1 dataflows hebt, is er geen automatische migratie. Je moet ze opnieuw opbouwen als Dataflows Gen2.

Proces:

  1. Open je oude dataflow
  2. Noteer alle queries en transformaties
  3. Maak een nieuwe Dataflow Gen2 aan
  4. Bouw de queries opnieuw op (zou grotendeels copy-paste moeten zijn)
  5. Configureer destinations (een nieuwe stap die niet bestond in Gen1)
  6. Test grondig voordat je overschakelt

De Power Query code is grotendeels compatibel, maar controleer dubbel:

  • Eventuele custom functions hebben mogelijk aanpassingen nodig
  • Controleer of query folding nog steeds werkt
  • Verifieer data types na het laden naar de destination

Migreer niet alles tegelijk. Begin met één dataflow, test deze grondig en verplaats dan de rest.

Veelvoorkomende problemen en oplossingen

Probleem: dataflow is erg traag

Controleer of query folding werkt. Klik op een stap en bekijk het query plan. Als er "evaluated in workspace" staat in plaats van "evaluated at source", laad je te veel data in memory.

Oplossing: herschrijf queries om meer werk naar de source te pushen.

Probleem: data verschijnt niet in Lakehouse

Zorg ervoor dat je de data destination hebt geconfigureerd voor elke query die je wilt outputten. Standaard schrijven queries nergens naartoe, ze zijn slechts intermediate steps.

Probleem: dataflow faalt met memory errors

Je probeert te veel data in één keer te laden. Filter aggressiever of splits het op in meerdere dataflows en gebruik incremental loading.

Probleem: timestamp columns hebben verkeerde timezone

Veelvoorkomend probleem. Power Query en Spark gaan anders om met timezones. Wees expliciet over timezone conversions in je M code.

Volgende stappen

Nu je Dataflows Gen2 begrijpt, kun je solide ETL pipelines bouwen in Microsoft Fabric.

Aanbevolen workflow:

  1. Gebruik Dataflows Gen2 om raw data in je Lakehouse te laden
  2. Gebruik notebooks voor complexe transformaties indien nodig
  3. Bouw Semantic models bovenop de cleaned data
  4. Maak Power BI reports met behulp van Direct Lake mode

Dit geeft je een echte data pipeline in plaats van alleen data direct in Semantic models te importeren.

Als je net begint met Microsoft Fabric, bekijk dan eerst mijn introductiegids voor Power BI developers.

Dataflows Gen2 zijn een solide tool zodra je begrijpt dat het niet alleen geüpgradede dataflows zijn, maar een compleet andere implementatie. De Power Query interface maakt ze toegankelijk, maar de Spark backend geeft je echte kracht voor datatransformatie op schaal.

delen:
Yari Bouwman

Geschreven door

Data Engineer en Solution Designer gespecialiseerd in schaalbare data platforms en moderne cloud oplossingen. Meer over mij

gerelateerde artikelen