Delen via


DAX in tabelmodellen

Van toepassing op: SQL Server Analysis Services Azure Analysis Services Fabric/Power BI Premium

Data Analysis Expressions (DAX) is een formuletaal die wordt gebruikt voor het maken van aangepaste berekeningen in Analysis Services, Power BI en Power Pivot in Excel. DAX-formules omvatten functies, operators en waarden om geavanceerde berekeningen uit te voeren op gegevens in tabellen en kolommen.

Hoewel DAX wordt gebruikt in Analysis Services, Power BI en Power Pivot in Excel, is dit artikel meer van toepassing op projecten in tabelvorm van Analysis Services die zijn gemaakt in Visual Studio.

DAX-formules in berekende kolommen, berekende tabellen, metingen en rijfilters

Voor tabellaire modellen worden DAX-formules gebruikt in berekende kolommen, metingen en rijfilters.

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.

Opmerking

Berekende kolommen worden niet ondersteund voor modellen die gegevens ophalen uit een relationele gegevensbron met de DirectQuery-modus.

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 de database. Wanneer de formule =[Calendar Year] & " Q" & [Calendar Quarter] bijvoorbeeld in de formulebalk wordt ingevoerd in een datumtabel, wordt een waarde voor elke rij in de tabel 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 uit de kolom Kalenderkwartaal (in dezelfde tabel Datum) toe te voegen. Het resultaat voor elke rij in de berekende kolom wordt onmiddellijk berekend en wordt bijvoorbeeld weergegeven als 2010 Q1. Kolomwaarden worden alleen opnieuw berekend als de gegevens opnieuw worden verwerkt.

Zie Berekende kolommen voor meer informatie.

Berekende tabellen

Berekende tabellen zijn berekende objecten, op basis van een DAX-query of -expressie, die is afgeleid van alle of een deel van andere tabellen in hetzelfde model.

Zie Berekende tabellen voor meer informatie.

Maatregelen

Metingen zijn dynamische formules waarbij de resultaten veranderen, afhankelijk van de context. Metingen worden gebruikt in rapportageindelingen 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 gedefinieerd door de auteur van het model met behulp van het metingraster (en de formulebalk) in de modelontwerper in Visual Studio.

Een formule in een meting kan standaardaggregatiefuncties gebruiken die automatisch worden gemaakt met behulp van de functie Autosom, zoals COUNT of SUM, of u kunt uw eigen formule definiëren met behulp van DAX. 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. Andere metingsgegevens worden ook weergegeven in het deelvenster Eigenschappen .

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 MDX-query zijn. Ongeacht de rapportageclient 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. Als een gebruiker bijvoorbeeld in een meting met de formule Total Sales:=SUM([Sales Amount])de meting TotalSales in het venster Waarden in een draaitabel plaatst en vervolgens de kolom DimProductCategory uit een DimProduct-tabel in het venster Filters plaatst, wordt de som van verkoopbedrag berekend en weergegeven voor elke productcategorie.

In tegenstelling tot berekende kolommen en rijfilters bevat de syntaxis voor een meting de naam van de meting voorafgaand aan de formule. In het zojuist opgegeven voorbeeld verschijnt de naam Totale verkoop: vóór de formule. Nadat u een meting hebt gemaakt, worden de naam en de definitie ervan weergegeven in de lijst met velden van de rapportageclienttoepassing en is afhankelijk van perspectieven en rollen beschikbaar voor alle gebruikers van het model.

Zie Metingen voor meer informatie.

Rijfilters

Rijfilters bepalen welke rijen in een tabel zichtbaar zijn voor leden van een bepaalde rol. Rijfilters kunnen worden gemaakt voor elke tabel in een model met behulp van DAX-formules. Rijfilters worden voor een bepaalde rol gemaakt met behulp van Rolbeheer in Visual Studio. Rijfilters kunnen ook worden gedefinieerd voor een geïmplementeerd model met behulp van roleigenschappen in SQL Server Management Studio (SSMS).

In een rijfilter bepaalt een DAX-formule, die moet evalueren naar een WAAR/ONWAAR-Booleaanse voorwaarde, welke rijen door de resultaten van een query kunnen worden geretourneerd door leden van die specifieke rol. Rijen die niet zijn opgenomen in de DAX-formule, kunnen niet worden geretourneerd. Bijvoorbeeld, voor leden van de Verkooprol geldt dat de tabel Klanten met de volgende DAX-formule, =Customers[Country] = "USA" alleen gegevens kan weergeven voor klanten in de USA en dat aggregaties, zoals het resultaat van SOM, alleen worden geretourneerd voor klanten in de USA.

Wanneer u een rijfilter definieert met behulp van DAX-formule, maakt u een toegestane rijset. 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 rijfilters van die rol toegang geven tot die specifieke rijenset, kan de gebruiker gegevens voor die rij weergeven.

Rijfilters 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. Rijfilters worden gecombineerd met andere rijfilters die zijn gedefinieerd voor gerelateerde tabellen.

Zie Rollen voor meer informatie.

DAX-gegevenstypen

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.

Tabellaire modellen en DAX ondersteunen de volgende gegevenstypen:

Gegevenstype binnen het model Gegevenstype in DAX Description
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 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.
Booleaan Booleaan Een van beide, een waarde Waar of Onwaar.
Tekst Snaar / Touwtje 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/A 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 modellen 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, = 1 & 2, retourneert bijvoorbeeld een tekenreeksresultaat van 12. De formule, = "1" + "2", retourneert echter een geheel getal van 3.

Zie Ondersteunde gegevenstypen voor gedetailleerde informatie over gegevenstypen in tabellaire modellen en expliciete en impliciete conversies van gegevenstypen in DAX.

DAX-operators

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

  • Vergelijkingsoperatoren om waarden te vergelijken en een logische WAAR/ONWAAR waarde te retourneren.
  • Rekenkundige operators voor het uitvoeren van rekenkundige berekeningen die numerieke waarden opleveren.
  • 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 naslaginformatie over DAX-operatoren voor gedetailleerde informatie over operators die worden gebruikt in DAX-formules.

DAX-formules

DAX-formules zijn essentieel voor het maken van berekeningen in berekende kolommen en metingen en het beveiligen van uw gegevens met behulp van filters 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 voor rijfilters wilt maken, gebruikt u het dialoogvenster Rolbeheer. Informatie in deze sectie is bedoeld om u op weg te helpen met het begrijpen van de basisprincipes van DAX-formules.

Basisbeginselen van formules

Met DAX kunnen auteurs van tabellaire modellen aangepaste berekeningen definiëren in beide modeltabellen, als onderdeel van berekende kolommen en als metingen die zijn gekoppeld aan tabellen, maar niet rechtstreeks in de tabellen worden weergegeven. DAX stelt modelauteurs ook in staat om gegevens te beveiligen door berekeningen te maken die een Booleaanse waarde retourneren die definieert welke rijen in een bepaalde of gerelateerde tabel kunnen worden opgevraagd door lidgebruikers van de bijbehorende rol.

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.

Formula Description
=TODAY() Hiermee voegt u de datum van vandaag in elke rij van de kolom in.
=3 Hiermee voegt u de waarde 3 in elke rij van de 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 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.

  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.

Opmerking

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 opgeslagen in het metingraster met de tabel. Als een formule ongeldig is, wordt er een fout weergegeven.

In dit voorbeeld bekijken we een complexere 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 Description
Days in Current Quarter:= De naam van de meting.
= Het gelijkteken (=) begint de formule.
COUNTROWS De functie COUNTROWS telt het aantal rijen in de tabel Date
() 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 haakjes.
,
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' Specificeert de tabel Datum.
[Date] Hiermee wordt de kolom Datum in de tabel Datum gespecificeerd.
,
ENDOFQUARTER De functie ENDOFQUARTER
'Date' Specificeert de tabel Datum.
[Date] Hiermee wordt de kolom Datum in de tabel Datum gespecificeerd.

Formule AutoComplete gebruiken

Zowel de formulebalk in de modelontwerper als het venster Rijfilters voor formules in het dialoogvenster Rolbeheer bieden een functie voor automatisch aanvullen. 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.

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

Opmerking

Sommige limieten worden toegepast binnen metingen voor het nesten van functies om ervoor te zorgen dat de prestaties niet worden beïnvloed door de vele berekeningen die zijn vereist door afhankelijkheden tussen kolommen.

DAX-functies

Deze sectie bevat een overzicht van de typen functies die worden ondersteund in DAX. Zie naslaginformatie over DAX-functies voor meer informatie.

DAX biedt verschillende 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 DAX-formules verderop 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 het bereik. U kunt bijvoorbeeld sommen voor parallelle perioden vergelijken.

Datum- en tijdfuncties

De datum- en tijdfuncties in DAX zijn vergelijkbaar met datum- en tijdfuncties in Microsoft Excel. DAX-functies zijn echter gebaseerd op de datum/tijd-gegevenstypen die worden gebruikt door Microsoft SQL Server. Zie Datum- en tijdfuncties (DAX) 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 (DAX) 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 Information Functions (DAX) 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 Logical Functions (DAX) 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. Voor meer informatie, zie Wiskundige en trigonometrische functies (DAX).

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 (DAX) voor meer informatie.

Statistische functies

DAX biedt statistische functies die aggregaties uitvoeren. Naast het maken van sommen en gemiddelden, of het vinden van de minimum- en maximumwaarden, kunt u in DAX ook een kolom filteren voordat u aggregaties samenvoegt of maakt op basis van gerelateerde tabellen. Zie Statistische functies (DAX) voor meer informatie.

Tekstfuncties

De 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 formaten voor datums, tijden en getallen. Zie Text Functions (DAX) voor meer informatie.

Tijdintelligentie-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 Functions (DAX) voor meer informatie.

Tabelwaardefuncties

Er zijn DAX-functies waarmee tabellen worden uitgevoerd, tabellen als invoer worden gebruikt of beide. Omdat een tabel één kolom kan hebben, nemen tabelwaardefuncties ook één kolom als invoer. Informatie over het gebruik van deze tabelwaardefuncties is belangrijk voor het volledig gebruik van DAX-formules. DAX bevat de volgende typen tabelwaardefuncties:

Filterfuncties : retourneert een kolom, tabel of waarden die zijn gerelateerd aan de huidige rij.

Aggregatiefuncties: aggregatie van elke expressie over de rijen van een tabel.

Time intelligence-functies : retourneer een tabel met datums of gebruik een tabel met datums om een aggregatie te berekenen.

Context in DAX-formules

Context is een belangrijk concept dat u moet begrijpen bij het maken van formules met BEHULP van DAX. 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 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, querycontexten filtercontext.

Rijcontext

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.

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 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 de FUNCTIE EARLIER (DAX) voor een gedetailleerd overzicht 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.

Vraagcontext

Querycontext verwijst naar de subset gegevens die impliciet voor een formule worden opgehaald. Wanneer een gebruiker een meting of een ander waardeveld in een draaitabel plaatst of in een rapport op basis van een tabellair model, onderzoekt de engine de rij- en kolomkoppen, slicers en rapportfilters om de context te bepalen. Vervolgens worden de benodigde query's uitgevoerd op de gegevensbron om de juiste subset met gegevens op te halen, de berekeningen te maken die zijn gedefinieerd door de formule en vervolgens elke cel in de draaitabel of het rapport te vullen. De gegevensset die wordt opgehaald, is de querycontext voor elke cel.

Waarschuwing

Voor een model in de DirectQuery-modus wordt de context geëvalueerd en vervolgens worden de setbewerkingen voor het ophalen van de juiste subset van gegevens en het berekenen van de resultaten vertaald naar SQL-instructies. Deze opdrachten worden vervolgens rechtstreeks uitgevoerd op het relationele gegevensopslag. Hoewel de methode voor het ophalen van de gegevens en het berekenen van de resultaten anders is, verandert de context zelf niet.

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 willen in plaats daarvan de winst voor een bepaald jaar, een bepaald land/regio, een bepaald product of een combinatie hiervan ophalen en vervolgens een eindtotaal krijgen.

In een draaitabel kan de context worden gewijzigd door kolom- en rijkoppen toe te voegen of te verwijderen en door slicers toe te voegen of te verwijderen. Wanneer gebruikers kolom- of rijkoppen toevoegen aan de draaitabel, wijzigen ze de querycontext waarin de meting wordt geëvalueerd. Segmenterings- en filterbewerkingen zijn ook van invloed op context. 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 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 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 de DAXCEPT-functie (DAX) 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 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.

Voorbeelden van context in formules

De DAX-functie (RELATED Function) breidt de context van de huidige rij uit om waarden in een gerelateerde kolom op te nemen. Hiermee kunt u zoekopdrachten uitvoeren. Het voorbeeld in dit artikel illustreert de interactie van filteren en rijcontext.

Met de DAX-functie (FILTER- functie) kunt u de rijen opgeven die moeten worden opgenomen in de huidige context. In de voorbeelden in dit artikel ziet u ook hoe u filters insluit in andere functies die statistische functies uitvoeren.

De DAX-functie (ALL Function) stelt context in een formule in. U kunt deze gebruiken om filters te overschrijven die worden toegepast als gevolg van querycontext.

Met de DAX-functie (ALLEXCEPT- functie) kunt u alle filters verwijderen, behalve de filters die u opgeeft. Beide artikelen bevatten voorbeelden die u helpen bij het bouwen van formules en het begrijpen van complexe contexten.

Met de functies EARLIER (DAX) en EARLIEST (DAX) kunt u tabellen doorlopen door berekeningen uit te voeren, terwijl u verwijst naar een waarde uit een binnenste lus. Als u bekend bent met het concept van recursie en met binnenste en buitenste lussen, zult u de kracht waarderen die de functies EARLIER en EARLIEST bieden. Als u geen idee hebt van deze concepten, moet u de stappen in het voorbeeld zorgvuldig volgen om te zien hoe de binnenste en buitenste contexten worden gebruikt in berekeningen.

Formules en het tabellaire model

De modelontwerper in Visual Studio is een gebied waar u met meerdere gegevenstabellen kunt werken en de tabellen in een tabellair model kunt verbinden. In dit model worden tabellen samengevoegd met relaties op kolommen met gemeenschappelijke waarden (sleutels). Met het tabellaire model kunt u waarden koppelen aan kolommen in andere tabellen en interessantere berekeningen maken. Net als in een relationele database kunt u veel niveaus van gerelateerde tabellen verbinden en kolommen uit een van de tabellen in de resultaten gebruiken.

U kunt bijvoorbeeld een verkooptabel, een producttabel en een tabel met productcategorieën koppelen en gebruikers kunnen verschillende combinaties van de kolommen in draaitabellen en rapporten gebruiken. Gerelateerde velden kunnen worden gebruikt om verbonden tabellen te filteren of om berekeningen te maken voor subsets. (Als u niet bekend bent met relationele database en werkt met tabellen en joins, raadpleegt u Relaties.)

Tabellaire modellen ondersteunen meerdere relaties tussen tabellen. Om verwarring of verkeerde 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 USERELATIONSHIP-functie (DAX) kan worden gebruikt om één of meer relaties op te geven die in een specifieke berekening moeten worden gebruikt.

In een tabellair model moet u de volgende regels voor formuleontwerp bekijken:

  • Wanneer tabellen zijn verbonden met een relatie, moet u ervoor zorgen dat de twee kolommen die als sleutels worden gebruikt, waarden hebben die overeenkomen. Referentiële integriteit wordt echter niet afgedwongen; daarom is het mogelijk om niet-overeenkomende waarden in een sleutelkolom te hebben en toch 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 DAX-formules eerder in dit artikel voor meer informatie.

Werken met tabellen en kolommen

Tabellen in tabellaire modellen 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 verspringende 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-syntaxisverwijzing voor meer informatie over naamgevingsvereisten voor tabellen, kolommen en andere objecten.

Tabelrelaties

Door relaties tussen tabellen te maken, krijgt u de mogelijkheid om gegevens in een andere tabel op te zoeken en gerelateerde waarden te gebruiken om complexe berekeningen uit te voeren. U kunt bijvoorbeeld een berekende kolom gebruiken om alle verzendrecords op te zoeken 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 parameters 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. Zie Formules en het tabellaire model eerder in dit artikel voor meer informatie.

De resultaten van formules (proces) bijwerken

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

Het verwerken van gegevens is het proces van het bijwerken van de gegevens in een model 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 maatregelen worden berekend, worden dynamisch geëvalueerd wanneer een gebruiker de maatregel toevoegt aan een draaitabel of een rapport opent; als de gebruiker de context wijzigt, veranderen de waarden die door de maatregel worden geretourneerd. De resultaten van de meting weerspiegelen altijd de meest recente gegevens in de geheugen-cache.

Verwerking en herberekening hebben geen effect op formules voor rijfilters, tenzij het resultaat van een herberekening een andere waarde geeft, waardoor de rij opvraagbaar of niet opvraagbaar kan zijn voor rolleden.

Fouten in formules oplossen

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. Zie de naslaginformatie voor DAX-functies voor hulp bij de syntaxis van afzonderlijke functies.

Het andere type fout treedt op wanneer de syntaxis juist is, maar de waarde of de kolom waarnaar wordt verwezen, is niet logisch 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 data-engine de gegevens ophaalt, constateert het een typefout en geeft een foutmelding.

  • De formule geeft een onjuist aantal of het type parameters 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.

Zie ook

Data Analysis Expressions (DAX) Referentie
Maatregelen
Berekende kolommen
Roles
KPI's
Ondersteunde gegevensbronnen