Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Rapportageclients zoals Power BI en Excel voeren DAX query's uit wanneer visuals worden weergegeven in een rapport of een veld dat is toegevoegd aan een tabel. Deze DAX query's worden aangepast wanneer een filter wordt toegepast. De performance analyzer in Power BI Desktop kan u deze DAX query's laten zien en zelfs uitvoeren in DAX queryweergave van Power BI Desktop.
Met behulp van DAX queryweergave in Power BI Desktop of DAX query's schrijven in de Power BI-service, kunt u uw eigen DAX-query's maken en uitvoeren. Met Microsoft Fabrickunt u uw productiviteit verder verhogen met Copilot om DAX queries te schrijven in de DAX queryweergave op Desktop of web. Naast Power BI-hulpprogramma's kunnen DAX-query's worden uitgevoerd in Fabric-notebooks met behulp van een semantische koppeling om gegevens uit semantische modellen te lezen met Python. Bovendien is de Execute Queries REST API, die ook beschikbaar is in Power Automate, beschikbaar. Met andere hulpprogramma's, zoals SQL Server Management Studio (SSMS), Power BI Report Builderen opensource-hulpprogramma's zoals DAX Studio, kunt u ook DAX query's maken en uitvoeren.
DAX query's geven de resultaten als een tabel weer, rechtstreeks in het hulpprogramma, waardoor u snel de prestaties van uw DAX formules in metingen kunt testen of eenvoudig de gegevens in uw semantische model kunt bekijken. INFO en INFO. WEERGAVE DAX functies kunnen ook informatie krijgen over uw semantische model, zoals een lijst met tabellen, kolommen, metingen en nog veel meer.
Voordat u meer leert over query's, is het belangrijk dat u een goed begrip hebt van DAX basisprincipes. Als u dat nog niet hebt gedaan, zorg ervoor dat u DAX-overzichtbekijkt.
Zoekwoorden
DAX query's een eenvoudige syntaxis hebben die bestaat uit slechts één vereist trefwoord, EVALUATE. EVALUATE wordt gevolgd door een tabelexpressie, zoals een DAX functie of tabelnaam, die bij het uitvoeren een resultaattabel uitvoert. Tabelexpressies die een resultaattabel uitvoeren, zijn onder andere:
- Algemene DAX functies die een tabel uitvoeren, zoals SUMMARIZE, SUMMARIZECOLUMNS, SELECTCOLUMNS, FILTER, UNION, TOPN, ADDCOLUMNS, DATATABLEen vele andere, werken met EVALUATE om een resultaattabel uit te voeren.
- Tabellen in het model waarnaar wordt verwezen op naam, werken met EVALUATE om een resultaattabel met de gegevens in de tabel uit te voeren. EVALUATE tabelnaam kan bijvoorbeeld worden uitgevoerd als een DAX-query.
- Metingen in het model of een DAX formule, die een scalaire waarde retourneren, werken met EVALUATE om de waarde als resultaattabel weer te geven wanneer deze tussen accolades wordt geplaatst. EVALUATE bijvoorbeeld {[Totale verkoop]} of EVALUATE {COUNTROWS('Verkoop')} kan worden uitgevoerd als een DAX-query. Deze worden tabelconstructorsgenoemd.
Er zijn verschillende optionele trefwoorden die specifiek zijn voor DAX query's: ORDER BY, START AT, DEFINE, MEASURE, VAR, TABLE en COLUMN.
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>
Parameters voor EVALUATE
Term | Definitie |
---|---|
table |
Een tabelexpressie. |
EVALUATE voorbeeld
EVALUATE
'Sales Order'
Retourneert alle rijen en kolommen uit de tabel Verkooporder, als resultaattabel. Dit kan worden beperkt met het gebruik van TOPN of FILTER, en gesorteerd met ORDER BY.
ORDER BY (optioneel)
Het optionele ORDER BY
trefwoord definieert een of meer kolommen in de query of expressies die worden gebruikt om queryresultaten te sorteren. Elke expressie die voor elke rij van het resultaat kan worden geëvalueerd, is geldig. Elke kolom in de query zelf is ook geldig.
Sorteren op kolomeigenschap in semantische modellen is niet van toepassing op DAX queryresultaten. Als een kolom moet worden gesorteerd op een andere kolom in het model, zoals in het geval van Maandnaam, moet de sortering op kolom ook worden opgenomen in de DAX query die moet worden gebruikt in de ORDER BY.
ORDER BY syntaxis
EVALUATE <table>
[ORDER BY {<expression> [{ASC | DESC}]}[, …]]
Parameters voor ORDER BY
Term | Definitie |
---|---|
expression |
Elke DAX-expressie die één scalaire waarde retourneert of een kolom die is opgenomen in de DAX-query. |
ASC |
(standaard) Oplopende sorteervolgorde. |
DESC |
Aflopende sorteervolgorde. |
ORDER BY voorbeeld
EVALUATE
SUMMARIZECOLUMNS(
// Group by columns
'Date'[Month Name],
'Date'[Month of Year],
'Product'[Category],
// Optional filters
FILTER(
VALUES('Product'[Category]),
[Category] = "Clothing"
),
// Measures or explicit DAX formulas to aggregate and analyze the data by row
"Orders", [Orders],
"Avg Profit per Order", DIVIDE(
[Total Sales Profit],
[Orders]
)
)
// DAX queries do not use sort order defined in Power BI,
// sort by columns must be included in the DAX query to be used in order by
ORDER BY 'Date'[Month of Year] ASC
Retourneert kledingorders en gemiddelde winst per order per maand, in oplopende volgorde per maand, als resultaattabel.
TOPN kiest niet het opgegeven aantal rijen dat moet worden geretourneerd op basis van de sorteervolgorde die is opgegeven in ORDER BY. In plaats daarvan heeft TOPN een eigen syntaxis om desgewenst een sortering op te geven voordat de bovenste 100 rijen worden geretourneerd. ORDER BY sorteert alleen de resultaattabel die wordt geretourneerd door TOPN.
EVALUATE
TOPN(
100,
'Sales Order',
// The way the data is sorted before the top 100 rows are selected
'Sales Order'[SalesOrderLineKey], ASC
)
// The way the data is sorted for the results
ORDER BY
'Sales Order'[Sales Order] ASC,
'Sales Order'[Sales Order Line] ASC
Retourneert de top 100 verkooporders gesorteerd op SalesOrderLienKey oplopend en sorteert vervolgens eerst de resultaten op verkooporder en vervolgens op verkooporderregel.
START AT (optioneel)
Het optionele START AT
trefwoord wordt gebruikt in een ORDER BY
-clause. Hiermee definieert u de waarde waarmee de queryresultaten beginnen.
START AT syntaxis
EVALUATE <table>
[ORDER BY {<expression> [{ASC | DESC}]}[, …]
[START AT {<value>|<parameter>} [, …]]]
Parameters voor START AT
Termijn | Definitie |
---|---|
value |
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 clausule. Er kunnen zoveel argumenten in de START AT-component zijn als in de ORDER BY-component, maar niet meer. Het eerste argument in de START AT definieert de beginwaarde in kolom 1 van de ORDER BY kolommen. Het tweede argument in de START AT definieert de beginwaarde in kolom 2 van de ORDER BY kolommen in de rijen die voldoen aan de eerste waarde voor kolom 1.
START AT voorbeeld
EVALUATE
'Sales Order'
ORDER BY 'Sales Order'[Sales Order] ASC
// Start at this order, orders before this order will not be displayed
START AT "SO43661"
Retourneert alle kolommen uit de tabel Verkooporder, in oplopende volgorde per verkooporder, beginnend bij SO43661. Rijen die vóór deze verkooporder komen, worden niet opgenomen in de resultaat tabel.
DEFINE (optioneel)
Het optionele DEFINE
trefwoord introduceert een of meer definities van berekende entiteiten die alleen bestaan voor de duur van de query. In tegenstelling tot EVALUATE
kan er slechts één DEFINE
blok zijn met een of meer definities in een DAX query.
DEFINE
moet voorafgaan aan de eerste EVALUATE
instructie en geldig zijn voor alle EVALUATE instructies in de query. Definities kunnen variabelen, metingen, tabellen1en kolommen1zijn. 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 trefwoord DEFINE
is opgenomen in een query.
DEFINE MEASURE
is een veelvoorkomend scenario voor het bouwen van nieuwe metingen of het bewerken van bestaande metingen in een semantisch model. Wanneer de meting al bestaat in het model, gebruikt de DAX query de meting DAX formule die is gedefinieerd in de query. Dit is handig voor het testen van metingen met een DAX-query voordat u het model bijwerkt.
DEFINE MEASURE
is ook handig om aanvullende analyse te maken met DAX formules voor een specifieke DAX query waarvoor u mogelijk geen machtiging hebt om een modelmeting toe te voegen of als het niet nodig is om deze in het model te hebben.
DEFINE syntaxis
[DEFINE
(
(MEASURE <table name>[<measure name>] = <scalar expression>) |
(VAR <var name> = <table or scalar expression>) |
(TABLE <table name> = <virtual table definition>) |
(COLUMN <table name>[<column name>] = <scalar expression>) |
) +
]
(EVALUATE <table expression>) +
Parameters voor DEFINE
Term | Definitie |
---|---|
Entity |
MEASURE, VAR, TABLE1of COLUMN1. |
name |
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. |
expression |
Elke DAX-expressie die een tabel- of scalaire waarde retourneert. De expressie kan een van de gedefinieerde entiteiten gebruiken. Als een scalaire expressie moet worden geconverteerd naar een tabelexpressie, verpakt u de expressie in een tabelconstructor met accolades {} of gebruikt u de functie ROW() om één rijtabel te retourneren. |
[1]Waarschuwing: querytabel- en kolomdefinities zijn uitsluitend 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 - Parametersvoor meer informatie.
DEFINE voorbeeld
DEFINE
VAR _firstyear = MIN('Date'[Fiscal Year])
VAR _lastyear = MAX('Date'[Fiscal Year])
TABLE 'Unbought products' = FILTER('Product', [Orders] + 0 = 0)
COLUMN 'Unbought products'[Year Range] = _firstyear & " - " & _lastyear
MEASURE 'Unbought products'[Unbought products] = COUNTROWS('Unbought products')
EVALUATE
'Unbought products'
EVALUATE
{[Unbought products]}
Retourneert de tabel die is gedefinieerd in de DAX-query om niet-gekochte producten weer te geven met een extra gedefinieerde kolom die verwijst naar specifieke variabelen. Er wordt ook een maatregel gedefinieerd en geëvalueerd om de rijen van niet-gekochte producten te tellen.
DEFINE
MEASURE 'Pick a sales measure'[Orders] = DISTINCTCOUNT('Sales Order'[Sales Order])
MEASURE 'Pick a sales measure'[Customers] = CALCULATE(
COUNTROWS(Customer),
FILTER(
'Sales',
[Orders] > 0
)
)
MEASURE 'Pick a sales measure'[Orders per Customer] = DIVIDE(
[Orders],
[Customers],
0
)
EVALUATE
SUMMARIZECOLUMNS(
'Date'[Fiscal Year],
"Orders", [Orders],
"Customers", [Customers],
"Orders per Customer", [Orders per Customer]
)
Retourneert een tabel die drie gedefinieerde metingen evalueert om de resultaten per fiscaal jaar weer te geven. Alle metingen bestaan ook in het model en orders per klant worden gewijzigd in de DAX-query.
Parameters in DAX queries
Een goed gedefinieerde DAX query-instructie kan worden geparameteriseerd en vervolgens gebruikt met alleen wijzigingen in de parameterwaarden.
De Execute-methode (XMLA) heeft een Parameters Element (XMLA) collectie-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 ervoor.
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 element <STATEMENT>
genereren een foutreactie in XMLA.
Parameters die worden gebruikt en niet zijn gedefinieerd in het <Parameters>
-element genereren een foutantwoord in XMLA.