DAX-query's
Rapportageclients zoals Power BI en Excel voeren DAX-query's uit wanneer een veld in een rapport wordt geplaatst of wanneer een filter wordt toegepast. Met behulp van SQL Server Management Studio (SSMS), Power BI Report Builder en opensource-hulpprogramma's zoals DAX Studio kunt u uw eigen DAX-query's maken en uitvoeren. DAX-query's retourneren resultaten als een tabel in het hulpprogramma, zodat u snel de prestaties van uw DAX-formules kunt maken en testen.
Voordat u meer te weten komt over query's, is het belangrijk dat u een goed begrip hebt van de basisbeginselen van DAX. Als u dat nog niet hebt gedaan, moet u het DAX-overzicht uitchecken.
Trefwoorden
DAX-query's hebben een eenvoudige syntaxis die bestaat uit slechts één vereist trefwoord, EVALUATE en verschillende optionele trefwoorden: ORDER BY, START AT, DEFINE, MEASURE, VAR, TABLE en COLUMN. Elk trefwoord definieert een instructie die wordt gebruikt voor de duur van de query.
EVALUATE (vereist)
Op het meest eenvoudige niveau is een DAX-query een EVALUATE-instructie met een tabelexpressie. Ten minste één EVALUATE-instructie is vereist, maar een query kan een willekeurig aantal EVALUATE-instructies bevatten.
EVALUATE-syntaxis
EVALUATE <table>
EVALUATE-parameters
Term | Definitie |
---|---|
table | Een tabelexpressie. |
EVALUATE-voorbeeld
EVALUATE
'Internet Sales'
Retourneert alle rijen en kolommen uit de tabel Internet Sales als een tabel.
ORDER BY (optioneel)
Het optionele trefwoord ORDER BY definieert een of meer expressies die worden gebruikt om queryresultaten te sorteren. Elke expressie die voor elke rij van het resultaat kan worden geëvalueerd, is geldig.
ORDER BY-syntaxis
EVALUATE <table>
[ORDER BY {<expression> [{ASC | DESC}]}[, …]]
ORDER BY-parameters
Term | Definitie |
---|---|
uitdrukking | Dax-expressies die één scalaire waarde retourneren. |
ASC | (standaard) Oplopende sorteervolgorde. |
DESC | Aflopende sorteervolgorde. |
ORDER BY-voorbeeld
EVALUATE
'Internet Sales'
ORDER BY
'Internet Sales'[Order Date]
Retourneert alle rijen en kolommen uit de tabel Internet Sales, in oplopende volgorde op orderdatum, als een tabel.
STARTEN BIJ (optioneel)
Het optionele trefwoord START AT wordt gebruikt in een ORDER BY-component . Hiermee definieert u de waarde waarmee de queryresultaten beginnen.
BEGIN BIJ syntaxis
EVALUATE <table>
[ORDER BY {<expression> [{ASC | DESC}]}[, …]
[START AT {<value>|<parameter>} [, …]]]
BEGINNEN BIJ parameters
Term | Definitie |
---|---|
waarde | Een constante waarde. Kan geen expressie zijn. |
parameter | De naam van een parameter in een XMLA-instructie voorafgegaan door een @ teken. |
START AT Opmerkingen
START AT-argumenten hebben een een-op-een-correspondentie met de kolommen in de ORDER BY-component. De COMPONENT START AT kan zoveel argumenten bevatten als in de ORDER BY-component, maar niet meer. Het eerste argument in START AT definieert de beginwaarde in kolom 1 van de KOLOMMEN ORDER BY. Het tweede argument in START AT definieert de beginwaarde in kolom 2 van de KOLOMMEN ORDER BY in de rijen die voldoen aan de eerste waarde voor kolom 1.
START AT-voorbeeld
EVALUATE
'Internet Sales'
ORDER BY
'Internet Sales'[Sales Order Number]
START AT "SO7000"
Retourneert alle rijen en kolommen uit de tabel Internet Sales, in oplopende volgorde op Verkoopordernummer, beginnend bij SO7000.
DEFINE (optioneel)
Het optionele sleutelwoord DEFINE introduceert een of meer berekende entiteitsdefinities die alleen bestaan voor de duur van de query. Definities worden voorafgegaan door de EVALUATE-instructie en zijn geldig voor alle EVALUATE-instructies in de query. Definities kunnen variabelen, metingen, tabellen1 en kolommen1 zijn. Definities kunnen verwijzen naar andere definities die vóór of na de huidige definitie worden weergegeven. Er is ten minste één definitie vereist als het sleutelwoord DEFINE is opgenomen in een query.
SYNTAXIS DEFINIËREN
[DEFINE
(
(MEASURE <table name>[<measure name>] = <scalar expression>) |
(VAR <var name> = <table or scalar expression>) |
(TABLE <table name> = <table expression>) |
(COLUMN <table name>[<column name>] = <scalar expression>) |
) +
]
(EVALUATE <table expression>) +
PARAMETERS DEFINIËREN
Term | Definitie |
---|---|
Entity | MEASURE, VAR, TABLE1 of COLUMN1. |
naam | De naam van een meting, var, tabel of kolomdefinitie. Het kan geen expressie zijn. De naam hoeft niet uniek te zijn. De naam bestaat alleen voor de duur van de query. |
uitdrukking | Dax-expressies die een tabel- of scalaire waarde retourneren. De expressie kan een van de gedefinieerde entiteiten gebruiken. Als er een scalaire expressie moet worden geconverteerd naar een tabelexpressie, verpakt u de expressie in een tabelconstructor met accolades {} of gebruikt u de ROW() functie om één rijtabel te retourneren. |
[1] Waarschuwing: querytabel- en KOLOMdefinities zijn alleen bedoeld voor intern gebruik. Hoewel u TABEL- en KOLOM-expressies voor een query zonder syntaxisfout kunt definiëren, kunnen deze runtimefouten veroorzaken en worden ze niet aanbevolen.
DEFINE-opmerkingen
Een DAX-query kan meerdere EVALUATE-instructies hebben, maar kan slechts één DEFINE-instructie hebben. Definities in de INSTRUCTIE DEFINE kunnen van toepassing zijn op alle EVALUATE-instructies in de query.
Er is ten minste één definitie vereist in een DEFINE-instructie.
Metingendefinities voor een query overschrijven modelmetingen van dezelfde naam, maar worden alleen in de query gebruikt. Ze hebben geen invloed op de modelmeting.
VAR-namen hebben unieke beperkingen. Zie VAR - Parameters voor meer informatie.
DEFINE-voorbeeld
DEFINE
MEASURE 'Internet Sales'[Internet Total Sales] =
SUM ( 'Internet Sales'[Sales Amount] )
EVALUATE
SUMMARIZECOLUMNS (
'Date'[Calendar Year],
TREATAS (
{
2013,
2014
},
'Date'[Calendar Year]
),
"Total Sales", [Internet Total Sales],
"Combined Years Total Sales",
CALCULATE (
[Internet Total Sales],
ALLSELECTED ( 'Date'[Calendar Year] )
)
)
ORDER BY [Calendar Year]
Retourneert de berekende totale verkoop voor jaren 2013 en 2014 en gecombineerde berekende totale verkoop voor jaren 2013 en 2014, als tabel. De meting in de INSTRUCTIE DEFINE, Internet Total Sales, wordt gebruikt in expressies totale verkoop en totale omzet van gecombineerde jaren.
Parameters in DAX-query's
Een goed gedefinieerde DAX-queryinstructie kan worden geparameteriseerd en vervolgens gebruikt met alleen wijzigingen in de parameterwaarden.
De methode Execute Method (XMLA) heeft een XMLA-verzamelingselement (Parameters Element) waarmee parameters kunnen worden gedefinieerd en een waarde kunnen worden toegewezen. In de verzameling definieert elk XMLA-element (Parameter Element) de naam van de parameter en een waarde.
Verwijs naar XMLA-parameters door de naam van de parameter vooraf te laten gaan met een @
teken. Elke plaats in de syntaxis waarin een waarde is toegestaan, kan de waarde worden vervangen door een parameteroproep. Alle XMLA-parameters worden als tekst getypt.
Belangrijk
Parameters die zijn gedefinieerd in de sectie parameters en niet worden gebruikt in het <> instructie-element genereren een foutreactie in XMLA. Parameters die worden gebruikt en niet zijn gedefinieerd in het <element Parameters> genereren een foutreactie in XMLA.