Power Query eigen functies maken: herbruikbare M-code (2026)
Kort antwoord: In Power Query maak je een eigen functie door een query om te zetten naar een herbruikbare functie via Geavanceerde editor. Schrijf
(parameter) => [transformatie]om code te maken die je op meerdere tabellen kunt toepassen. Dit bespaart tijd en maakt je data-transformaties consistenter.
Laatst bijgewerkt: januari 2026
Wat zijn Power Query functies?
Een Power Query functie is een herbruikbaar blok M-code dat je kunt toepassen op verschillende datasets. In plaats van dezelfde transformatiestappen handmatig te herhalen voor elke tabel, schrijf je de logica een keer en roep je de functie aan waar nodig.
De taal achter Power Query heet M (officieel: Power Query Formula Language). Elke stap die je in de interface maakt, wordt automatisch vertaald naar M-code. Met functies til je dit naar een hoger niveau.
Waarom functies gebruiken?
- Herbruikbaarheid: een keer schrijven, overal toepassen
- Consistentie: dezelfde logica op alle tabellen
- Onderhoud: wijzig de functie, en alle toepassingen worden bijgewerkt
- Complexe transformaties: combineer meerdere stappen in een aanroep
Syntaxis van een M-functie:
(parameter1, parameter2) => [resultaat]
Of met meerdere stappen:
(parameter) =>
let
Stap1 = ...,
Stap2 = ...,
Resultaat = ...
in
Resultaat
Power Query functies maken: stap-voor-stap
Stap 1: Open de Power Query Editor
- Windows: Ga naar Gegevens > Gegevens ophalen > Power Query Editor starten, of klik op een bestaande query en kies Bewerken
- Mac: Ga naar Gegevens > Gegevens ophalen (Power Query) en open de editor
Stap 2: Maak een nieuwe lege query
- Windows: Klik op Start > Nieuwe bron > Lege query
- Mac: Klik op Start > Lege query
Je krijgt een lege query genaamd “Query1” (je kunt deze later hernoemen).
Stap 3: Open de Geavanceerde editor
- Windows: Ga naar Start > Geavanceerde editor (of Weergave > Geavanceerde editor)
- Mac: Ga naar Start > Geavanceerde editor
Je ziet nu de M-code van je query. Voor een lege query staat er iets als:
let
Bron = ""
in
Bron
Stap 4: Schrijf je functie
Vervang de code door je functiedefinitie. Hier is een eenvoudig voorbeeld dat tekst naar hoofdletters omzet:
(invoertekst as text) => Text.Upper(invoertekst)
Klik op Gereed. De query verandert nu van een tabel naar een functie (je ziet een functie-icoon).
Stap 5: Hernoem je functie
Klik rechts op de query in het paneel en kies Naam wijzigen. Geef een beschrijvende naam zoals fnNaarHoofdletters.
Tip: Begin functienamen met fn zodat je ze makkelijk herkent tussen je tabellen.
Stap 6: Test je functie
Klik op de functie in het navigatiepaneel. Je ziet nu een invoerveld waar je een testwaarde kunt invoeren. Typ een woord en klik Aanroepen om het resultaat te zien.
Stap 7: Pas de functie toe op een kolom
Nu kun je de functie toepassen op een hele kolom in een andere query:
- Open de query met je data
- Ga naar Kolom toevoegen > Aangepaste kolom
- In de formulebalk typ je:
fnNaarHoofdletters([KolomNaam]) - Klik OK
De functie wordt toegepast op elke rij in je dataset.
Praktijkvoorbeeld: datums standaardiseren
Een veelvoorkomend probleem: datums die als tekst zijn geimporteerd in verschillende formaten. Laten we een functie maken die dit oplost.
De functie maken
Open de Geavanceerde editor en typ:
(datumtekst as text) =>
let
// Verwijder extra spaties
SchoneTekst = Text.Trim(datumtekst),
// Probeer te converteren naar datum
AlsDatum = try Date.FromText(SchoneTekst) otherwise null,
// Als dat niet lukt, probeer alternatief formaat
Resultaat = if AlsDatum <> null then AlsDatum
else try Date.FromText(SchoneTekst, [Format="dd-MM-yyyy"])
otherwise null
in
Resultaat
Deze functie:
1. Verwijdert voorloop- en volgspaties
2. Probeert de standaard datumconversie
3. Valt terug op het Nederlandse datumformaat (dd-MM-yyyy) als dat niet lukt
4. Retourneert null als geen enkel formaat werkt
De functie toepassen
In je datatabel:
- Ga naar Kolom toevoegen > Aangepaste kolom
- Noem de kolom “DatumSchoon”
- Voer de formule in:
fnStandaardiseerDatum([DatumKolom]) - Klik OK
Nu heb je een schone datumkolom die je kunt gebruiken voor berekeningen en draaitabellen.
Functies met meerdere parameters
Functies worden krachtiger met meerdere parameters. Hier is een voorbeeld dat tekst zoekt en vervangt:
(tekst as text, zoekterm as text, vervanging as text) =>
Text.Replace(tekst, zoekterm, vervanging)
Toepassen met vaste waarden
fnZoekVervang([ProductNaam], "oud", "nieuw")
Toepassen met kolomwaarden
Je kunt ook andere kolommen als parameters gebruiken:
fnZoekVervang([Omschrijving], [ZoekWoord], [VervangWoord])
Dit maakt dynamische transformaties mogelijk op basis van je data.
Geavanceerd: functie die hele tabellen transformeert
De kracht van functies komt pas echt tot uiting wanneer je ze toepast op meerdere tabellen of bestanden. Dit is ideaal voor het verwerken van maandelijkse rapporten met dezelfde structuur.
Voorbeeld: mapinhoud verwerken
Stel je hebt een map met CSV-bestanden die je allemaal op dezelfde manier wilt transformeren:
Stap 1: Maak eerst de transformatie handmatig op een bestand
- Importeer een van de bestanden via Gegevens ophalen > Uit bestand
- Pas je transformaties toe (kolommen hernoemen, datatypes aanpassen, filters)
- Deze query dient als template
Stap 2: Converteer naar functie
- Open de Geavanceerde editor
- Voeg een parameter toe aan het begin:
(Bronbestand as binary) =>
let
Bron = Csv.Document(Bronbestand, [Delimiter=";", Encoding=65001]),
#"Kopteksten verhoogd" = Table.PromoteHeaders(Bron),
#"Type gewijzigd" = Table.TransformColumnTypes(
#"Kopteksten verhoogd",
{{"Datum", type date}, {"Bedrag", type number}}
),
#"Gefilterd" = Table.SelectRows(#"Type gewijzigd", each [Bedrag] > 0)
in
#"Gefilterd"
- Hernoem de query naar
fnVerwerkRapport
Stap 3: Pas toe op alle bestanden
- Maak een nieuwe query via Gegevens ophalen > Uit bestand > Uit map
- Selecteer de map met je bestanden
- In plaats van “Combineren”, klik op Gegevens transformeren
- Voeg een aangepaste kolom toe:
fnVerwerkRapport([Content]) - Klap de resultaten uit
Nu worden alle bestanden automatisch met dezelfde logica verwerkt. Voeg je een nieuw bestand toe aan de map? Na vernieuwen wordt het automatisch meegenomen.
Veelgemaakte fouten bij Power Query functies
Fout 1: Parameters niet correct gedefinieerd
Probleem: Je krijgt een foutmelding “Expression.Error: We cannot convert the value…” of “Parameter is not recognized.”
Oorzaak: De parametertypes komen niet overeen met de aangeleverde waarden.
Oplossing:
– Specificeer het type in de functiedefinitie: (waarde as number) of (tekst as text)
– Gebruik as any als je meerdere types wilt accepteren: (invoer as any)
– Voeg optional toe voor optionele parameters: (vereist as text, optional optioneel as text)
Fout 2: Verwijzen naar niet-bestaande kolommen
Probleem: De functie werkt bij testen, maar faalt bij toepassing op een tabel.
Oorzaak: Je verwijst naar een kolomnaam die niet in de doeltabel voorkomt.
Oplossing:
– Controleer of alle kolommen die je in de functie gebruikt ook daadwerkelijk bestaan
– Gebruik try ... otherwise voor foutafhandeling:
try [MijnKolom] otherwise null
- Pas VERT.ZOEKEN-achtige logica toe om te controleren of kolommen bestaan
Fout 3: Recursie zonder eindvoorwaarde
Probleem: Power Query hangt of geeft een stack overflow-fout.
Oorzaak: Je functie roept zichzelf aan zonder stopconditie.
Oplossing:
– Voeg altijd een eindvoorwaarde toe bij recursieve functies:
(n as number) =>
if n <= 0 then 1
else n * @fnFactoriaal(n - 1)
- Het
@-symbool is nodig om de functie binnen zichzelf aan te roepen
Fout 4: Prestatieproblemen bij grote datasets
Probleem: De query wordt extreem traag na toevoegen van een functie.
Oorzaak: De functie voert complexe berekeningen uit op elke rij, of maakt herhaaldelijk verbinding met externe bronnen.
Oplossing:
– Buffer tabellen die je meerdere keren gebruikt: Table.Buffer(MijnTabel)
– Vermijd functies die per rij een database-query uitvoeren
– Overweeg de transformatie op tabelniveau in plaats van per rij
– Lees meer over optimalisatie in ons artikel over externe gegevens importeren
Fout 5: Functie wordt niet herkend als functie
Probleem: Je query toont een tabel of waarde in plaats van een functie-interface.
Oorzaak: De syntaxis van de functiedefinitie is onjuist, of de let-expressie retourneert geen functie.
Oplossing:
– Zorg dat de functiedefinitie begint met (parameter) =>
– Bij een let-expressie moet het laatste element de functie zijn:
let
MijnFunctie = (x) => x * 2
in
MijnFunctie
- Niet:
let
MijnFunctie = (x) => x * 2,
Test = MijnFunctie(5)
in
Test // Dit retourneert een waarde, geen functie
Handige ingebouwde M-functies
Voordat je een eigen functie maakt, controleer of er al een ingebouwde functie bestaat. Hier zijn de meest gebruikte:
Tekstfuncties
| Functie | Doel | Voorbeeld |
|---|---|---|
Text.Upper |
Naar hoofdletters | Text.Upper("abc") = “ABC” |
Text.Lower |
Naar kleine letters | Text.Lower("ABC") = “abc” |
Text.Trim |
Spaties verwijderen | Text.Trim(" x ") = “x” |
Text.Replace |
Tekst vervangen | Text.Replace("abc","a","x") = “xbc” |
Text.Start |
Eerste n tekens | Text.Start("Excel",2) = “Ex” |
Text.End |
Laatste n tekens | Text.End("Excel",2) = “el” |
Getallenfuncties
| Functie | Doel | Voorbeeld |
|---|---|---|
Number.Round |
Afronden | Number.Round(3.456, 2) = 3.46 |
Number.Abs |
Absolute waarde | Number.Abs(-5) = 5 |
Number.Power |
Macht | Number.Power(2,3) = 8 |
Datumfuncties
| Functie | Doel | Voorbeeld |
|---|---|---|
Date.Year |
Jaar ophalen | Date.Year(#date(2026,3,15)) = 2026 |
Date.Month |
Maand ophalen | Date.Month(#date(2026,3,15)) = 3 |
Date.AddMonths |
Maanden optellen | Date.AddMonths(#date(2026,1,1), 3) = 1-apr-2026 |
Lijstfuncties
| Functie | Doel | Voorbeeld |
|---|---|---|
List.Sum |
Som van lijst | List.Sum({1,2,3}) = 6 |
List.Average |
Gemiddelde | List.Average({1,2,3}) = 2 |
List.Max |
Maximum | List.Max({1,2,3}) = 3 |
List.Distinct |
Unieke waarden | List.Distinct({1,1,2}) = {1,2} |
Voor meer Excel-functies zie ons Excel formules overzicht.
FAQ: Veelgestelde vragen over Power Query functies
Wat is het verschil tussen een query en een functie in Power Query?
Een query retourneert data (meestal een tabel), terwijl een functie een herbruikbaar stuk logica is dat parameters accepteert en een resultaat teruggeeft. Een functie begint met (parameters) =>, een query met let ... in.
Hoe deel ik functies tussen verschillende Excel-bestanden?
Je kunt functies exporteren door de query naar een apart bestand op te slaan. Gebruik Gegevens ophalen > Uit bestand > Uit Excel-werkmap om de functie in een ander bestand te importeren. Alternatief: kopieer de M-code via de Geavanceerde editor.
Kan ik functies combineren (de ene functie in de andere aanroepen)?
Ja, functies kunnen andere functies aanroepen. Definieer eerst de basisfunctie, en gebruik deze dan in een complexere functie:
fnDubbel = (x) => x * 2,
fnViervoud = (x) => fnDubbel(fnDubbel(x))
Hoe maak ik een parameter optioneel?
Gebruik het optional keyword:
(vereist as text, optional optioneel as text) =>
if optioneel = null then vereist else vereist & " " & optioneel
Werken Power Query functies ook in Power BI?
Ja, Power Query functies werken identiek in Excel en Power BI. De M-taal is dezelfde, alleen de interface verschilt iets.
Hoe debug ik een functie die niet werkt?
- Test de functie eerst met eenvoudige invoerwaarden
- Voeg tijdelijke stappen toe in de let-expressie om tussenresultaten te inspecteren
- Gebruik
try ... otherwiseom fouten af te vangen - Controleer datatypes van je parameters
Wat is het verschil tussen een aangepaste kolom en een functie?
Een aangepaste kolom is een inline-formule die specifiek is voor die query. Een functie is een aparte, herbruikbare query die je in meerdere contexten kunt toepassen. Gebruik functies voor logica die je vaker nodig hebt.
Kan ik Excel-functies zoals VERT.ZOEKEN gebruiken in Power Query?
Nee, Power Query gebruikt M-code, niet Excel-formules. Vergelijkbare functionaliteit bereik je met Table.SelectRows of Table.NestedJoin. Lees meer over de Power Query-versie van zoekfuncties in ons artikel over Power Query tabellen samenvoegen.
Samenvatting
Power Query functies zijn een krachtige manier om je datatransformaties te standaardiseren en te automatiseren:
- Basisfuncties:
(parameter) => transformatie - Complexe functies: gebruik een
let...inblok voor meerdere stappen - Herbruikbaarheid: pas dezelfde logica toe op meerdere tabellen of bestanden
- Foutafhandeling: gebruik
try...otherwisevoor robuuste code - Naamgeving: begin met
fnvoor herkenbaarheid
Begin met eenvoudige functies zoals tekstopschoning of datumstandaardisatie, en bouw van daaruit complexere oplossingen. Functies zijn de sleutel tot schaalbare en onderhoudbare Power Query-oplossingen.
Hulp nodig bij Excel?
Kom je er niet uit met Power Query functies? Ik help je graag verder.
Neem contact op:
– WhatsApp: Stuur een bericht
– E-mail: w.bouwmeester@bouwmeesterconsultancy.nl
– Telefoon: +31 6 28963636
Of bekijk mijn Excel hulp diensten voor professionele ondersteuning.
Gerelateerde artikelen
- Power Query in Excel: data importeren en transformeren
- Power Query tabellen samenvoegen: merge en append
- LAMBDA functie in Excel 365: eigen functies maken
- Externe gegevens importeren in Excel
Bekijk ook: Kom je er niet uit? | VBA specialist | Vrijblijvende offerte | Excel laten bouwen





