Naar inhoud
hulpbij
hulpbijpowerbi

Excel-formule naar DAX vertalen in Power BI (2026)

Vertaal een Excel-formule betrouwbaar naar DAX in Power BI. Kies een measure of kolom en zet celbereiken om naar modelkolommen, relaties en filtercontext.

Een Excel-formule vertaal je niet woord voor woord naar DAX: bepaal eerst of je één resultaat per bronrij of een dynamisch resultaat per rapportfilter nodig hebt. Vervang daarna celverwijzingen en bereiken door modelkolommen, relaties en een expliciete rij- of filtercontext.

Het kernverschil: cellen tegenover een datamodel

In Excel kan =B2*C2 uitsluitend naar twee cellen op dezelfde rij wijzen. Een DAX-formule werkt met tabellen en kolommen uit een semantisch model. Dezelfde measure wordt vervolgens opnieuw berekend voor iedere combinatie van visualrijen, slicers en rapportfilters.

Microsoft legt in DAX-basis voor Power BI uit dat rijcontext de huidige rij bepaalt en filtercontext de zichtbare subset van het model. Dit verschil verklaart waarom een bekende Excel-functienaam soms gelijk blijft, maar de uiteindelijke DAX-formule toch anders wordt.

Vertaal daarom eerst de bedoeling:

  • B2*C2 betekent meestal: bereken een waarde per verkoopregel;
  • SOM.ALS betekent: aggregeer alleen rijen die aan voorwaarden voldoen;
  • VERT.ZOEKEN betekent: haal een attribuut op via een sleutel;
  • $H$2 betekent: gebruik één vaste of door de gebruiker gekozen parameter;
  • een draaitabeltotaal betekent: bereken binnen de filters van die cel.

Pas daarna kies je functies.

Blijft de berekening bewust in een spreadsheet, bekijk dan hoe je Excel-formules in Google Sheets gebruikt zonder de verwachte uitkomst uit het oog te verliezen.

Wil je de Excel-kant eerst precies vaststellen, gebruik dan het overzicht van Excel-formules en functies als naslag voordat je de logica naar DAX vertaalt. Voor een afgebakende analyse van een werkkopie kun je daarnaast de gecontroleerde route voor ChatGPT met Excel volgen.

Snelle vertaallijst

Deze patronen zijn een startpunt, geen automatische zoek-en-vervanglijst:

  • SOM: SUM(Tabel[Kolom]) voor een bestaande numerieke modelkolom.
  • SOMPRODUCT: vaak SUMX(Tabel, expressie) wanneer de berekening eerst per rij moet plaatsvinden.
  • SOM.ALS, SOMMEN.ALS en GEMIDDELDE.ALS: een basisaggregatie binnen CALCULATE met bewuste filters.
  • AANTAL.ALS en AANTALLEN.ALS: vaak CALCULATE met COUNTROWS, maar DISTINCTCOUNT als je unieke objecten bedoelt.
  • VERT.ZOEKEN en X.ZOEKEN: bij voorkeur een modelrelatie en een dimensiekolom, of RELATED in rijcontext; soms LOOKUPVALUE.
  • ALS en ALS.VOORWAARDEN: IF of SWITCH, met volledige booleaanse voorwaarden.
  • EN en OF: de operators && en ||, of de functies AND en OR voor twee argumenten.
  • ALS.FOUT: los de specifieke foutoorzaak op; gebruik bij een deling meestal DIVIDE.
  • FILTER en UNIEK: vaak FILTER, VALUES of DISTINCT, maar deze leveren tabellen op en niet vanzelf één measurewaarde.
  • JAAR, MAAND en DAG: YEAR, MONTH en DAY, al is een aparte datumdimensie meestal geschikter voor assen en slicers.

Kies eerst measure, berekende kolom of Power Query

Power BI biedt meerdere berekeningsopties. Voor een vertaling uit Excel zijn deze drie meestal relevant:

  • Power Query-kolom: gebruik M wanneer je een bronwaarde tijdens het laden wilt opschonen, splitsen, samenvoegen of typeren.
  • Berekende kolom: gebruik DAX wanneer iedere modelrij een eigen waarde of label nodig heeft dat je als as, slicer, rij of filter wilt gebruiken. Een standaard berekende kolom in een Import-model wordt bij refresh berekend en opgeslagen. Controleer bij onderlinge verwijzingen ook op een circulaire afhankelijkheid tussen berekende kolommen.
  • Measure: gebruik DAX wanneer het resultaat moet reageren op de actuele filtercontext. Measures worden op aanvraag berekend en hun resultaten worden niet als kolom opgeslagen.

Een Excel-rijformule wordt dus niet automatisch een berekende kolom. Als je alleen het dynamische totaal nodig hebt, vermijdt een measure met een iterator een extra opgeslagen Import-kolom. De berekening vindt dan wel op querytijd plaats; test bij grote tabellen ook de responstijd. Een visual calculation kan geschikt zijn voor een berekening over al geaggregeerde waarden binnen één visual, maar vervangt geen herbruikbare modelmeasure.

Stap voor stap een Excel-formule naar DAX vertalen

1. Schrijf de uitkomst in gewone taal

Noteer wat één resultaat voorstelt. Schrijf bijvoorbeeld: “tel het bedrag van betaalde verkoopregels op binnen de filters van het rapport” of “geef iedere verkoopregel de productgroep van zijn productcode”.

Vermeld ook of het resultaat een getal, tekst, datum, Boolean of tabel moet zijn. Daarmee voorkom je dat een tabeluitdrukking per ongeluk op een plek voor één scalar terechtkomt.

2. Bepaal de korrel

Stel per tabel vast waarop één rij slaat: order, orderregel, product, klant of datum. Controleer bij de modelrelaties of dimensiesleutels aan de één-kant uniek zijn en of de feitentabel één rij per bedoelde transactie of gebeurtenis bevat.

Een Excel-zoekformule kan stil de eerste overeenkomst pakken. In een datamodel kunnen dubbele sleutels juist een multiple-values-fout veroorzaken. Los de sleutelkwaliteit op in plaats van willekeurig één resultaat te kiezen.

3. Vervang cellen en bereiken door modelobjecten

Vertaal:

  • B:B of Tabel1[Bedrag] naar een volledige DAX-kolomverwijzing zoals Sales[Bedrag];
  • H2 naar een vaste constante, measure, parameter of geselecteerde dimensiewaarde;
  • een Excel-tabelnaam naar de juiste modeltabel;
  • een zoekbereik naar een relatie tussen feit- en dimensietabel.

Selecteer namen via IntelliSense. Krijg je daarna een melding dat een kolom ontbreekt of niet mag worden gebruikt, volg dan de DAX-kolomdecoder.

4. Kies het berekeningsobject

Maak alleen een berekende kolom wanneer je het rijresultaat als modelveld nodig hebt. Maak een measure voor totalen, percentages, KPI's en resultaten die op slicers moeten reageren.

Kies niet op basis van de knop die toevallig openstaat. Dezelfde expressie kan in een berekende kolom geldige rijcontext hebben en als measure een single-value-fout geven.

5. Bouw eerst een basisberekening

Begin zonder extra filters:

Omzet =
SUM(Sales[Bedrag])

Zet deze measure in een kaart en in een tabel met een bekende dimensie. Controleer of relaties en datatypen kloppen voordat je CALCULATE, FILTER of lookupfuncties toevoegt.

6. Voeg één filter of iterator per keer toe

Voeg eerst één voorwaarde toe en test nul, één en meerdere overeenkomsten. Voeg daarna pas de volgende voorwaarde toe. Bij een lange formule kun je tussenresultaten in VAR zetten en tijdelijk één variabele na RETURN teruggeven.

Komt de formule niet door de parser, controleer dan haakjes, quotes en separators met de DAX-syntaxisdecoder. Gebruik bij een andere melding het centrale DAX-diagnosepad.

De voorbeelden op deze pagina gebruiken komma's. Power BI gebruikt die standaard, maar volgens Microsoft kun je in de regionale instellingen ook gelokaliseerde DAX-scheidingstekens inschakelen.

7. Vergelijk Excel en Power BI in dezelfde context

Filter beide oplossingen op exact dezelfde periode, klant, regio en status. Test:

  1. één controleerbare detailrij;
  2. één groep met meerdere rijen;
  3. nul, één en meerdere slicerselecties;
  4. een subtotaal en het eindtotaal;
  5. ontbrekende, dubbele en lege sleutels;
  6. nul, BLANK, tekstgetallen en echte getallen;
  7. het resultaat na een modelrefresh.

Een gelijk eindtotaal is onvoldoende bewijs. Twee foutieve berekeningen kunnen toevallig hetzelfde totaal tonen.

Excel SOM en SOMPRODUCT naar SUM of SUMX

Een bestaande numerieke kolom tel je op met SUM:

Omzet =
SUM(Sales[Regelbedrag])

Moet Power BI eerst per rij Aantal * Eenheidsprijs berekenen en daarna optellen, gebruik dan de iterator SUMX:

Omzet =
SUMX(
    Sales,
    Sales[Aantal] * Sales[Eenheidsprijs]
)

Dit is het gebruikelijke patroon voor een Excel-formule als =SOMPRODUCT(Verkoop[Aantal];Verkoop[Eenheidsprijs]).

SUMX evalueert de expressie voor iedere rij van Sales en telt de numerieke uitkomsten op. Heb je Regelbedrag ook als categorie of filter nodig, dan kan een berekende kolom passend zijn:

Regelbedrag =
Sales[Aantal] * Sales[Eenheidsprijs]

Maak niet zowel de kolom als dezelfde rijberekening in meerdere measures zonder reden. Kies één herbruikbare definitie en leg vast waar afronding plaatsvindt.

SOM.ALS, SOMMEN.ALS en GEMIDDELDE.ALS naar CALCULATE

Excel combineert aggregatie, bereik en criteria in één functie. In DAX maak je bij voorkeur eerst een basismeasure en wijzig je daarna de filtercontext met CALCULATE:

Betaalde omzet =
CALCULATE(
    [Omzet],
    KEEPFILTERS(Sales[Status] = "Betaald")
)

KEEPFILTERS zorgt hier dat een bestaand filter op Sales[Status] niet wordt vervangen, maar wordt doorsneden met "Betaald". Laat KEEPFILTERS alleen weg als het juist de businessregel is om het bestaande filter op die kolom te overschrijven.

Een Excel-criteriumcel met regio hoef je vaak niet na te bouwen. Zet DimRegio[Regio] in een slicer en laat de relatie die filtercontext doorgeven aan [Omzet]. Voor GEMIDDELDE.ALS gebruik je hetzelfde patroon met een basismeasure op AVERAGE.

AANTAL.ALS en AANTALLEN.ALS naar COUNTROWS

Wil je verkoopregels tellen die aan twee vaste voorwaarden voldoen:

Betaalde regels Nederland =
CALCULATE(
    COUNTROWS(Sales),
    KEEPFILTERS(Sales[Status] = "Betaald"),
    KEEPFILTERS(Sales[Land] = "Nederland")
)

Is Sales[OrderId] gegarandeerd gevuld, gebruik dan DISTINCTCOUNT wanneer je unieke orders bedoelt. Wil je lege ID's uitsluiten, gebruik dan DISTINCTCOUNTNOBLANK of een expliciet filter. De keuze tussen rijen en unieke, niet-lege ID's is een businessregel, geen uitwisselbare optimalisatie.

Volgens de COUNTROWS-documentatie kan een lege invoertabel BLANK opleveren. Dwing alleen nul af wanneer je rapportbetekenis dat vereist.

VERT.ZOEKEN en X.ZOEKEN naar een relatie

Maak eerst een many-to-one-relatie van Sales[Productcode] naar de unieke sleutel DimProduct[Productcode]. Gebruik DimProduct[Productgroep] vervolgens rechtstreeks in een visual. Heb je in rijcontext toch een berekende kolom in Sales nodig:

Productgroep =
RELATED(DimProduct[Productgroep])

RELATED volgt een bestaande relatie en vereist rijcontext. Zonder bruikbare relatie kun je gericht LOOKUPVALUE gebruiken:

Productgroep zonder relatie =
LOOKUPVALUE(
    DimProduct[Productgroep],
    DimProduct[Productcode],
    Sales[Productcode],
    "Niet gevonden"
)

Microsoft adviseert in de LOOKUPVALUE-documentatie in de meeste gevallen RELATED als de relatie al bestaat. Bij geen overeenkomst geeft LOOKUPVALUE BLANK of het opgegeven alternatief terug. Bij meerdere passende rijen met verschillende resultaatwaarden volgt een fout of het alternatief. Zo'n alternatief kan een dubbele sleutel dus maskeren; valideer altijd eerst de uniciteit van de zoeksleutel.

Controleer ook hoe de oude Excel-formule zocht. VERT.ZOEKEN gebruikt standaard een benaderende overeenkomst wanneer het vierde argument ontbreekt. X.ZOEKEN kan naast exact zoeken ook benaderende overeenkomsten, jokertekens en verschillende zoekrichtingen gebruiken. LOOKUPVALUE zoekt alleen exact en is daarom geen één-op-éénvervanger voor al die modi. Modelleer een schaal- of intervalzoekactie expliciet met grenswaarden en test de randen.

Laat je ook niet misleiden door de naam van de nieuwe DAX-functie LOOKUP. Die navigeert binnen een visual calculation en is niet de opvolger van Excel X.ZOEKEN.

ALS, EN en OF naar IF, SWITCH en operators

Een Excel-rijclassificatie kan als berekende kolom:

Orderlabel =
IF(
    Sales[Bedrag] >= 1000 && Sales[Marge] > 0,
    "Hoog",
    "Overig"
)

Gebruik && voor EN en || voor OF. Voor meerdere exclusieve uitkomsten is SWITCH(TRUE(), ...) vaak leesbaarder dan veel geneste IF-functies. Gebruik in een measure andere measures zoals [Omzet] en [Marge] in plaats van kale modelkolommen.

Krijg je bij een measure alsnog “A single value for column”, voeg dan niet automatisch MAX toe. Bepaal of je één selectie, een echte aggregatie of een iterator nodig hebt.

ALS.FOUT en delen door nul

DAX heeft IFERROR, maar Microsoft adviseert in de best practice voor foutfuncties eerst datakwaliteit en datatypen te herstellen en waar mogelijk fouttolerante functies te gebruiken.

Voor een percentage is DIVIDE meestal de juiste vertaling:

Marge % =
DIVIDE(
    [Marge],
    [Omzet]
)

Als [Omzet] nul of BLANK is, retourneert DIVIDE standaard BLANK. Geef alleen een alternatief als nul of een andere uitkomst werkelijk de businessbetekenis is. Een tekstwaarde in een getalkolom herstel je liever bij de bron of in Power Query; gebruik bij zo'n melding de DAX-tekstconversiedecoder.

Wat doe je met een vaste Excel-cel zoals $H$2?

Een absolute celverwijzing kan in Power BI verschillende betekenissen hebben:

  • vaste bedrijfsregel: leg een constante of aparte configuratiewaarde vast;
  • keuze van de gebruiker: gebruik een slicer of parameter;
  • waarde uit één zichtbare rij: gebruik alleen SELECTEDVALUE wanneer nul of meerdere waarden bewust worden afgehandeld;
  • kenmerk van een gerelateerde tabel: gebruik de dimensiekolom en relatie.

Kopieer de celwaarde niet zonder meer als hardcoded tekst in iedere measure. Dan reageert het rapport niet meer op modelwijzigingen en ontstaat verspreide logica.

Let op bij DirectQuery

Controleer per gebruikte functie en objecttype de actuele beperkingen. Functiepagina's voor onder meer SUMX, CALCULATE, LOOKUPVALUE en COUNTROWS vermelden beperkingen voor gebruik in DirectQuery-berekende kolommen en RLS-regels. Dat betekent niet automatisch dat dezelfde functie als measure verboden is.

Een standaard berekende kolom op een DirectQuery-tabel wordt volgens de actuele documentatie over berekende kolommen niet gematerialiseerd zoals een standaard Import-kolom en wordt op querytijd afgeleid. Test daarom naast correctheid ook de bronquery en responstijd.

Veelgemaakte fouten

  • Alleen de functienaam vertalen. Het Excel-bereik en de criteriumcel hebben nog geen betekenis in het datamodel.
  • Alles als berekende kolom maken. Dynamische totalen horen meestal in measures en opgeslagen kolommen vergroten een Import-model.
  • SUM rond een rijexpressie zetten. SUM verwacht een kolom; gebruik SUMX wanneer je per rij eerst een expressie moet evalueren.
  • Een slicercriterium hardcoderen. Daardoor overschrijft of negeert de formule mogelijk de bedoelde gebruikersfilter.
  • LOOKUPVALUE gebruiken terwijl een relatie mogelijk is. Je dupliceert modellogica en mist problemen met sleutelkwaliteit.
  • Blind MAX, IFERROR of nul toevoegen. De formule lijkt te werken terwijl een context-, datatype- of datakwaliteitsprobleem blijft bestaan.
  • Nederlandse Excel-functies in DAX typen. Kies de DAX-functie via IntelliSense en controleer de ingestelde separators.
  • Alleen het eindtotaal vergelijken. Detailrijen, subtotalen en meervoudige selecties kunnen nog verkeerd zijn.
  • Tekstgetallen en echte getallen mengen. Vergelijkingen en relaties vereisen passende datatypen.

Zo houd je vertaalde DAX onderhoudbaar

Maak eerst eenvoudige basismeasures zoals [Omzet], [Kosten] en [Aantal orders]. Bouw afgeleide measures daarop voort, gebruik duidelijke variabelen en volg Microsofts verwijzingsconventie: schrijf modelkolommen volledig gekwalificeerd als Tabel[Kolom] en measures ongekwalificeerd als [Measure].

Leg relaties en sleutels vast voordat je lookupcode toevoegt. Test iedere measure met dezelfde kleine controleset en documenteer welke filters zij toevoegt, behoudt of verwijdert. Bekijk voor meer DAX-handleidingen en foutdecoders de Power BI-hub.

Officiële bronnen

Veelgestelde vragen

Kan ik iedere Excel-formule rechtstreeks naar DAX vertalen?
Nee. DAX rekent met modeltabellen, kolommen, relaties en context in plaats van losse werkbladcellen. Sommige Excel-logica hoort daarom in Power Query, het datamodel of de visual en niet in één DAX-formule.
Kies ik een measure of een berekende kolom?
Kies een measure als het resultaat moet reageren op slicers, filters en de groepering van een visual. Kies een berekende kolom voor een waarde of label per rij dat je ook als as, slicer of filter nodig hebt. Voor databewerking tijdens het laden is Power Query vaak logischer.
Wat is de DAX-versie van SOM.ALS of SOMMEN.ALS?
Er is geen automatische één-op-éénvertaling. Meestal maak je eerst een basismeasure met SUM en evalueer je die met CALCULATE in een aangepaste filtercontext. Filters uit slicers en gerelateerde dimensietabellen hoef je niet opnieuw in de formule te zetten.
Wat gebruik ik in DAX in plaats van VERT.ZOEKEN of X.ZOEKEN?
Maak bij voorkeur een relatie en gebruik de dimensiekolom rechtstreeks of RELATED wanneer je in rijcontext één gerelateerde waarde nodig hebt. Gebruik LOOKUPVALUE alleen als een bruikbare relatie ontbreekt en de zoekvoorwaarden hoogstens één onderscheiden resultaat opleveren.
Waarom wijkt mijn Power BI-totaal af van Excel?
Een measure wordt voor iedere detailrij, ieder subtotaal en het eindtotaal opnieuw binnen de eigen filtercontext geëvalueerd. Het eindtotaal hoeft daardoor geen optelsom van de zichtbare rijresultaten te zijn. Controleer of de businessregel om herberekening of om een iterator over de rijen vraagt.
Moet ik Nederlandse functienamen of puntkomma's gebruiken?
Vertaal DAX-functienamen niet zelf, maar kies ze via IntelliSense, bijvoorbeeld SUM en IF. Power BI gebruikt standaard komma's als argumentscheiding, maar gelokaliseerde DAX-scheidingstekens kunnen zijn ingeschakeld.
Wat is de DAX-vervanger voor ALS.FOUT?
DAX heeft IFERROR, maar gebruik die niet automatisch. Gebruik DIVIDE voor een deling waarvan de noemer nul of BLANK kan zijn, herstel verkeerde datatypen bij de bron en bepaal bewust of een ontbrekend resultaat BLANK, nul of een andere waarde moet zijn.

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.