Overzicht van DAX

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.

Berekeningen

DAX-formules worden gebruikt in metingen, berekende kolommen, berekende tabellen en beveiliging op rijniveau.

Metingen

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 in een functie Knopinfo een voorbeeld weergegeven van wat de resultaten voor het totaal in de huidige context zijn, maar anders worden de resultaten nergens onmiddellijk uitgevoerd. 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.

Raadpleeg voor meer informatie:
Metingen in Power BI Desktop
Metingen in Analysis Services
Metingen in Power Pivot

Berekende kolommen

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.

Raadpleeg voor meer informatie:
Berekende kolommen in Power BI Desktop
Berekende kolommen in Analysis Services
Berekende kolommen in Power Pivot.

Berekende tabellen

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. Een voorbeeld is de tabel Datum, als OrderDate, ShipDate of DueDate, afhankelijk van de relatie met de refererende sleutel. 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.

Raadpleeg voor meer informatie:
Berekende tabellen in Power BI Desktop
Berekende tabellen in Analysis Services.

Beveiliging op rijniveau

Met beveiliging op rijniveau moet een DAX-formule evalueren naar een Booleaanse voorwaarde WAAR/ONWAAR, 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 secuirty op rijniveau definieert met behulp van DAX-formule, maakt u een toegestane rijset. Hiermee wordt de toegang tot andere rijen niet geweigerd; in plaats daarvan worden ze gewoon niet geretourneerd als onderdeel van de toegestane rijenet. 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 worden gekruist met andere formules die zijn gedefinieerd voor gerelateerde tabellen.

Raadpleeg voor meer informatie:
Beveiliging op rijniveau (RLS) met Power BI
Rollen in Analysis Services

Query's

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 evaluatie-instructie . Als een gebruiker

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. Zie DAX-query's voor meer informatie.

Formules

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.

Basisbeginselen van 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:

  1. Elke formule moet beginnen met een gelijkteken (=).

  2. U kunt een functienaam typen of selecteren of een expressie typen.

  3. 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 fx-knop 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.

  4. Geef de argumenten aan de functie op door ze te selecteren in een vervolgkeuzelijst met mogelijke tabellen en kolommen of door waarden te typen.

  5. Controleer op syntaxisfouten: zorg ervoor dat alle haakjes gesloten zijn en dat naar alle kolommen, tabellen en waarden correct wordt verwezen.

  6. 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 meting met de naam Dagen in huidig 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 Omschrijving
Days in Current Quarter De naam van de meting.
= Het gelijkteken (=) begint de formule.
COUNTROWS COUNTROWS telt het aantal rijen in de tabel Datum
() Haakjes openen en sluiten geeft argumenten op.
DATESBETWEEN De functie DATESBETWEEN retourneert de datums tussen de laatste datum voor elke waarde in de kolom Datum in de tabel Datum.
'Date' Hiermee geeft u de tabel Datum. Tabellen staan tussen enkele aanhalingstekens.
[Date] Hiermee geeft u de kolom Datum in de tabel Datum op. 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' Hiermee geeft u de tabel Datum.
[Date] Hiermee geeft u de kolom Datum in de tabel Datum op.
,
ENDOFQUARTER De functie ENDOFQUARTER
'Date' Hiermee geeft u de tabel Datum.
[Date] Hiermee geeft u de kolom Datum in de tabel Datum op.

Formule automatisch aanvullen gebruiken

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 automatisch aanvullen 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 het haakje sluiten van functies niet toe of komt automatisch overeen met haakjes. U moet ervoor zorgen dat elke functie syntactisch juist is of dat u de formule niet kunt opslaan of gebruiken.

Meerdere functies in een formule 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 niveaus van functies 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 geneste functies te worden gebruikt. 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.

Functies

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 hoe deze functies werken.

  • 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 verschillende time intelligence-functies . Met deze functies kunt u datumbereiken definiëren of selecteren en dynamische berekeningen uitvoeren op basis van deze datums of bereiken. U kunt bijvoorbeeld sommen voor parallelle perioden vergelijken.

Aggregatiefuncties

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 Aggregatiefuncties voor meer informatie.

Datum- en tijdfuncties

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 tijdfuncties voor meer informatie.

Filterfuncties

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 Filterfuncties voor meer informatie.

Financiële functies

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 functies voor meer informatie.

Informatiefuncties

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 WAAR als de waarde waarnaar u verwijst een fout bevat. Zie Informatiefuncties voor meer informatie.

Logische 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 WAAR-waarde retourneert. Zie Logische functies voor meer informatie.

Wiskundige en trigonometrische functies

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. Zie Wiskundige en trig-functies voor meer informatie.

Andere 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 functies voor meer informatie.

Relatiefuncties

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 Relatiefuncties voor meer informatie.

Statistische functies

Statistische functies berekenen waarden met betrekking tot statistische verdelingen en waarschijnlijkheid, zoals standaarddeviatie en aantal permutaties. Zie Statistische functies voor meer informatie.

Tekstfuncties

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 beheren van de notaties voor datums, tijden en getallen. Zie Tekstfuncties voor meer informatie.

Time intelligence-functies

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.

Functies voor tabelmanipulatie

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 tabelbewerking voor meer informatie.

Variabelen

U kunt variabelen binnen 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.

Data types

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 in model Gegevenstype in DAX Omschrijving
Geheel getal 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.
Decimaal getal Een 64-bits (acht-bytes) reëel getal 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.
Booleaanse waarde Booleaanse waarde Een waarde Waar of Onwaar.
Tekst String Een Unicode-tekenreeks. Dit kunnen tekenreeksen, getallen of datums zijn die in een tekstindeling worden weergegeven.
Datum Datum/tijd Datums en tijden in een geaccepteerde datum-tijdweergave.

Geldige datums zijn alle datums na 1 maart 1900.
Valuta 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.v.t. Blank 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 gegevenstype Tabel 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 retourneert = 1 & 2bijvoorbeeld een tekenreeksresultaat van 12. De formule = "1" + "2"retourneert echter een geheel getal van 3.

Context

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:

  • Filters die zijn toegepast in een draaitabel of rapport
  • Filters die zijn gedefinieerd in een formule
  • Relaties die zijn opgegeven met behulp van speciale functies in een formule

Er zijn verschillende typen context: rijcontext, querycontext en filtercontext.

Rijcontext

Rijcontext 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.

Context voor meerdere rijen

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 Producten 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 EARLIER voor 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

Querycontext verwijst naar de subset van gegevens die impliciet worden opgehaald voor een formule. 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 Verkoop 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

Filtercontext is de set waarden die zijn toegestaan in elke kolom 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 DAX -functie (FILTER) voor meer informatie over het maken van filters in formules.
Zie de FUNCTIE ALL (DAX) voor een voorbeeld van hoe filters kunnen worden gewist om eindtotalen te maken.

Zie ALLEXCEPT voor voorbeelden van het selectief wissen en toepassen van filters in formules.

Context bepalen 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 bepaalde 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. 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.

Operatoren

De DAX-taal maakt gebruik van vier verschillende typen berekeningsoperators in formules:

  • Vergelijkingsoperatoren om waarden te vergelijken en een logische WAARDE WAAR\ONWAAR te retourneren.
  • Rekenkundige operators om rekenkundige berekeningen uit te voeren die numerieke waarden retourneren.
  • Operatoren voor tekstsamenvoeging om twee of meer tekenreeksen samen te voegen.
  • Logische operators die twee of meer expressies combineren om één resultaat te retourneren.

Zie DAX-operators voor gedetailleerde informatie over operators die worden gebruikt in DAX-formules.

Werken met tabellen en kolommen

Tabellen in tabellaire gegevensmodellen zien eruit als Excel-tabellen, maar zijn anders in de manier waarop ze werken met gegevens en met formules:

  • Formules werken alleen met tabellen en kolommen, niet met afzonderlijke cellen, bereikverwijzingen of matrices.
  • Formules kunnen relaties gebruiken om waarden op te halen uit gerelateerde tabellen. De waarden die worden opgehaald, zijn altijd gerelateerd aan de huidige rijwaarde.
  • U kunt geen onregelmatige of onregelmatige gegevens hebben, zoals in een Excel-werkblad. Elke rij in een tabel moet hetzelfde aantal kolommen bevatten. U kunt echter lege waarden in sommige kolommen hebben. Excel-gegevenstabellen en tabellaire modelgegevenstabellen zijn niet uitwisselbaar.
  • Omdat voor elke kolom een gegevenstype is ingesteld, moet elke waarde in die kolom van hetzelfde type zijn.

Verwijzen naar tabellen en kolommen in 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-syntaxis voor meer informatie over naamgevingsvereisten voor tabellen, kolommen en andere objecten.

Tabelrelaties

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. De 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, daarom is het mogelijk om niet-overeenkomende waarden in een sleutelkolom te hebben en nog steeds een relatie te maken. 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 de 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.

Verwerken en vernieuwen

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.

Verwerken (vernieuwen) werkt de gegevens in een model bij 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 om 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 wanneer een gebruiker de meting toevoegt aan een draaitabel of een rapport opent; als de gebruiker de context wijzigt, worden waarden geretourneerd door de metingswijziging. De resultaten van de meting weerspiegelen altijd de meest recente in de cache in het geheugen.

Verwerking en herberekening hebben geen effect op beveiligingsformules op rijniveau, tenzij het resultaat van een herberekening een andere waarde retourneert, waardoor de rij kan worden opvraagbaar of niet door rolleden kan worden opvraagbaar.

Updates

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.

Problemen oplossen

Als u een fout krijgt bij het definiëren van een formule, kan de formule een syntactische fout, semantische fout of berekeningsfout bevatten.

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:

  • De formule verwijst naar een niet-bestaande kolom, tabel of functie.
  • De formule lijkt correct te zijn, maar wanneer de gegevensengine de gegevens ophaalt, wordt een type niet-overeenkomend gevonden en wordt er een fout gegenereerd.
  • De formule geeft een onjuist aantal of het type argumenten door aan een functie.
  • De formule verwijst naar een andere kolom met een fout en daarom zijn de waarden ongeldig.
  • De formule verwijst naar een kolom die niet is verwerkt, wat betekent dat deze metagegevens bevat, maar geen werkelijke gegevens die moeten worden gebruikt voor berekeningen.

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.

Apps en hulpprogramma's

Power BI Desktop

Power BI Desktop

Power BI Desktop is een gratis toepassing voor gegevensmodellering en rapportage. De modelontwerper bevat een DAX-editor voor het maken van DAX-berekeningsformules.

Power Pivot in Excel

Power Pivot in Excel

De ontwerpfunctie voor Power Pivot-modellen in Excel bevat een DAX-editor voor het maken van DAX-berekeningsformules.

Visual Studio

Visual Studio

Visual Studio met De extensie Analysis Services-projecten (VSIX) wordt gebruikt voor het maken van Analysis Services-modelprojecten. Ontwerpfunctie voor tabellaire modellen, geïnstalleerd met de projectextensie, bevat een DAX-editor.

SQL Server Management Studio

SQL Server Management Studio

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

DAX Studio icon

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

Tabular Editor icon

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.

Leermiddelen

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:

Video's

Leertraject DAX gebruiken in Power BI Desktop .

De definitieve handleiding voor DAX door Alberto Ferrari en 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.

The Definitive Guide to DAX book image

Gemeenschap

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.