overzicht van DAX
Data Analysis Expressions (DAX) is een formule-expressietaal die wordt gebruikt in Analysis Services, Power BI, andPower Pivot in Excel. DAX formules omvatten functies, operators, andvalues om geavanceerde berekeningen uit te voeren and queries op gegevens in related tabellen and kolommen in tabellaire gegevensmodellen.
Dit artikel bevat slechts een eenvoudige inleiding tot de belangrijkste concepten in DAX. Het beschrijft DAX zoals het van toepassing is op all de producten die deze gebruiken. Sommige functionaliteiten kunnen not van toepassing zijn op bepaalde producten or use cases. Raadpleeg de documentatie van uw productwaarin de specifieke implementatie van DAXwordt beschreven.
Berekeningen
DAX formules worden gebruikt in metingen, berekende kolommen, berekende tabellen, and beveiliging op rijniveau.
Maatregelen
Metingen zijn dynamische berekeningsformules waarbij de resultaten veranderen, afhankelijk van de context. Metingen worden gebruikt in rapporten die het combineren van and modelgegevens ondersteunen met behulp van meerdere attributen, zoals een Power BI-rapport, or Excel-draaitabel, or draaigrafiek. Metingen worden gemaakt met behulp van de DAX formulebalk in de modelontwerper.
Een formule in een measure kan standaardaggregatiefuncties gebruiken die automatisch worden gemaakt met behulp van de functie Autosom, zoals COUNTorSUM, or u uw eigen formule kunt define met behulp van de DAX formulebalk. Benoemde metingen kunnen worden doorgegeven als argument voor andere metingen.
Wanneer u een formule voor een measure in de formulebalk define, ziet u in de functie Knopinfo een voorbeeld van wat de resultaten voor het totaal in de huidige context zouden zijn, maar anders worden de resultaten overal not direct uitgevoerd. De reden waarom u de (gefilterde) resultaten van de berekening niet direct kunt zien, is omdat het resultaat van een measure niet kan worden bepaald zonder context. Voor het evaluate van een measure is een rapportageclienttoepassing vereist die de context kan bieden die nodig is om de gegevens op te halen die relevant zijn voor elke cel and en vervolgens de expressie voor elke cel evaluate. Deze client kan een Excel-draaitabel zijn, een or draaigrafiek, een Power BI-rapport, or een tabelexpressie 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-and kolomkoppen in een draaitabel, or elke selectie van slicers andfilters in een Power BI-rapport, een andere subset gegevens genereert waarop de measure wordt berekend. Gebruik bijvoorbeeld deze zeer eenvoudige measure formule:
Total Sales = SUM([Sales Amount])
Wanneer een gebruiker de TotalSales-measure in een rapport plaatst, wordt and vervolgens de kolom Product Categorie uit een Product tabel in Filtersgeplaatst, wordt het sum verkoopbedrag berekend and weergegeven voor elke product categorie.
In tegenstelling tot berekende kolommen bevat de syntaxis voor een measure de naam van de measurevóór de formule. In het zojuist opgegeven voorbeeld wordt de naam Totale verkoop weergegeven vóór de formule. Nadat u een measurehebt gemaakt, worden de naam and en de definitie ervan weergegeven in de veldenlijst van de rapportageclienttoepassing, en and afhankelijk van de perspectieven en rollen and zijn beschikbaar voor gebruikers all van het model.
Zie voor meer informatie:
Metingen in Power BI Desktop
Maatregelen in Analysis Services
metingen in Power Pivot-
Berekende kolommen
Een berekende kolom is een kolom die u toevoegt aan een bestaande tabel (in de modelontwerper) and vervolgens een DAX formule maakt waarmee de valuesvan de kolom wordt gedefinieerd. Wanneer een berekende kolom contains een geldige DAX formule, worden values voor elke rij berekend zodra de formule is ingevoerd. Values worden vervolgens opgeslagen in het gegevensmodel in het geheugen. Bijvoorbeeld in een Date tabel, wanneer de formule wordt ingevoerd in de formulebalk:
= [Calendar Year] & " Q" & [Calendar Quarter]
Voor elke rij in de tabel wordt een value berekend door values uit de kolom CalendarYear (in dezelfde tabel Date) een spatie toe te voegen and de hoofdletter Q, and vervolgens de values uit de CalendarQuarter kolom (in dezelfde Date tabel) toe te voegen. Het resultaat voor elke rij in de berekende kolom wordt onmiddellijk berekend wanneer and verschijnt, bijvoorbeeld als 2017 Q1. Kolom values worden alleen opnieuw berekend if de tabel or elke related tabel wordt verwerkt (vernieuwen) or het model uit het geheugen wordt verwijderd and vervolgens opnieuw wordt geladen, bijvoorbeeld wanneer and een Power BI Desktop-bestand opnieuw wordt geopend.
Zie voor meer informatie:
berekende kolommen in Power BI Desktop
berekende kolommen in Analysis Services-
berekende kolommen in Power draaitabel.
Berekende tabellen
Een berekende tabel is een berekend object, gebaseerd op een formule-expressie, afgeleid van allor deel van andere tabellen in hetzelfde model. In plaats van query's uit te voeren andvalues in de kolommen van de nieuwe tabel uit een gegevensbron te laden, definieert een DAX formule de valuesvan de tabel.
Berekende tabellen kunnen handig zijn in een rollenspeldimensie. Een voorbeeld is de tabel Date, zoals OrderDate, ShipDate, or DueDate, afhankelijk van de buitenlandse-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, or een subset van or een 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, and kunnen behoren tot een gegevenscategorie. Berekende tabellen kunnen worden benoemd, and aan de oppervlakte gebracht, or verborgen, net als elke andere tabel. Berekende tabellen worden opnieuw berekend if alle tabellen waaruit gegevens worden opgehaald, worden vernieuwd or bijgewerkt.
Zie 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 evaluate naar een Booleaanse voorwaarde TRUE
/FALSE
, 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 Verkoop, heeft de tabel Klanten de volgende DAX-formule:
= Customers[Country] = "USA"
Leden van de Verkooprol kunnen alleen gegevens voor klanten in de VS bekijken, en and-aggregaties, zoals SUM, worden alleen geretourneerd voor klanten in de VS. Beveiliging op rijniveau is not beschikbaar in Power Pivot in Excel.
Wanneer u beveiliging op rijniveau definieert met behulp van de DAX-formule, creëert u een toegestane rijenset. Hiermee wordt not de toegang tot andere rijen geweigerd; in plaats daarvan worden ze gewoon not geretourneerd als onderdeel van de toegestane rijenset. Andere rollen kunnen toegang verlenen tot de rijen die zijn uitgesloten door de DAX formule. If een gebruiker lid is van een andere rol, and de beveiliging op rijniveau van die rol toegang biedt tot die specifieke rijenset, kan de gebruiker gegevens voor die rij bekijken.
Beveiligingsformules op rijniveau zijn van toepassing op de opgegeven rijen en related rijen. Wanneer een tabel meerdere relaties heeft, filters beveiliging toepassen voor de relatie die actief is. Beveiligingsformules op rijniveau worden gecombineerd met andere formules die voor related-tabellen zijn gedefinieerd.
Zie voor meer informatie:
beveiliging op rijniveau (RLS) met Power BI-
Rollen in Analysis Services
Vragen
DAX query's kunnen worden gemaakt and worden uitgevoerd in SQL Server Management Studio (SSMS) and 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 eenvoudiger om and efficiënter te schrijven 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 evaluate verklaring. 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. Er bestaan alleen metingen voor de duration van de query. Zie queries DAXvoor meer informatie.
Formules
DAX formules zijn essentieel voor het maken van berekeningen in berekende kolommen and metingen, and het beveiligen van uw gegevens met behulp van beveiliging op rijniveau. Als u formules wilt maken voor berekende kolommen and maten, gebruikt u de formulebalk boven aan de modelontwerper windowor de DAX Editor. Als u formules wilt maken voor beveiliging op rijniveau, gebruikt u het dialoogvenster Rollenbeheer or Rollen beheren. Informatie in deze sectie is bedoeld om u op weg te helpen met het begrijpen van de basisbeginselen van DAX formules.
Basisbeginselen van formules
DAX formules kunnen heel eenvoudig or 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() |
Voegt todaydate in elke rij van een berekende kolom in. |
= 3 |
Hiermee voegt u de value 3 in elke rij van een berekende kolom in. |
= [Column1] + [Column2] |
Voegt de values toe in dezelfde rij van [Kolom1] and en [Kolom2] and en plaatst de resultaten in de berekende kolom van dezelfde rij. |
Of de formule die u maakt eenvoudig or complex is, u kunt de volgende stappen gebruiken bij het maken van een formule:
Elke formule moet beginnen met een gelijk sign (=).
U kunt een van beide typen or een functienaam selecteren or een expressie typt.
Begin met het typen van de first paar letters van de functie or naam die u wilt, waarna and Automatisch aanvullen een lijst met beschikbare functies, tabellen en and kolommen weergeeft. 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, and 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 and kolommen, or door in valueste typen.
Controleer op syntaxisfouten: zorg ervoor dat all haakjes worden gesloten and kolommen, tabellen andvalues correct worden verwezen.
Druk op ENTER om de formule te accepteren.
Notitie
In een berekende kolom, zodra u de formule and invoert, wordt de formule gevalideerd en vervolgens wordt de kolom gevuld met values. Als u in een measureop Enter drukt, wordt de measure definitie met de tabel opgeslagen. If een formule ongeldig is, wordt een error weergegeven.
In dit voorbeeld bekijken we een formule in een measure met de naam Dagen in huidige Quarter:
Days in Current Quarter = COUNTROWS( DATESBETWEEN( 'Date'[Date], STARTOFQUARTER( LASTDATE('Date'[Date])), ENDOFQUARTER('Date'[Date])))
Deze measure wordt gebruikt om een vergelijkingsverhouding te maken tussen een onvolledige periode and de previous periode. De formule moet rekening houden met het aandeel van de verstreken periode, and deze vergelijken met hetzelfde aandeel in de previous periode. In dit geval geeft [Dagen huidige Quarter tot Date]/[Dagen in huidige Quarter] het aandeel dat in de huidige periode is verstreken.
Deze formule contains bevat de volgende elementen:
Formule-element | Beschrijving |
---|---|
Days in Current Quarter |
De naam van de measure. |
= |
De formule begint met sign (=). |
COUNTROWS |
COUNTROWS telt het aantal rijen in de Date tabel |
() |
Open and sluitend haakje specificeert argumenten. |
DATESBETWEEN |
De functie DATESBETWEEN retourneert de datums tussen de lastdate voor elke value in de kolom Date in de Date tabel. |
'Date' |
Specificeert de Date-tabel. Tabellen staan tussen enkele aanhalingstekens. |
[Date] |
Dit specificeert de kolom Date in de tabel Date. Kolommen staan tussen vierkante haken. |
, |
|
STARTOFQUARTER |
De functie STARTOFQUARTER retourneert de date van het begin van de quarter. |
LASTDATE |
De functie LASTDATE retourneert de lastdate van de quarter. |
'Date' |
Specificeert de Date-tabel. |
[Date] |
Specificeert de Date-kolom in de Date-tabel. |
, |
|
ENDOFQUARTER |
De functie ENDOFQUARTER |
'Date' |
Specificeert de Date tabel. |
[Date] |
Specificeert de kolom Date in tabel Date. |
Formule AutoComplete 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 AutoAanvullen gebruiken in het midden van een bestaande formule met geneste functies. De tekst direct voor de invoegpositie wordt gebruikt om values weer te geven in de vervolgkeuzelijst, terwijl andall van de tekst na de invoegpositie ongewijzigd blijven.
Met AutoAanvullen wordt not het sluitende haakje van functies toegevoegd en or worden haakjes automatisch gematched. U moet ervoor zorgen dat elke functie syntactisch juist is or u de formule niet kunt opslaan or 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 or problemen met formules 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, andMINXall bijvoorbeeld een tabel als het argument first vereisen.
Functies
Een functie is een benoemde formule binnen een expressie. De meeste functies hebben vereiste and optionele argumenten, ook wel parameters genoemd, als invoer. Wanneer de functie wordt uitgevoerd, wordt een value geretourneerd. DAX bevat functies die u kunt gebruiken om berekeningen uit te voeren met datums and tijden, voorwaardelijke valueste maken, met tekenreeksen te werken, zoekacties uit te voeren op basis van relaties, and de mogelijkheid om een tabel te herhalen om recursieve berekeningen uit te voeren. If 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 or een tabel. If u alleen bepaalde values uit een tabel or kolom wilt gebruiken, kunt u filters toevoegen aan de formule.
If u berekeningen op rijbasis moet aanpassen, biedt DAX functies waarmee u de huidige rij valueor een relatedvalue als een soort 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 value. De tabel wordt not weergegeven in een rapportageclient, maar wordt gebruikt om invoer voor andere functies te bieden. U kunt bijvoorbeeld een tabel ophalen and en vervolgens de afzonderlijke values erin bepalen count, en orcalculate dynamische sommen bepalen voor de kolommen van gefilterde tabellen or.
DAX functies omvatten verschillende time intelligentie functies. Met deze functies kunt u defineor reeksen date selecteren en and dynamische berekeningen uitvoeren op basis van deze data orrange. U kunt bijvoorbeeld sommen voor parallelle perioden vergelijken.
Aggregatiefuncties
Aggregatiefuncties calculate een (scalaire) value zoals count, sum, average, minimum, or maximum voor all rijen in een kolom or tabel, zoals gedefinieerd door de expressie. Zie Aggregatiefunctiesvoor meer informatie.
Date and time functies
De dateandtime-functies in DAX zijn vergelijkbaar met dateandtime functies in Microsoft Excel. DAX functies zijn echter gebaseerd op een datum/tijd gegevenstype vanaf 1 maart 1900. Zie Dateandtime functiesvoor meer informatie.
Filter functies
De filter functies in DAX retourneren specifieke gegevenstypen, values opzoeken in related tabellen, andfilter door relatedvalues. De opzoekfuncties werken met behulp van tabellen and relaties, zoals een database. Met de filterfuncties kunt u gegevenscontext bewerken om dynamische berekeningen te maken. Zie Filter functiesvoor meer informatie.
Financiële functies
De financiële functies in DAX worden gebruikt in formules die financiële berekeningen uitvoeren, zoals netto huidige valueandrate van rendement. Deze functies zijn vergelijkbaar met financiële functies die worden gebruikt in Microsoft Excel. Zie Financiële functiesvoor meer informatie.
Informatiefuncties
De informatiefunctie kijkt naar de cel in het veld or en de gegeven rij wordt doorgegeven als argument and en geeft aan of de value overeenkomt met het verwachte type. De functie ISERROR retourneert bijvoorbeeld TRUE
if de value waarnaar u verwijst contains een error. Voor meer informatie, zie informatie-functies.
Logische functies
Logische functies reageren op een expressie om informatie over de values in de expressie te retourneren. Met de functie TRUE
kunt u bijvoorbeeld zien of een expressie die u evalueert een TRUE
valueretourneert. Zie Logische functiesvoor meer informatie.
Wiskundige and trigonometrische functies
De wiskundige functies in DAX zijn vergelijkbaar met de wiskundige excel-and trigonometrische functies. Er zijn enkele kleine verschillen in de numerieke gegevenstypen die worden gebruikt door DAX functies. Zie Wiskundige and trig-functiesvoor 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 functiesvoor meer informatie.
Relatiefuncties
Met relatiefuncties in DAX kunt u values retourneren uit een andere related tabel, een bepaalde relatie opgeven die moet worden gebruikt in een expressie, and kruisfilterrichting opgeven. Zie Relatiefunctiesvoor meer informatie.
Statistische functies
Statistische functies calculatevaluesrelated voor statistische verdelingen and waarschijnlijkheid, zoals standaarddeviatie and aantal permutaties. Zie Statistische functiesvoor meer informatie.
Tekstfuncties
Tekstfuncties in DAX lijken erg op hun tegenhangers in Excel. U kunt een deel van een tekenreeks retourneren, search is voor tekst binnen een tekenreeks, orconcatenate tekenreeks values. DAX biedt ook functies voor het beheren van de notaties voor datums, tijden and getallen. Zie Text-functiesvoor meer informatie.
Time intelligence-functies
Met de time intelligence-functies in DAX kunt u berekeningen maken die gebruikmaken van ingebouwde kennis over agenda's and datums. Door timeanddate reeksen te gebruiken in combinatie met aggregatie or berekeningen, kunt u zinvolle vergelijkingen maken over vergelijkbare time perioden voor verkoop, voorraad, en and enzovoort. Om meer te weten te komen, zie Time intelligence-functies (DAX).
Functies voor tabelmanipulatie
Deze functies retourneren een tabel or bestaande tabellen bewerken. Met behulp van ADDCOLUMNS kunt u bijvoorbeeld berekende kolommen toevoegen aan een opgegeven tabel, or u een samenvattingstabel kunt retourneren over een set groepen met de functie SUMMARIZECOLUMNS. Zie functies voor tabelbewerkingvoor meer informatie.
Variabelen
U kunt variabelen binnen een expressie maken met behulp van VAR. VAR technisch gezien not een functie, is het een trefwoord om het resultaat van een expressie op te slaan als een benoemde variabele. Deze variabele kan vervolgens worden doorgegeven als argument aan andere measure expressies. 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.
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 durationand uitvoer van de berekening. Wanneer u een DAX formule maakt, bepalen de termen die in de formule worden gebruikt, automatisch het value gegevenstype dat wordt geretourneerd.
DAX ondersteunt de volgende gegevenstypen:
Gegevenstype binnen het model | Gegevenstype in DAX | Beschrijving |
---|---|---|
Whole Number |
Een geheel getal van 64 bits (acht bytes) value1, 2 | Getallen zonder decimalen. Gehele getallen kunnen positief zijn or negatieve getallen, maar moeten gehele getallen zijn tussen -9.223.372.036.854.775.808 (-2^63) and 9.223.372.036.854.775.807 (2^63-1). |
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 range van values: Negatief values van -1,79E+308 tot en met -2,23E -308 Nul Positieve values van 2,23E-308 tot en met 1,79E+308 Het aantal significante cijfers is echter beperkt tot 17 decimale cijfers. |
Boolean |
Booleaans | Of een TrueorFalsevalue. |
Text |
Snaar | Een Unicode tekengegevensreeks. Dit kunnen tekenreeksen, getallen or datums zijn die worden weergegeven in een tekst format. |
Date |
Date/time | Datums and tijden in een geaccepteerde date-time weergave. Geldige datums worden all datums na 1 maart 1900. |
Currency |
Currency | Currency gegevenstype maakt values mogelijk tussen -922.337.203.685.477.5808 en 922.337.203.685.477.5807, met vier decimale cijfers van fixed precisie. |
N/A |
Blank | Een blank is een gegevenstype in DAX dat SQL null-waarden vervangt door and. U kunt een blank maken met behulp van de functie BLANK, and testen op lege waarden met behulp van de logische functie ISBLANK. |
Tabellaire gegevensmodellen bevatten ook het Tabel gegevenstype als invoer or uitvoer naar veel DAX functies. De functie FILTER gebruikt bijvoorbeeld een tabel als invoer and een andere tabel uitvoert die alleen de rijen contains die voldoen aan de filter voorwaarden. 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 and hoe ze van toepassing zijn, met name op DAX formules. Fouten in formules or 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
Context is een belangrijk concept dat u moet begrijpen bij het maken van DAX formules. Context stelt u in staat om dynamische analyses uit te voeren, omdat de resultaten van een formule veranderen om de huidige rij, or, en celselectie, and, alsook alle related gegevens weer te geven. Inzicht in context and het effectief gebruiken van context zijn essentieel voor het bouwen van krachtige, dynamische analyses, and 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 draaitabelrapport or
- Filters gedefinieerd in een formule
- Relaties die zijn opgegeven met behulp van speciale functies in een formule
Er zijn verschillende typen context: rijcontext, querycontext, andfilter context.
Rijcontext
Rij-context kan worden beschouwd als „de huidige rij”. If u een formule in een berekende kolom maakt, bevat de rijcontext voor die formule de values van all kolommen in de huidige rij. If de tabel wordt related naar een andere tabel, bevat de inhoud ook all de values uit de andere tabel die related zijn naar de huidige rij.
Stel dat u een berekende kolom maakt, = [Freight] + [Tax]
, waarmee values uit twee kolommen bij elkaar wordt opgeteld: Freight en Tax and, uit dezelfde tabel. Met deze formule wordt automatisch alleen values uit de huidige rij in de gespecificeerde kolommen opgehaald.
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 related tabellen zijn gekoppeld aan de huidige rij.
In de volgende formule wordt bijvoorbeeld de functie RELATED gebruikt om een belasting-value op te halen uit een related tabel, op basis van de regio waarnaar de order is verzonden. De belasting value wordt bepaald door de value voor regio in de huidige tabel te gebruiken, de regio in de related tabel op te zoeken, and vervolgens de belasting rate voor die regio uit de tabel related op te halen.
= [Freight] + RELATED('Region'[TaxRate])
Met deze formule wordt de belasting rate voor de huidige regio opgehaald uit de tabel Regio and en toegevoegd aan value van de kolom Vracht. In DAX formules moet u not weten or de specifieke relatie opgeven waarmee de tabellen worden verbonden.
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 and buitenste lus.
Stel dat uw model een tabel Productscontainsand een tabel Sales. Gebruikers kunnen de hele verkooptabel doorlopen, die vol is met transacties met meerdere producten, andfind de grootste hoeveelheid die voor elke product in één transactie is besteld.
Met DAX kunt u één formule maken die de juiste valueretourneert, and de resultaten automatisch worden bijgewerkt time een gebruiker gegevens toevoegt aan de tabellen.
= MAXX(FILTER(Sales,[ProdKey] = EARLIER([ProdKey])),Sales[OrderQty])
Zie EARLIERvoor een gedetailleerd voorbeeld van deze formule.
Bij summarizeslaat de EARLIER-functie de rijcontext op van de bewerking die voorafgaat aan de huidige bewerking. Op all momenten slaat de functie twee contextsets in het geheugen op: één set context vertegenwoordigt de huidige rij voor de binnenste lus van de formule, and een andere set context de huidige rij voor de buitenste lus van de formule vertegenwoordigt. DAX voert values automatisch tussen de twee lussen door, zodat u complexe aggregaties kunt maken.
Vraagcontext
Querycontext verwijst naar de subset gegevens die impliciet voor een formule worden opgehaald. Wanneer een gebruiker bijvoorbeeld een measureor veld in een rapport plaatst, onderzoekt de engine rij-and kolomkoppen, slicers and rapport filters 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 zijn gedefinieerd door de formule, and vervolgens values in het rapport invullen.
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 values wordt opgeteld in de kolom Winst van de tabel Sales: = SUM('Sales'[Profit])
.
If u deze formule in een berekende kolom in de tabel Sales gebruikt, 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. Er zullen resultaten zijn met winst voor all regio's, all producten, all jaren, and, enzovoort.
Gebruikers willen echter meestal niet hetzelfde resultaat honderden keren zien, maar in plaats daarvan de winst voor een bepaalde year, een bepaald land, een bepaald product, or een combinatie hiervan, and vervolgens een eindtotaal krijgen.
In een rapport wordt de context gewijzigd door te filteren, or velden te verwijderen, and door gebruik te maken van slicers. Voor elke wijziging wordt de querycontext waarin de measure wordt geëvalueerd. Daarom wordt dezelfde formule, die wordt gebruikt in een measure, geëvalueerd in een andere querycontext voor elke cel.
Filter context
Filter context is de set values die in elke kolom is toegestaan, or in de values opgehaald uit een related tabel. Filters kan worden toegepast op de kolom in de ontwerpfunctie, or in de presentatielaag (rapporten and draaitabellen). Filters kan ook expliciet worden gedefinieerd door filter expressies in de formule.
Filter context wordt toegevoegd wanneer u filter beperkingen opgeeft voor de set values die is toegestaan in een kolom or tabel, met behulp van argumenten voor een formule. Filter context geldt bovenop andere contexten, zoals rijcontext or querycontext.
In tabellaire modellen zijn er veel manieren om filter context te maken. Binnen de context van clients die het model kunnen gebruiken, zoals Power BI-rapporten, kunnen gebruikers direct filters maken door slicers toe te voegen or rapport filters op de rij and kolomkoppen. U kunt ook filter expressies rechtstreeks in de formule opgeven om relatedvaluesop te geven, om tabellen te filter die worden gebruikt als invoer, or om dynamisch context op te halen voor de values die in berekeningen worden gebruikt. U kunt ook or volledig wissen of filters selectief wissen op bepaalde kolommen. Dit is erg handig bij het maken van formules die calculate eindtotalen.
Zie de FILTER Function (DAX)voor meer informatie over het maken van filters in formules.
Zie de ALL Functie (DAX)voor een voorbeeld van hoe filters kan worden gewist om eindtotalen te maken.
Zie ALLEXCEPTvoor voorbeelden van het selectief wissen van and en het toepassen van filters in formules.
Context bepalen in formules
Wanneer u een DAX formule maakt, wordt de formule first getest op geldige syntaxis, and vervolgens getest om ervoor te zorgen dat de namen van de kolommen and tabellen die in de formule zijn opgenomen, in de huidige context worden gevonden. If een kolom or tabel die is opgegeven door de formule, niet kan worden gevonden, wordt een error geretourneerd.
Context tijdens validatie (and herberekeningsbewerkingen) wordt bepaald zoals beschreven in de voorgaande secties, met behulp van de beschikbare tabellen in het model, eventuele relaties tussen de tabellen and alle filters die zijn toegepast.
Bijvoorbeeld, if u zojuist bepaalde gegevens hebt geïmporteerd in een nieuwe tabel and het is notrelated in andere tabellen (and u not alle filtershebt toegepast), is de huidige context de volledige set kolommen in de tabel. If de tabel is gekoppeld aan relaties met andere tabellen, bevat de huidige context de related tabellen. If als u een kolom uit de tabel toevoegt aan een rapport dat slicers heeft and, bijvoorbeeld een rapport filters, 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 and 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.
Exploitanten
De DAX taal maakt gebruik van vier verschillende typen berekeningsoperators in formules:
- Vergelijkingsoperatoren om valuesand te vergelijken, retourneren een logische
TRUE
'FALSE' value. - Rekenkundige operators voor het uitvoeren van rekenkundige berekeningen die numerieke valuesteruggeven.
- Tekstsamenvoegingsoperatoren om twee or meer teksttekenreeksen toe te voegen.
- Logische operators die twee or meer expressies combineren om één resultaat te retourneren.
Zie DAX operatorsvoor gedetailleerde informatie over operators die worden gebruikt in DAX formules.
Werken met tabelkolommen and
Tabellen in tabellaire gegevensmodellen zien eruit als Excel-tabellen, maar zijn anders in de manier waarop ze werken met gegevens and met formules:
- Formules werken alleen met tabellen, and kolommen, not afzonderlijke cellen, range verwijzingen, or matrices.
- Formules kunnen relaties gebruiken om values op te halen uit related tabellen. De values die worden opgehaald, zijn altijd related naar de huidige rij value.
- U kunt geen onregelmatige or 'vervormde' gegevens hebben zoals u kunt in een Excel-werkblad. Elke rij in een tabel moet hetzelfde aantal kolommen bevatten. In sommige kolommen kunt u echter lege values hebben. Excel-gegevenstabellen and tabellaire modelgegevenstabellen zijn not uitwisselbaar.
- Omdat voor elke kolom een gegevenstype is ingesteld, moet elke value in die kolom van hetzelfde type zijn.
Verwijzen naar kolommen van tabel and in formules
U kunt verwijzen naar elke tabel and kolom 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 first op algemene syntaxis, and vervolgens de namen van kolommen and tabellen die u opgeeft op basis van mogelijke kolommen and tabellen in de huidige context. If de naam niet eenduidig is orif de kolom or tabel niet kan worden gevonden, krijgt u een error in de formule (een tekenreeks #ERROR in plaats van een gegevens value in cellen waarin de error zich voordoet). Zie Naamgevingsvereisten in DAX syntaxisvoor meer informatie over naamgevingsvereisten voor tabellen, kolommen and andere objecten.
Tabelrelaties
Door relaties tussen tabellen te maken, hebt u de mogelijkheid om relatedvalues in andere tabellen te gebruiken in berekeningen. U kunt bijvoorbeeld een berekende kolom gebruiken om te bepalen all de verzendrecords related aan de huidige reseller, and vervolgens de verzendkosten voor elke leverancier sum. In veel gevallen kan een relatie echter not nodig zijn. U kunt de functie LOOKUPVALUE in een formule gebruiken om de value in result_columnName te retourneren voor de rij die voldoet aan criteria die zijn opgegeven in de search_columnandsearch_value argumenten.
Veel DAX functies vereisen dat er een relatie bestaat tussen de tabellen, or tussen meerdere tabellen, om de kolommen te vinden waarnaar u hebt verwezen and resultaten 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 en or onjuiste resultaten te voorkomen, wordt slechts één relatie op een time aangewezen als de actieve relatie. Maar u kunt de actieve relatie zo nodig wijzigen om verschillende verbindingen in de gegevens tijdens berekeningen te verkennen. USERELATIONSHIP functie kan worden gebruikt om één or 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 met een relatie, moet u ervoor zorgen dat de twee kolommen die worden gebruikt als sleutels values die overeenkomen. Referentiële integriteit wordt not afgedwongen; daarom is het mogelijk om niet-overeenkomende values te hebben in een sleutelkolom en nog steeds and een relatie te maken. If dit gebeurt, moet u er rekening mee houden dat blankvaluesor niet-overeenkomende values van invloed kunnen zijn op de resultaten van formules.
Wanneer u tabellen in uw model koppelt met behulp van relaties, vergroot u het bereik, orcontext, waarin uw formules worden geëvalueerd. Wijzigingen in context als gevolg van het toevoegen van nieuwe tabellen, nieuwe relaties, or van wijzigingen in de actieve relatie kunnen ertoe leiden dat uw resultaten veranderen op manieren die u mogelijk not verwacht. Zie Context in dit artikel voor meer informatie.
Proces and vernieuwen
procesandherberekening twee afzonderlijke maar related bewerkingen zijn. U moet deze concepten grondig begrijpen bij het ontwerpen van een model dat contains complexe formules, grote hoeveelheden gegevens or gegevens die zijn 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 and om wijzigingen in de onderliggende gegevens weer te geven. Herberekening kan op de volgende manieren van invloed zijn op de prestaties:
De values in een berekende kolom worden berekend en and in het model opgeslagen. Als u de values in de berekende kolom wilt bijwerken, moet u het model verwerken met behulp van een van de drie verwerkingsopdrachten: Process Full, Process Data, of or Process Recalc. Het resultaat van de formule moet altijd opnieuw worden berekend voor de hele kolom wanneer u de formule wijzigt.
De values berekend door metingen worden dynamisch geëvalueerd wanneer een gebruiker de measure toevoegt aan een draaitabel or een rapport te openen; wanneer de gebruiker de context wijzigt, values geretourneerd door de measure wijziging. De resultaten van de measure weerspiegelen altijd de meest recente gegevens in de cache in het geheugen.
De verwerking van de herberekening and heeft geen effect voor beveiligingsformules op rijniveau, tenzij het resultaat van een herberekening een andere valueretourneert, waardoor de rij opvraagbaar wordt voor rolleden ornot.
Updates
DAX wordt voortdurend verbeterd. Nieuwe and bijgewerkte functies worden uitgebracht met de next beschikbare update, meestal maandelijks. Services worden bijgewerkt first, gevolgd door geïnstalleerde applicaties zoals Power BI Desktop, Excel, SQL Server Management Studio (SSMS), and Analysis Services-projectextensie voor Visual Studio (SSDT). SQL Server Analysis Services wordt bijgewerkt met de cumulatieve update van next. Nieuwe functies worden first aangekondigd and beschreven in de DAX functiehandleiding in combinatie met Power BI Desktop-updates.
Not all functies worden ondersteund in earlier versies van SQL Server Analysis Services and Excel.
Probleemoplossing
If krijgt u een error bij het definiëren van een formule, bevat de formule mogelijk een syntactische error, semantische error, orberekening error.
Syntactische fouten zijn het eenvoudigst om op te lossen. Meestal hebben ze betrekking op een ontbrekend haakje or komma.
Het andere type error treedt op wanneer de syntaxis juist is, maar de valueor waarnaar wordt verwezen, is not zinvol in de context van de formule. Dergelijke semantische and berekeningsfouten kunnen worden veroorzaakt door een van de volgende problemen:
- De formule verwijst naar een niet-bestaande kolom, tabel or functie.
- De formule lijkt correct te zijn, maar wanneer de gegevensengine de gegevens ophaalt, wordt een type niet-overeenkomend gevonden and een errorgenereert.
- De formule geeft een onjuist getal or type argumenten door aan een functie.
- De formule verwijst naar een andere kolom met een erroren and, waardoor de values ongeldig zijn.
- De formule verwijst naar een kolom die not verwerkt, wat betekent dat deze metagegevens bevat, maar geen werkelijke gegevens voor berekeningen.
In de vier gevallen van first markeert DAX de hele kolom contains die de ongeldige formule bevat. In het last geval wordt de kolom door DAX uitgegrijsd om aan te geven dat de kolom in een onverwerkte staat is.
Hulpprogramma's voor apps and
Power BI Desktop
Power BI Desktop is een gratis gegevensmodellering and rapportagetoepassing. De modelontwerper bevat een DAX-editor voor het maken van DAX berekeningsformules.
Power Draaitabel in Excel
De ontwerpfunctie Power Pivot in Excel bevat een DAX editor voor het maken van DAX berekeningsformules.
Visual Studio
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
SQL Server Management Studio (SSMS) is een essentieel hulpprogramma voor het werken met Analysis Services. SSMS bevat een DAX queryeditor voor het queryen van zowel tabellaire als and multidimensionale modellen.
DAX Studio
DAX Studio is een opensource-clienthulpprogramma voor het maken van and het uitvoeren van DAX query's op Analysis Services, Power BI Desktop andPower Pivot in Excel-modellen.
Tabeleditor
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 syntaxismarkering, waarmee u eenvoudig metingen, berekende kolommen and berekende tabelexpressies kunt bewerken.
Leerbronnen
Wanneer u DAXleert, kunt u het beste de toepassing gebruiken die u gaat gebruiken om uw gegevensmodellen te maken. nl-NL: Analysis Services, Power BI Desktop, andPower Pivot in Excel all hebben artikelen en and zelfstudies die lessen bevatten over het maken van maatregelen, berekende kolommen, and rij-filters met behulp van DAX. Hier volgen enkele aanvullende bronnen:
Gebruik DAX in Power BI Desktop leren path.
De definitieve handleiding voor DAX door Alberto Ferrari and Marco Russo (Microsoft Press). Now in de second editie biedt deze uitgebreide handleiding basisbeginselen voor innovatieve high-performance technieken voor beginnende gegevensmodelleerders and BI-professionals.
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 and Tips.