Bronnen combineren: joinfouten herkennen en voorkomen (2026)
Combineer tabellen betrouwbaar door sleutels, cardinaliteit, niet-gematchte rijen en aantallen voor en na een join te controleren.
Een joinfout kan een dashboard overtuigend laten lijken terwijl bedragen of aantallen ongemerkt verdubbelen. Controleer sleutels en verwachte relatie voordat je een broncombinatie gebruikt.
Stappenplan
1. Definieer de sleutel en relatie
Noteer de sleutel aan beide kanten en of de relatie één-op-één, één-op-veel of veel-op-veel hoort te zijn. Standaardiseer spaties, hoofdletters en datatype via het opschoonstappenplan.
2. Tel vóór en na
Noteer aantallen rijen, unieke sleutels en relevante totalen voor en na de join. Controleer met de datakwaliteitschecks of de sleutel uniek hoort te zijn.
3. Onderzoek missers en verdubbelingen
Maak een lijst van sleutels zonder match en sleutels met meerdere matches. Los de bron of definitie op, niet alleen de uitkomst. Gebruik bij een CSV-export eerst de lokale structuurcontrole.
Microsoft legt in de Power Query merge-documentatie uit dat je kolommen kiest om tabellen te combineren; de gekozen join en matchresultaten blijven jouw inhoudelijke verantwoordelijkheid.
Controleerbaar voorbeeld
Orders hebben één klantcode, maar de klantentabel bevat twee regels per klant vanwege historie. Een join op alleen klantcode verdubbelt elke order. Kies de actuele klantregel met een expliciete datumregel of maak eerst één unieke klantdimensie. Vergelijk daarna orderaantal en omzet met de bron.
Bepaal eerst wat één rij voorstelt
Voordat je twee tabellen koppelt, moet je in gewone taal kunnen afmaken: “één rij in deze tabel is ...”. Een orderregel, een order, een klant, een maandstand en een ticket zijn verschillende korrels. Als je omzet per order wilt rapporteren maar een orderregelstabel aan een klantentabel koppelt, telt een klant met vijf regels vijf keer mee. Dat hoeft geen fout te zijn, maar het moet passen bij de berekening.
Maak daarom een klein joincontract. Daarin staan de linker- en rechttabel, de sleutelkolom, de verwachte kardinaliteit, het gekozen joinkarakter en wat je doet met missers. Een left join houdt alle rijen van links; een inner join bewaart alleen matches. Kies niet op basis van wat er het netst uitziet, maar op basis van de vraag. Bij een volledigheidscontrole wil je missers vaak juist zichtbaar houden.
Microsoft beschrijft in de officiële uitleg over query's samenvoegen hoe gekozen sleutelkolommen en joinsoorten de uitkomst bepalen. De techniek controleert echter niet of jouw sleutel inhoudelijk uniek of actueel is. Die validatie blijft nodig, ook buiten Power Query.
Stappen voor een veilige koppeling
- Maak een kopie van beide bronexports en noteer exportdatum en eigenaar.
- Tel rijen, unieke sleutels en relevante totalen vóór de join.
- Controleer lege sleutels, leidende nullen, spaties, hoofdletters en datatype.
- Groepeer elke sleutel en tel hoe vaak die links én rechts voorkomt.
- Kies expliciet inner, left, right of full join en schrijf de reden op.
- Lever een matchrapport op: gematcht, alleen links, alleen rechts en meervoudig.
- Vergelijk aantallen en totalen na de join met de verwachte korrel.
- Controleer een kleine, vooraf gekozen steekproef terug in beide bronnen.
Gebruik alleen interne, niet-herleidbare voorbeeldsleutels in screenshots of tickets. Een joincontrole vraagt bijna nooit om namen, adressen, e-mailadressen of vrije notities. Door zulke velden weg te laten beperk je het privacyrisico én maak je de controle overzichtelijker. De AVG-beginselen op EUR-Lex zijn een gezaghebbende bron voor doelbinding en minimale gegevensverwerking.
Synthetisch voorbeeld: omzet die driemaal te hoog wordt
Een fictieve ordertabel bevat drie orders: O-101 voor klant K-10, O-102 voor K-10 en O-103 voor K-20. De bedragen zijn 100, 200 en 300 euro. De klantentabel bevat voor K-10 twee historische adresregels en voor K-20 één regel. Een join op alleen klantcode geeft vijf rijen en een som van 900 euro, terwijl de orderbron 600 euro bevat. Het probleem zit niet in de som, maar in de relationele korrel: één klant is niet uniek in de tweede tabel.
Herstel niet door het totaal door een willekeurig aantal te delen. Maak eerst een actuele klantdimensie met precies één record per klantcode, bijvoorbeeld door de geldige regel op een afgesproken peildatum te kiezen. Herhaal vervolgens de join en vergelijk opnieuw: drie orderregels, drie gekoppelde klantrecords en 600 euro. Documenteer dat de historische adresregels niet bedoeld zijn voor een orderanalyse. Als historie wel nodig is, koppel dan met een datumregel die vooraf is goedgekeurd.
Een andere veelvoorkomende afwijking is een sleutel als tekst met leidende nullen aan de ene kant en een getal zonder nullen aan de andere kant. Normaliseer alleen wanneer je hebt vastgesteld dat die nullen geen betekenis dragen. Zet de oorspronkelijke sleutel nooit stilzwijgend om; maak een aparte opgeschoonde sleutel volgens het dataset-opschoonstappenplan.
Validatie en herstelroute
Maak bij elke productiejoin vier zichtbare uitkomsten: aantal rijen voor en na, aantal unieke sleutels, aantal niet-gematchte sleutels en verschil in de relevante totaalsom. Een verschil is niet altijd fout. Een left join kan bewust extra rijen houden, en een periodetabel kan één-op-veel zijn. De uitkomst is pas betrouwbaar wanneer de afwijking wordt verklaard en geaccordeerd.
Bij een onverwachte vermenigvuldiging stop je het vernieuwen van het dashboard. Bewaar query, bronversies en matchrapport, herstel de dimensie of sleutelregel en voer dezelfde tellingen opnieuw uit. Bij ontbrekende matches maak je eerst een lijst met redenen: nieuwe code, typefout, andere geldigheid, vertraagde export of werkelijk onbekende relatie. Gooi missers niet weg om een mooier percentage te krijgen.
De lokale CSV-structuurcontrole kan je helpen met eerste structuurproblemen, maar beoordeelt geen relationele juistheid. Controleer daarvoor ook de tien datakwaliteitschecks en leg in je analyseplan vast welke relatie wordt verwacht.
Veelgemaakte fouten
- Een samengestelde sleutel inkorten. Soms zijn klantcode én periode nodig voor een unieke koppeling.
- Meervoudige matches als nul-matches tellen. Rapporteer die categorie apart.
- Een join testen met alleen een eindbedrag. Een fout kan binnen subgroepen wegvallen.
- Historie als actuele dimensie gebruiken. Kies een geldigheidsregel of modelleer historie bewust.
- Een sleutel schoonmaken zonder broncontrole. Daarmee kun je twee verschillende entiteiten samenvoegen.
Gebruik voor een beoordeling alleen het joincontract, geaggregeerde tellingen en een synthetisch voorbeeld. Deel geen bronbestand of persoonsgegevens via chat.
Officiële bronnen
Veelgestelde vragen
- Wat is een join?
- Een join koppelt rijen uit twee tabellen op basis van een gedeelde sleutel, zoals een interne klantcode.
- Wat is een one-to-many-join?
- Eén rij in de eerste tabel past bij meerdere rijen in de tweede tabel, bijvoorbeeld één klant met meerdere orders.
- Waarom verdubbelt een totaal na een join?
- Vaak omdat een sleutel aan beide kanten meerdere keren voorkomt en rijen daardoor worden vermenigvuldigd.
- Moet ik een inner of left join gebruiken?
- Dat hangt af van de vraag; documenteer welke niet-gematchte rijen je wel of niet wilt behouden.
- Hoe test ik een join?
- Tel rijen en bedragen voor en na, onderzoek niet-gematchte sleutels en toets enkele bekende records in de bron.
Lees ook
Hulp nodig bij jouw situatie?
Kom je er niet uit? Stuur kort wat context, wat je wilt bereiken en waar je vastloopt. Dan kijken we samen naar een passende volgende stap.