gebeurtenis
31 mrt, 23 - 2 apr, 23
De ultieme Microsoft Fabric-, Power BI-, SQL- en AI-communitygebeurtenis. 31 maart tot 2 april 2025.
Zorg dat u zich vandaag nog registreertDeze browser wordt niet meer ondersteund.
Upgrade naar Microsoft Edge om te profiteren van de nieuwste functies, beveiligingsupdates en technische ondersteuning.
Data Analysis Expressions (DAX) is een formule-expressietaal die wordt gebruikt in Analysis Services, Power BI en Power Pivot in Excel. DAX-formules omvatten functies, operators en waarden om geavanceerde berekeningen en query's uit te voeren op gegevens in gerelateerde tabellen en kolommen in tabellaire gegevensmodellen.
Dit artikel bevat slechts een eenvoudige inleiding tot de belangrijkste concepten in DAX. Dax wordt beschreven zoals het van toepassing is op alle producten die deze gebruiken. Sommige functies zijn mogelijk niet van toepassing op bepaalde producten of gebruiksvoorbeelden. Raadpleeg de documentatie van uw product waarin de specifieke implementatie van DAX wordt beschreven.
DAX-formules worden gebruikt in metingen, berekende kolommen, berekende tabellen en beveiliging op rijniveau.
Metingen zijn dynamische berekeningsformules waarbij de resultaten veranderen, afhankelijk van de context. Metingen worden gebruikt in rapporten die ondersteuning bieden voor het combineren en filteren van modelgegevens met behulp van meerdere kenmerken, zoals een Power BI-rapport of Excel-draaitabel of -draaigrafiek. Metingen worden gemaakt met behulp van de DAX-formulebalk in de modelontwerper.
Een formule in een meting kan standaardaggregatiefuncties gebruiken die automatisch worden gemaakt met behulp van de functie Autosom, zoals AANTAL of SOM, of u kunt uw eigen formule definiëren met behulp van de DAX-formulebalk. Benoemde metingen kunnen worden doorgegeven als argument voor andere metingen.
Wanneer u een formule definieert voor een meting op de formulebalk, wordt met de functie Knopinfo een voorbeeld weergegeven van wat de resultaten voor het totaal in de huidige context zijn, echter worden de resultaten elders niet onmiddellijk getoond. De reden waarom u de (gefilterde) resultaten van de berekening niet direct kunt zien, is omdat het resultaat van een meting niet kan worden bepaald zonder context. Voor het evalueren van een meting is een rapportageclienttoepassing vereist die de context kan bieden die nodig is om de gegevens op te halen die relevant zijn voor elke cel en vervolgens de expressie voor elke cel te evalueren. Deze client kan een Excel-draaitabel of -draaigrafiek, een Power BI-rapport of een tabelexpressie zijn in een DAX-query in SQL Server Management Studio (SSMS).
Ongeacht de client wordt een afzonderlijke query uitgevoerd voor elke cel in de resultaten. Dat wil zeggen dat elke combinatie van rij- en kolomkoppen in een draaitabel, of elke selectie van slicers en filters in een Power BI-rapport, een andere subset van gegevens genereert waarvoor de meting wordt berekend. Gebruik bijvoorbeeld deze zeer eenvoudige metingsformule:
Total Sales = SUM([Sales Amount])
Wanneer een gebruiker de meting TotalSales in een rapport plaatst en vervolgens de kolom Productcategorie uit een tabel Product in Filters plaatst, wordt de som van verkoopbedrag berekend en weergegeven voor elke productcategorie.
In tegenstelling tot berekende kolommen bevat de syntaxis voor een meting de naam van de meting voorafgaand aan de formule. In het zojuist opgegeven voorbeeld wordt de naam Totale verkoop weergegeven vóór de formule. Nadat u een meting hebt gemaakt, worden de naam en de definitie ervan weergegeven in de lijst velden van de rapportageclienttoepassing en is afhankelijk van perspectieven en rollen beschikbaar voor alle gebruikers van het model.
Zie voor meer informatie:
Maatregelen in Power BI Desktop
Maatregelen in Analysis Services
Metingen in Power Pivot
Een berekende kolom is een kolom die u toevoegt aan een bestaande tabel (in de ontwerpfunctie voor modellen) en vervolgens een DAX-formule maakt waarmee de waarden van de kolom worden gedefinieerd. Wanneer een berekende kolom een geldige DAX-formule bevat, worden waarden voor elke rij berekend zodra de formule is ingevoerd. Waarden worden vervolgens opgeslagen in het gegevensmodel in het geheugen. Bijvoorbeeld in een datumtabel wanneer de formule wordt ingevoerd in de formulebalk:
= [Calendar Year] & " Q" & [Calendar Quarter]
Een waarde voor elke rij in de tabel wordt berekend door waarden te nemen uit de kolom Kalenderjaar (in dezelfde tabel Datum), een spatie en de hoofdletter Q toe te voegen en vervolgens de waarden toe te voegen uit de kolom Kalenderkwartaal (in dezelfde tabel Datum). Het resultaat voor elke rij in de berekende kolom wordt onmiddellijk berekend en wordt bijvoorbeeld weergegeven als 2017 Q1. Kolomwaarden worden alleen opnieuw berekend als de tabel of een gerelateerde tabel wordt verwerkt (vernieuwd) of het model uit het geheugen wordt verwijderd en vervolgens opnieuw wordt geladen, bijvoorbeeld bij het sluiten en opnieuw openen van een Power BI Desktop-bestand.
Zie voor meer informatie:
Berekende kolommen in Power BI Desktop
berekende kolommen in Analysis Services-
Berekende Kolommen in Power Pivot.
Een berekende tabel is een berekend object, op basis van een formule-expressie, afgeleid van alle of een deel van andere tabellen in hetzelfde model. In plaats van waarden op te vragen en te laden in de kolommen van de nieuwe tabel uit een gegevensbron, definieert een DAX-formule de waarden van de tabel.
Berekende tabellen kunnen handig zijn in een rollenspeldimensie. Bijvoorbeeld de Datumtabel, zoals OrderDate, ShipDate of DueDate, afhankelijk van de vreemde-sleutelrelatie. Door expliciet een berekende tabel voor ShipDate te maken, krijgt u een zelfstandige tabel die beschikbaar is voor query's, net zoals elke andere tabel. Berekende tabellen zijn ook handig bij het configureren van een gefilterde rijenset of een subset of superset van kolommen uit andere bestaande tabellen. Hierdoor kunt u de oorspronkelijke tabel intact houden terwijl u variaties van die tabel maakt ter ondersteuning van specifieke scenario's.
Berekende tabellen ondersteunen relaties met andere tabellen. De kolommen in de berekende tabel hebben gegevenstypen, opmaak en kunnen deel uitmaken van een gegevenscategorie. Berekende tabellen kunnen worden benoemd en worden weergegeven of verborgen, net als elke andere tabel. Berekende tabellen worden opnieuw berekend als een van de tabellen waaruit gegevens worden opgehaald, worden vernieuwd of bijgewerkt.
Zie voor meer informatie:
Berekende tabellen in Power BI Desktop
Berekende tabellen in Analysis Services.
Met beveiliging op rijniveau moet een DAX-formule evalueren naar een Booleaanse TRUE
/FALSE
voorwaarde, waarmee wordt gedefinieerd welke rijen kunnen worden geretourneerd door de resultaten van een query door leden van een bepaalde rol. Bijvoorbeeld, voor leden van de rol Sales, de tabel Klanten met de volgende DAX-formule:
= Customers[Country] = "USA"
Leden van de rol Verkoop kunnen alleen gegevens weergeven voor klanten in de VS en aggregaties, zoals SUM, worden alleen geretourneerd voor klanten in de VS. Beveiliging op rijniveau is niet beschikbaar in Power Pivot in Excel.
Wanneer u beveiliging op rij-niveau definieert met DAX-formules, creëert u een toegestane rijenverzameling. Hiermee wordt de toegang tot andere rijen niet geweigerd; maar worden ze gewoon niet geretourneerd als deel van de toegestane rijenset. Andere rollen kunnen toegang verlenen tot de rijen die zijn uitgesloten door de DAX-formule. Als een gebruiker lid is van een andere rol en de beveiliging op rijniveau van die rol toegang biedt tot die specifieke rijenset, kan de gebruiker gegevens voor die rij weergeven.
Beveiligingsformules op rijniveau zijn van toepassing op de opgegeven rijen en gerelateerde rijen. Wanneer een tabel meerdere relaties heeft, passen filters beveiliging toe voor de relatie die actief is. Beveiligingsformules op rijniveau zullen worden gecombineerd met andere formules die zijn gedefinieerd voor gerelateerde tabellen.
Zie voor meer informatie:
beveiliging op rijniveau (RLS) met Power BI-
Rollen in Analysis Services
DAX-query's kunnen worden gemaakt en uitgevoerd in SQL Server Management Studio (SSMS) en opensource-hulpprogramma's zoals DAX Studio (daxstudio.org). In tegenstelling tot DAX-berekeningsformules, die alleen kunnen worden gemaakt in tabellaire gegevensmodellen, kunnen DAX-query's ook worden uitgevoerd op Multidimensionale Analysis Services-modellen. DAX-query's zijn vaak gemakkelijker te schrijven en efficiënter dan MDX-query's (Multidimensional Data Expressions).
Een DAX-query is een instructie, vergelijkbaar met een SELECT-instructie in T-SQL. Het meest eenvoudige type DAX-query is een statement evalueren. Bijvoorbeeld
EVALUATE
( FILTER ( 'DimProduct', [SafetyStockLevel] < 200 ) )
ORDER BY [EnglishProductName] ASC
Retourneert in resultaten een tabel met alleen die producten met een SafetyStockLevel kleiner dan 200, in oplopende volgorde per EnglishProductName.
U kunt metingen maken als onderdeel van de query. Metingen bestaan alleen voor de duur van de query. Voor meer informatie, zie DAX-queries.
DAX-formules zijn essentieel voor het maken van berekeningen in berekende kolommen en metingen en het beveiligen van uw gegevens met behulp van beveiliging op rijniveau. Als u formules wilt maken voor berekende kolommen en metingen, gebruikt u de formulebalk boven aan het venster van de modelontwerper of de DAX-editor. Als u formules wilt maken voor beveiliging op rijniveau, gebruikt u het dialoogvenster Rollenbeheer of Rollen beheren. Informatie in deze sectie is bedoeld om u op weg te helpen met het begrijpen van de basisprincipes van DAX-formules.
DAX-formules kunnen heel eenvoudig of heel complex zijn. In de volgende tabel ziet u enkele voorbeelden van eenvoudige formules die kunnen worden gebruikt in een berekende kolom.
Formule | Definitie |
---|---|
= TODAY() |
Hiermee voegt u de datum van vandaag in elke rij van een berekende kolom in. |
= 3 |
Hiermee voegt u de waarde 3 in elke rij van een berekende kolom in. |
= [Column1] + [Column2] |
Voegt de waarden toe in dezelfde rij van [Kolom1] en [Kolom2] en plaatst de resultaten in de berekende kolom van dezelfde rij. |
Of de formule die u maakt eenvoudig of complex is, u kunt de volgende stappen gebruiken bij het maken van een formule:
Elke formule moet beginnen met een gelijkteken (=).
U kunt een functienaam typen of selecteren of een expressie typen.
Begin met het typen van de eerste paar letters van de gewenste functie of naam en Automatisch aanvullen geeft een lijst met beschikbare functies, tabellen en kolommen weer. Druk op Tab om een item uit de lijst Automatisch aanvullen toe te voegen aan de formule.
U kunt ook op de knop Fx klikken om een lijst met beschikbare functies weer te geven. Als u een functie in de vervolgkeuzelijst wilt selecteren, gebruikt u de pijltoetsen om het item te markeren en klikt u op OK om de functie toe te voegen aan de formule.
Geef de argumenten aan de functie op door ze te selecteren in een vervolgkeuzelijst met mogelijke tabellen en kolommen of door waarden te typen.
Controleer op syntaxisfouten: zorg ervoor dat alle haakjes gesloten zijn en dat naar alle kolommen, tabellen en waarden correct wordt verwezen.
Druk op ENTER om de formule te accepteren.
Notitie
Zodra u de formule invoert en de formule wordt gevalideerd, wordt de kolom gevuld met waarden in een berekende kolom. Als u in een meting op Enter drukt, wordt de metingdefinitie met de tabel opgeslagen. Als een formule ongeldig is, wordt er een fout weergegeven.
In dit voorbeeld bekijken we een formule in een maatstaf met de naam Dagen in lopende kwartaal:
Days in Current Quarter = COUNTROWS( DATESBETWEEN( 'Date'[Date], STARTOFQUARTER( LASTDATE('Date'[Date])), ENDOFQUARTER('Date'[Date])))
Deze meting wordt gebruikt om een vergelijkingsverhouding te maken tussen een onvolledige periode en de vorige periode. De formule moet rekening houden met het aandeel van de verstreken periode en deze vergelijken met hetzelfde aandeel in de vorige periode. In dit geval geeft [Dagen huidig kwartaal tot heden]/[Dagen in huidig kwartaal] het aandeel dat is verstreken in de huidige periode.
Deze formule bevat de volgende elementen:
Formule-element | Beschrijving |
---|---|
Days in Current Quarter |
De naam van de meting. |
= |
Het gelijkteken (=) begint de formule. |
COUNTROWS |
COUNTROWS telt het aantal rijen in de Date-tabel |
() |
Het openen en sluiten van haakjes bepaalt argumenten. |
DATESBETWEEN |
De functie DATESBETWEEN retourneert de datums tussen de laatste datum voor elke waarde in de kolom Datum in de tabel Datum. |
'Date' |
Specificeert de tabel Datum. Tabellen staan tussen enkele aanhalingstekens. |
[Date] |
Hiermee wordt de kolom Datum in de tabel Datum gespecificeerd. Kolommen staan tussen vierkante haken. |
, |
|
STARTOFQUARTER |
De functie STARTOFQUARTER retourneert de datum van het begin van het kwartaal. |
LASTDATE |
De functie LASTDATE retourneert de laatste datum van het kwartaal. |
'Date' |
Geeft de Datum-tabel aan. |
[Date] |
Hiermee geeft u de kolom Datum in de tabel Datum op. |
, |
|
ENDOFQUARTER |
De functie ENDOFQUARTER |
'Date' |
Geeft de Datum-tabel op. |
[Date] |
Specificeert de kolom datum in de datumtabel. |
Met Automatisch aanvullen kunt u een geldige syntaxis voor formules invoeren door u opties te bieden voor elk element in de formule.
U kunt Formule AutoAanvullen gebruiken in het midden van een bestaande formule met geneste functies. De tekst direct vóór de invoegpositie wordt gebruikt om waarden weer te geven in de vervolgkeuzelijst en alle tekst na de invoegpositie blijft ongewijzigd.
Automatisch aanvullen voegt de sluitende haakjes van functies niet toe en stemt niet automatisch overeen met haakjes. U moet ervoor zorgen dat elke functie syntactisch juist is of dat u de formule niet kunt opslaan of gebruiken.
U kunt functies nesten, wat betekent dat u de resultaten van de ene functie als argument van een andere functie gebruikt. U kunt maximaal 64 functieniveaus in berekende kolommen nesten. Het nesten kan het echter lastig maken om formules te maken of problemen op te lossen. Veel functies zijn ontworpen om uitsluitend als genestelde functies gebruikt te worden. Deze functies retourneren een tabel, die niet rechtstreeks als resultaat kan worden opgeslagen; deze moet worden opgegeven als invoer voor een tabelfunctie. De functies SUMX, AVERAGEX en MINX vereisen bijvoorbeeld allemaal een tabel als het eerste argument.
Een functie is een benoemde formule binnen een expressie. De meeste functies hebben vereiste en optionele argumenten, ook wel parameters genoemd, als invoer. Wanneer de functie wordt uitgevoerd, wordt een waarde geretourneerd. DAX bevat functies die u kunt gebruiken om berekeningen uit te voeren met datums en tijden, voorwaardelijke waarden te maken, met tekenreeksen te werken, zoekacties uit te voeren op basis van relaties en de mogelijkheid om een tabel te herhalen om recursieve berekeningen uit te voeren. Als u bekend bent met Excel-formules, zien veel van deze functies er ongeveer als volgt uit; DAX-formules verschillen echter op de volgende belangrijke manieren:
Een DAX-functie verwijst altijd naar een volledige kolom of tabel. Als u alleen bepaalde waarden uit een tabel of kolom wilt gebruiken, kunt u filters toevoegen aan de formule.
Als u berekeningen per rij wilt aanpassen, biedt DAX functies waarmee u de huidige rijwaarde of een gerelateerde waarde als parameter kunt gebruiken om berekeningen uit te voeren die per context variëren. Zie Context in dit artikel voor meer informatie over de werking van deze functies.
DAX bevat veel functies die een tabel retourneren in plaats van een waarde. De tabel wordt niet weergegeven in een rapportageclient, maar wordt gebruikt om invoer te bieden aan andere functies. U kunt bijvoorbeeld een tabel ophalen en vervolgens de afzonderlijke waarden erin tellen of dynamische sommen berekenen voor gefilterde tabellen of kolommen.
DAX-functies bevatten een verscheidenheid aan time intelligence functies. Met deze functies kunt u datumbereiken definiëren of selecteren en dynamische berekeningen uitvoeren op basis van deze datums of het bereik. U kunt bijvoorbeeld sommen voor parallelle perioden vergelijken.
Aggregatiefuncties berekenen een (scalaire) waarde, zoals count, sum, average, minimum of maximum voor alle rijen in een kolom of tabel, zoals gedefinieerd door de expressie. Zie Aggregatiefunctiesvoor meer informatie.
De datum- en tijdfuncties in DAX zijn vergelijkbaar met datum- en tijdfuncties in Microsoft Excel. DAX-functies zijn echter gebaseerd op een datum/tijd gegevenstype vanaf 1 maart 1900. Zie datum- en tijdfunctiesvoor meer informatie.
De filterfuncties in DAX retourneren specifieke gegevenstypen, zoeken waarden in gerelateerde verhalen en filteren op gerelateerde waarden. De opzoekfuncties werken met behulp van tabellen en relaties, zoals een database. Met de filterfuncties kunt u gegevenscontext bewerken om dynamische berekeningen te maken. Zie Filterfunctiesvoor meer informatie.
De financiële functies in DAX worden gebruikt in formules die financiële berekeningen uitvoeren, zoals netto huidige waarde en rentabiliteit. Deze functies zijn vergelijkbaar met financiële functies die worden gebruikt in Microsoft Excel. Zie Financiële functiesvoor meer informatie.
Een informatiefunctie kijkt naar de cel of rij die als argument wordt opgegeven en geeft aan of de waarde overeenkomt met het verwachte type. De functie ISERROR retourneert bijvoorbeeld TRUE
als de waarde waarnaar u verwijst een fout bevat. Voor meer informatie, zie informatie-functies.
Logische functies reageren op een expressie om informatie over de waarden in de expressie te retourneren. Met de functie TRUE
kunt u bijvoorbeeld zien of een expressie die u evalueert een TRUE
waarde retourneert. Zie Logische functiesvoor meer informatie.
De wiskundige functies in DAX zijn vergelijkbaar met de wiskundige en trigonometrische excel-functies. Er zijn enkele kleine verschillen in de numerieke gegevenstypen die worden gebruikt door DAX-functies. Voor meer informatie, zie Wiskundige en trigonometrische functies.
Deze functies voeren unieke acties uit die niet kunnen worden gedefinieerd door een van de categorieën waartoe de meeste andere functies behoren. Zie Andere functiesvoor meer informatie.
Met relatiefuncties in DAX kunt u waarden uit een andere gerelateerde tabel retourneren, een bepaalde relatie opgeven die moet worden gebruikt in een expressie en kruislings filteren opgeven. Zie Relatiefunctiesvoor meer informatie.
Statistische functies berekenen waarden met betrekking tot statistische verdelingen en waarschijnlijkheid, zoals standaarddeviatie en aantal permutaties. Zie Statistische functiesvoor meer informatie.
Tekstfuncties in DAX zijn vergelijkbaar met hun tegenhangers in Excel. U kunt een deel van een tekenreeks retourneren, zoeken naar tekst in een tekenreeks of tekenreekswaarden samenvoegen. DAX biedt ook functies voor het controleren van de formateringen voor datums, tijden en getallen. Zie Text-functiesvoor meer informatie.
Met de time intelligence-functies in DAX kunt u berekeningen maken die gebruikmaken van ingebouwde kennis over kalenders en datums. Door tijd- en datumbereiken te gebruiken in combinatie met aggregaties of berekeningen, kunt u zinvolle vergelijkingen maken voor vergelijkbare perioden voor verkoop, voorraad enzovoort. Zie Time intelligence-functies (DAX)voor meer informatie.
Deze functies retourneren een tabel of bewerken bestaande tabellen. Met ADDCOLUMNS kunt u bijvoorbeeld berekende kolommen toevoegen aan een opgegeven tabel, of u kunt een samenvattingstabel retourneren via een set groepen met de functie SUMMARIZECOLUMNS. Zie functies voor tabelbewerkingvoor meer informatie.
U kunt variabelen in een expressie maken met behulp van VAR-. VAR is technisch gezien geen functie, het is een trefwoord om het resultaat van een expressie op te slaan als een benoemde variabele. Deze variabele kan vervolgens worden doorgegeven als argument voor andere metingexpressies. Bijvoorbeeld:
VAR
TotalQty = SUM ( Sales[Quantity] )
Return
IF (
TotalQty > 1000,
TotalQty * 0.95,
TotalQty * 1.25
)
In dit voorbeeld kan TotalQty worden doorgegeven als een benoemde variabele aan andere expressies. Variabelen kunnen van elk scalair gegevenstype zijn, inclusief tabellen. Het gebruik van variabelen in uw DAX-formules kan ongelooflijk krachtig zijn.
U kunt gegevens importeren in een model uit veel verschillende gegevensbronnen die verschillende gegevenstypen kunnen ondersteunen. Wanneer u gegevens in een model importeert, worden de gegevens geconverteerd naar een van de gegevenstypen van het tabellaire model. Wanneer de modelgegevens in een berekening worden gebruikt, worden de gegevens vervolgens geconverteerd naar een DAX-gegevenstype voor de duur en uitvoer van de berekening. Wanneer u een DAX-formule maakt, bepalen de termen die in de formule worden gebruikt, automatisch het geretourneerde gegevenstype van de waarde.
DAX ondersteunt de volgende gegevenstypen:
Gegevenstype binnen het model | Gegevenstype in DAX | Beschrijving |
---|---|---|
Whole Number |
Een geheel getal van 64 bits (acht bytes) 1, 2 | Getallen zonder decimalen. Gehele getallen kunnen positieve of negatieve getallen zijn, maar moeten gehele getallen tussen -9.223.372.036.854.775.808 (-2^63) en 9.223.372.036.854.775.807 (2^63-1) zijn. |
Decimal Number |
Een reëel getal van 64 bits (acht bytes) 1, 2 | Reële getallen zijn getallen die decimalen kunnen bevatten. Reële getallen hebben betrekking op een breed scala aan waarden: Negatieve waarden van -1,79E +308 tot en met -2.23E -308 Nul Positieve waarden van 2,23E -308 tot en met 1,79E + 308 Het aantal significante cijfers is echter beperkt tot 17 decimale cijfers. |
Boolean |
Booleaans | Een van beide, een waarde Waar of Onwaar. |
Text |
Snaar | Een Unicode-tekenreeks. Dit kunnen tekenreeksen, getallen of datums zijn die in een tekstindeling worden weergegeven. |
Date |
Datum/tijd | Datums en tijden in een geaccepteerde datum-tijdweergave. Geldige datums zijn alle datums na 1 maart 1900. |
Currency |
Valuta | Gegevenstype Valuta staat waarden toe tussen -922.337.203.685.477.5808 tot 922.337.203.685.477.5807 met vier decimale cijfers met vaste precisie. |
N/A |
Blanco | Een lege waarde is een gegevenstype in DAX dat SQL null-waarden vertegenwoordigt en vervangt. U kunt een lege waarde maken met behulp van de functie BLANK en testen op lege waarden met behulp van de logische functie ISBLANK. |
Tabellaire gegevensmodellen bevatten ook het Tabel gegevenstype als invoer of uitvoer voor veel DAX-functies. De functie FILTER gebruikt bijvoorbeeld een tabel als invoer en voert een andere tabel uit die alleen de rijen bevat die voldoen aan de filtervoorwaarden. Door tabelfuncties te combineren met aggregatiefuncties, kunt u complexe berekeningen uitvoeren op dynamisch gedefinieerde gegevenssets.
Hoewel gegevenstypen doorgaans automatisch worden ingesteld, is het belangrijk om inzicht te krijgen in gegevenstypen en hoe ze van toepassing zijn, met name op DAX-formules. Fouten in formules of onverwachte resultaten worden bijvoorbeeld vaak veroorzaakt door het gebruik van een bepaalde operator die niet kan worden gebruikt met een gegevenstype dat is opgegeven in een argument. De formule, = 1 & 2
, retourneert bijvoorbeeld een tekenreeksresultaat van 12. De formule, = "1" + "2"
, retourneert echter een geheel getal van 3.
Context is een belangrijk concept dat u moet begrijpen bij het maken van DAX-formules. Context is wat u in staat stelt om dynamische analyse uit te voeren, omdat de resultaten van een formule veranderen om de huidige rij- of celselectie en ook eventuele gerelateerde gegevens weer te geven. Het effectief begrijpen van context en het gebruik van context is essentieel voor het bouwen van krachtige, dynamische analyses en voor het oplossen van problemen in formules.
Formules in tabellaire modellen kunnen in een andere context worden geëvalueerd, afhankelijk van andere ontwerpelementen:
Er zijn verschillende typen context: rijcontext, querycontexten filtercontext.
Rij-context kan worden beschouwd als „de huidige rij”. Als u een formule maakt in een berekende kolom, bevat de rijcontext voor die formule de waarden uit alle kolommen in de huidige rij. Als de tabel is gerelateerd aan een andere tabel, bevat de inhoud ook alle waarden uit de andere tabel die zijn gerelateerd aan de huidige rij.
Stel dat u een berekende kolom maakt, = [Freight] + [Tax]
, waarmee waarden uit twee kolommen, Vracht en Belasting, uit dezelfde tabel worden opgeteld. Deze formule haalt automatisch alleen de waarden op uit de huidige rij in de opgegeven kolommen.
Rijcontext volgt ook relaties die zijn gedefinieerd tussen tabellen, inclusief relaties die zijn gedefinieerd in een berekende kolom met behulp van DAX-formules, om te bepalen welke rijen in gerelateerde tabellen aan de huidige rij zijn gekoppeld.
In de volgende formule wordt bijvoorbeeld de functie RELATED gebruikt om een belastingwaarde op te halen uit een gerelateerde tabel, op basis van de regio waarnaar de order is verzonden. De belastingwaarde wordt bepaald door de waarde voor regio in de huidige tabel te gebruiken, de regio in de gerelateerde tabel op te zoeken en vervolgens het belastingtarief voor die regio op te halen uit de gerelateerde tabel.
= [Freight] + RELATED('Region'[TaxRate])
Met deze formule wordt het belastingtarief voor de huidige regio opgehaald uit de tabel Regio en wordt dit toegevoegd aan de waarde van de kolom Vracht. In DAX-formules hoeft u de specifieke relatie waarmee de tabellen worden verbonden, niet te kennen of op te geven.
DAX bevat functies die berekeningen over een tabel herhalen. Deze functies kunnen meerdere huidige rijen hebben, elk met een eigen rijcontext. In wezen kunt u met deze functies formules maken waarmee bewerkingen recursief worden uitgevoerd op een binnenste en buitenste lus.
Stel dat uw model een tabel Products en een tabel Sales bevat. Gebruikers kunnen de hele verkooptabel doorlopen, die vol is met transacties met meerdere producten en de grootste hoeveelheid vinden die voor elk product in één transactie is besteld.
Met DAX kunt u één formule maken die de juiste waarde retourneert en de resultaten automatisch worden bijgewerkt wanneer een gebruiker gegevens toevoegt aan de tabellen.
= MAXX(FILTER(Sales,[ProdKey] = EARLIER([ProdKey])),Sales[OrderQty])
Zie EARLIERvoor een gedetailleerd voorbeeld van deze formule.
Samenvattend slaat de functie EARLIER de rijcontext op van de bewerking die voorafging aan de huidige bewerking. De functie slaat altijd twee contextsets in het geheugen op: één set context vertegenwoordigt de huidige rij voor de binnenste lus van de formule en een andere set contexten vertegenwoordigt de huidige rij voor de buitenste lus van de formule. DAX voert automatisch waarden tussen de twee lussen in, zodat u complexe aggregaties kunt maken.
Querycontext verwijst naar de subset gegevens die impliciet voor een formule worden opgehaald. Wanneer een gebruiker bijvoorbeeld een meting of veld in een rapport plaatst, onderzoekt de engine rij- en kolomkoppen, slicers en rapportfilters om de context te bepalen. De benodigde query's worden vervolgens uitgevoerd op modelgegevens om de juiste subset met gegevens op te halen, de berekeningen te maken die door de formule zijn gedefinieerd en vervolgens waarden in het rapport in te vullen.
Omdat de context verandert, afhankelijk van waar u de formule plaatst, kunnen de resultaten van de formule ook worden gewijzigd. Stel dat u een formule maakt waarmee de waarden in de kolom Winst van de tabel Sales worden opgeteld: = SUM('Sales'[Profit])
. Als u deze formule gebruikt in een berekende kolom in de tabel Sales, zijn de resultaten voor de formule hetzelfde voor de hele tabel, omdat de querycontext voor de formule altijd de volledige gegevensset van de tabel Sales is. Resultaten hebben winst voor alle regio's, alle producten, alle jaren, enzovoort.
Gebruikers willen echter meestal niet hetzelfde resultaat honderden keren zien, maar in plaats daarvan de winst voor een bepaald jaar, een bepaald land, een bepaald product of een combinatie hiervan, en vervolgens een eindtotaal krijgen.
In een rapport wordt de context gewijzigd door velden te filteren, toe te voegen of te verwijderen en slicers te gebruiken. Voor elke wijziging wordt de querycontext waarin de meting wordt geëvalueerd. Daarom wordt dezelfde formule, die in een meting wordt gebruikt, geëvalueerd in een andere querycontext voor elke cel.
filtercontext is de set waarden die in elke kolom zijn toegestaan of in de waarden die zijn opgehaald uit een gerelateerde tabel. Filters kunnen worden toegepast op de kolom in de ontwerpfunctie of in de presentatielaag (rapporten en draaitabellen). Filters kunnen ook expliciet worden gedefinieerd door filterexpressies in de formule.
Filtercontext wordt toegevoegd wanneer u filterbeperkingen opgeeft voor de set waarden die zijn toegestaan in een kolom of tabel, met behulp van argumenten voor een formule. Filtercontext is van toepassing op andere contexten, zoals rijcontext of querycontext.
In tabellaire modellen zijn er veel manieren om filtercontext te maken. Binnen de context van clients die het model kunnen gebruiken, zoals Power BI-rapporten, kunnen gebruikers direct filters maken door slicers of rapportfilters toe te voegen aan de rij- en kolomkoppen. U kunt ook filterexpressies rechtstreeks in de formule opgeven, gerelateerde waarden opgeven, tabellen filteren die worden gebruikt als invoer, of om dynamisch context op te halen voor de waarden die in berekeningen worden gebruikt. U kunt ook de filters voor bepaalde kolommen volledig wissen of selectief wissen. Dit is erg handig bij het maken van formules waarmee eindtotalen worden berekend.
Zie de FILTER-functie (DAX)voor meer informatie over het maken van filters in formules.
Voor een voorbeeld van hoe filters kunnen worden gewist om totale aantallen te maken, ziet u de ALL-functie.
Zie ALLEXCEPT-voor voorbeelden van het selectief wissen en toepassen van filters in formules.
Wanneer u een DAX-formule maakt, wordt de formule eerst getest op geldige syntaxis en vervolgens getest om ervoor te zorgen dat de namen van de kolommen en tabellen die in de formule zijn opgenomen, in de huidige context worden gevonden. Als een kolom of tabel die is opgegeven door de formule niet kan worden gevonden, wordt er een fout geretourneerd.
Context tijdens validatie (en herberekeningsbewerkingen) wordt bepaald zoals beschreven in de voorgaande secties, met behulp van de beschikbare tabellen in het model, eventuele relaties tussen de tabellen en eventuele filters die zijn toegepast.
Als u bijvoorbeeld zojuist enkele gegevens hebt geïmporteerd in een nieuwe tabel en deze niet is gerelateerd aan andere tabellen (en u geen filters hebt toegepast), is de huidige context de volledige set kolommen in de tabel is. Als de tabel is gekoppeld aan relaties met andere tabellen, bevat de huidige context de gerelateerde tabellen. Als u een kolom uit de tabel toevoegt aan een rapport met slicers en misschien een aantal rapportfilters, is de context voor de formule de subset van gegevens in elke cel van het rapport.
Context is een krachtig concept dat het ook moeilijk kan maken om problemen met formules op te lossen. We raden u aan om te beginnen met eenvoudige formules en relaties om te zien hoe context werkt. De volgende sectie bevat enkele voorbeelden van hoe formules verschillende typen context gebruiken om dynamisch resultaten te retourneren.
De DAX-taal maakt gebruik van vier verschillende typen berekeningsoperators in formules:
TRUE
'ONWAAR'-waarde te retourneren.Zie DAX-operatorsvoor gedetailleerde informatie over operators die worden gebruikt in DAX-formules.
Tabellen in tabellaire gegevensmodellen zien eruit als Excel-tabellen, maar zijn anders in de manier waarop ze werken met gegevens en met formules:
U kunt naar elke tabel en kolom verwijzen met behulp van de naam. In de volgende formule ziet u bijvoorbeeld hoe u naar kolommen uit twee tabellen verwijst met behulp van de volledig gekwalificeerde naam:
= SUM('New Sales'[Amount]) + SUM('Past Sales'[Amount])
Wanneer een formule wordt geëvalueerd, controleert de modelontwerper eerst op algemene syntaxis en controleert vervolgens de namen van kolommen en tabellen die u opgeeft op basis van mogelijke kolommen en tabellen in de huidige context. Als de naam niet eenduidig is of als de kolom of tabel niet kan worden gevonden, krijgt u een fout in de formule (een #ERROR tekenreeks in plaats van een gegevenswaarde in cellen waarin de fout optreedt). Zie Naamgevingsvereisten in DAX-syntaxisvoor meer informatie over naamgevingsvereisten voor tabellen, kolommen en andere objecten.
Door relaties tussen tabellen te maken, hebt u de mogelijkheid om gerelateerde waarden in andere tabellen te gebruiken in berekeningen. U kunt bijvoorbeeld een berekende kolom gebruiken om alle verzendrecords te bepalen die betrekking hebben op de huidige reseller en vervolgens de verzendkosten voor elke leverancier op te tellen. In veel gevallen is een relatie echter mogelijk niet nodig. U kunt de functie LOOKUPVALUE in een formule gebruiken om de waarde in result_columnName te retourneren voor de rij die voldoet aan criteria die zijn opgegeven in de argumenten search_column en search_value.
Voor veel DAX-functies is vereist dat er een relatie bestaat tussen de tabellen of tussen meerdere tabellen om de kolommen te vinden waarnaar u hebt verwezen en resultaten te retourneren die zinvol zijn. Andere functies proberen de relatie te identificeren; Voor de beste resultaten moet u echter altijd waar mogelijk een relatie maken. Tabellaire gegevensmodellen ondersteunen meerdere relaties tussen tabellen. Om verwarring of onjuiste resultaten te voorkomen, wordt slechts één relatie tegelijk aangewezen als de actieve relatie, maar u kunt de actieve relatie zo nodig wijzigen om verschillende verbindingen in de gegevens in berekeningen te doorlopen. functie USERELATIONSHIP kan worden gebruikt om een of meer relaties op te geven die in een specifieke berekening moeten worden gebruikt.
Het is belangrijk om deze regels voor formuleontwerp te observeren bij het gebruik van relaties:
Wanneer tabellen zijn verbonden door een relatie, moet u ervoor zorgen dat de twee kolommen die worden gebruikt als sleutels waarden bevatten die overeenkomen. Referentiële integriteit wordt niet afgedwongen, waardoor het mogelijk is om niet-overeenkomende waarden in een sleutelkolom te hebben en nog steeds een relatie te creëren. Als dit gebeurt, moet u er rekening mee houden dat lege waarden of niet-overeenkomende waarden van invloed kunnen zijn op de resultaten van formules.
Wanneer u tabellen in uw model koppelt met behulp van relaties, vergroot u het bereik of context, waarin uw formules worden geëvalueerd. Wijzigingen in context die het gevolg zijn van het toevoegen van nieuwe tabellen, nieuwe relaties of wijzigingen in de actieve relatie, kunnen ertoe leiden dat uw resultaten veranderen op manieren die u mogelijk niet verwacht. Zie Context in dit artikel voor meer informatie.
proces en herberekening zijn twee afzonderlijke maar gerelateerde bewerkingen. U moet deze concepten grondig begrijpen bij het ontwerpen van een model dat complexe formules, grote hoeveelheden gegevens of gegevens bevat die worden verkregen uit externe gegevensbronnen.
proces (vernieuwen) de gegevens in een model bijwerkt met nieuwe gegevens uit een externe gegevensbron.
herberekening is het proces van het bijwerken van de resultaten van formules om eventuele wijzigingen in de formules zelf weer te geven en wijzigingen in de onderliggende gegevens weer te geven. Herberekening kan op de volgende manieren van invloed zijn op de prestaties:
De waarden in een berekende kolom worden berekend en opgeslagen in het model. Als u de waarden in de berekende kolom wilt bijwerken, moet u het model verwerken met behulp van een van de drie verwerkingsopdrachten: Volledige verwerking, Procesgegevens of Procesherberekening. Het resultaat van de formule moet altijd opnieuw worden berekend voor de hele kolom wanneer u de formule wijzigt.
De waarden die door metingen worden berekend, worden dynamisch geëvalueerd telkens wanneer een gebruiker metingen toevoegt aan een draaitabel of een rapport opent; wanneer de gebruiker de context wijzigt, veranderen de waarden die door de metingen worden geretourneerd. De resultaten van de meting weerspiegelen altijd de meest recente gegevens in de geheugen-cache.
Verwerking en herberekening hebben geen effect op beveiligingsformules op rijniveau, tenzij het resultaat van een herberekening een andere waarde retourneert, waardoor de rij door rolleden opvraagbaar of niet opvraagbaar kan zijn.
DAX wordt voortdurend verbeterd. nieuwe en bijgewerkte functies worden uitgebracht met de volgende beschikbare update, meestal maandelijks. Services worden eerst bijgewerkt, gevolgd door geïnstalleerde toepassingen zoals Power BI Desktop, Excel, SQL Server Management Studio (SSMS) en Analysis Services-projectextensie voor Visual Studio (SSDT). SQL Server Analysis Services wordt bijgewerkt met de volgende cumulatieve update. Nieuwe functies worden eerst aangekondigd en beschreven in de naslaginformatie over de DAX-functie die samenvalt met Power BI Desktop-updates.
Niet alle functies worden ondersteund in eerdere versies van SQL Server Analysis Services en Excel.
Als er een fout optreedt bij het definiëren van een formule, bevat de formule mogelijk een syntactische fout, semantische foutof berekeningsfout.
Syntactische fouten zijn het eenvoudigst om op te lossen. Ze hebben meestal betrekking op een ontbrekend haakje of komma.
Het andere type fout treedt op wanneer de syntaxis juist is, maar de waarde of een kolom waarnaar wordt verwezen, is niet zinvol in de context van de formule. Dergelijke semantische en berekeningsfouten kunnen worden veroorzaakt door een van de volgende problemen:
In de eerste vier gevallen markeert DAX de hele kolom die de ongeldige formule bevat. In het laatste geval wordt de kolom grijs weergegeven in DAX om aan te geven dat de kolom een niet-verwerkte status heeft.
Power BI Desktop- is een gratis toepassing voor gegevensmodellering en rapportage. De modelontwerper bevat een DAX-editor voor het maken van DAX-berekeningsformules.
De Power Pivot modelontwerper in Excel bevat een DAX-editor voor het maken van DAX-berekeningsformules.
Visual Studio met Analysis Services-projecten-extensie (VSIX) wordt gebruikt om Analysis Services-modelprojecten te maken. Ontwerpfunctie voor tabellaire modellen, geïnstalleerd met de projectextensie, bevat een DAX-editor.
SQL Server Management Studio (SSMS) is een essentieel hulpprogramma voor het werken met Analysis Services. SSMS bevat een DAX-queryeditor voor het uitvoeren van query's op zowel tabellaire als multidimensionale modellen.
DAX Studio- is een opensource-clienthulpprogramma voor het maken en uitvoeren van DAX-query's voor Analysis Services, Power BI Desktop en Power Pivot in Excel-modellen.
Tabular Editor is een opensource-hulpprogramma dat een intuïtieve, hiërarchische weergave biedt van elk object in metagegevens van tabellaire modellen. Tabular Editor bevat een DAX-editor met syntaxismarkeringen, waarmee u eenvoudig metingen, berekende kolommen en berekende tabelexpressies kunt bewerken.
Wanneer u DAX leert, kunt u het beste de toepassing gebruiken die u gebruikt om uw gegevensmodellen te maken. Analysis Services, Power BI Desktop en Power Pivot in Excel hebben allemaal artikelen en zelfstudies met lessen over het maken van metingen, berekende kolommen en rijfilters met behulp van DAX. Hier volgen enkele aanvullende bronnen:
DAX gebruiken in Power BI Desktop leertraject.
The Definitive Guide to DAX by Alberto Ferrari and Marco Russo (Microsoft Press). Nu in de tweede editie biedt deze uitgebreide handleiding basisbeginselen voor innovatieve high-performance technieken voor beginnende gegevensmodelleerders en BI-professionals.
DAX heeft een levendige community die altijd bereid is om hun expertise te delen. Microsoft Power BI Community heeft een speciaal discussieforum voor DAX, DAX-opdrachten en tips.
gebeurtenis
31 mrt, 23 - 2 apr, 23
De ultieme Microsoft Fabric-, Power BI-, SQL- en AI-communitygebeurtenis. 31 maart tot 2 april 2025.
Zorg dat u zich vandaag nog registreertTraining
Module
Berekende tabellen en kolommen toevoegen aan Power BI Desktop-modellen - Training
Aan het einde van deze module kunt u berekende tabellen en berekende kolommen toevoegen aan uw semantische model. U kunt ook de rijcontext beschrijven, die wordt gebruikt om berekende kolomformules te evalueren. Omdat het mogelijk is om kolommen aan een tabel toe te voegen met behulp van Power Query, leert u ook wanneer u het beste berekende kolommen kunt maken in plaats van Power Query aangepaste kolommen.