DAX queries
Rapportageclients zoals Power BI and Excel voeren DAX query's uit wanneer visuals in een rapport worden weergegeven, or een veld dat aan een tabel is toegevoegd, and deze DAX query's worden aangepast wanneer een filter wordt toegepast. In de Performance Analyzer- in Power BI Desktop kunt u deze DAX query's weergeven andeven deze uitvoeren in de DAX queryweergave.
Met behulp van DAX queryweergave in Power BI Desktop orkunt uDAX-query's schrijven in de Power BI-dienst en vervolgens and uw eigen DAX-query's maken en uitvoeren. Met Microsoft Fabrickunt u uw productiviteit verder verhogen met Copilot om DAX query's te schrijven in de DAX weergave van de Desktop Web or. Naast Power BI-hulpprogramma's kunnen DAX query's worden uitgevoerd in Fabric-notebooks met behulp van semantische koppeling om gegevens uit semantische modellen met Python te lezen, and met de REST API-query's uitvoeren, ook beschikbaar in Power Automate. Andere hulpprogramma's, zoals SQL Server Management Studio (SSMS), Power BI Report Builder, and opensource-hulpprogramma's zoals DAX Studio, kunt u ook andDAX query's maken.
DAX query's resultaten retourneren als een tabel right in het hulpprogramma, zodat u snel and de prestaties van uw DAX formules in metingen kunt testen or eenvoudig de gegevens in uw semantisch model weer te geven. INFO and INFO.VIEW DAX functies kunnen ook informatie krijgen over uw semantische model, zoals een lijst met tabellen, kolommen, metrieken, and nog veel meer.
Voordat u meer leert over query's, is het belangrijk dat u een goed begrip hebt van DAX basisprincipes. If u dat nog niet hebt gedaan, moet u DAX overzicht bekijken.
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 or 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, DATATABLE, and 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 or iedere DAX-formule, die een scalaire valueretourneert, werken samen met EVALUATE om de value te tonen als een resultaattabel als deze tussen accolades staat. EVALUATE bijvoorbeeld {[Totale verkoop]}orEVALUATE {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, and 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 EVALUATEstatementsbevatten.
EVALUATE syntaxis
EVALUATE <table>
Parameters voor EVALUATE
Term | Definitie |
---|---|
table |
Een tabelexpressie. |
EVALUATE voorbeeld
EVALUATE
'Sales Order'
Retourneert all rijen and kolommen uit de tabel Verkooporder, als een resultaatstabel. Dit kan worden beperkt met het gebruik van TOPNorFILTER, and gesorteerd met ORDER BY.
ORDER BY (optioneel)
Het optionele ORDER BY
trefwoord definieert een extra or kolom in de or expressies die worden gebruikt om de resultaten van de query 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 volgens kolomeigenschap in semantische modellen zijn not van toepassing op de DAX-queryresultaten. If een kolom moet aan de hand van een andere kolom in het model worden gesorteerd, zoals in het geval van Month Naam moet ook de kolom waarmee wordt gesorteerd 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 valueretourneert, or 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 andaverage winst per order door month, in oplopende volgorde door month, als een resultaattabel.
TOPN kiest not 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 de resultaten first 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 value waarop de queryresultaten beginnen.
START AT syntaxis
EVALUATE <table>
[ORDER BY {<expression> [{ASC | DESC}]}[, …]
[START AT {<value>|<parameter>} [, …]]]
parameters voor START AT
Term | Definitie |
---|---|
value |
Een constante value. 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 not meer. Het argument first in de START AT definieert het begin value in kolom 1 van de ORDER BY kolommen. Het argument second in de START AT definieert het begin value in kolom 2 van de ORDER BY kolommen in de rijen die voldoen aan de firstvalue 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 all kolommen uit de verkoopordertabel, in oplopende volgorde van verkooporders, beginnend bij verkooporder SO43661. Rijen voor deze verkooporder worden not opgenomen in de resultatentabel.
DEFINE (optioneel)
Het optionele trefwoord DEFINE
introduceert één or meer berekende entiteitsdefinities die alleen bestaan voor de duration van de query. In tegenstelling tot EVALUATE
kan er slechts één DEFINE
blok zijn met één or meer definities in een DAX query.
DEFINE
moet voorafgaan aan de firstEVALUATE
instructie and geldig zijn voor allEVALUATEstatements in de query. Definities kunnen variabelen, metingen, tabellen1zijn, and kolommen1. Definities kunnen verwijzen naar andere definities die vóór or na de huidige definitie worden weergegeven. Er is ten minste één definitie vereist if het trefwoord DEFINE
is opgenomen in een query.
DEFINE MEASURE
is een veelvoorkomend scenario voor het bouwen van nieuwe metingen or bestaande metingen bewerken in een semantisch model. Wanneer de measure al bestaat in het model, gebruikt de DAX-query de measureDAX formule die in de query is gedefinieerd. 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, waar u mogelijk not gemachtigd bent om een model toe te voegen measureor het not nodig is om het 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, TABLE1, or COLUMN1. |
name |
De naam van een measure-, var-tabel, or-kolomdefinitie. Het kan geen expressie zijn. De naam moet not uniek zijn. De naam bestaat alleen voor de duration van de query. |
expression |
Elke DAX-expressie die een tabel retourneert or scalaire value. De expressie kan een van de gedefinieerde entiteiten gebruiken.
If moet u een scalaire expressie omzetten in een tabelexpressie convert, pakt u de expressie in een tabelconstructor met accolades {} , or gebruikt u de functie ROW() om een tabel met één rij te retourneren. |
[1]Waarschuwing: querytabel and KOLOMdefinities zijn alleen bedoeld voor intern gebruik. Hoewel u define TABLE and COLUMN-expressies voor een query kunt errorzonder syntaxis error, kunnen deze runtimefouten opleveren and worden not aanbevolen.
DEFINE opmerkingen
Een DAX-query kan meerdere EVALUATEstatementsbevatten, maar slechts één DEFINE-instructie bevatten. Definities in de instructie DEFINE kunnen van toepassing zijn op elke EVALUATEstatements in de query.
Er is ten minste één definitie vereist in een DEFINE instructie.
Measure definities voor een query overschrijven modelmetingen van dezelfde naam, maar worden alleen in de query gebruikt. Ze zullen not invloed hebben op het model measure.
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. Een measure wordt ook gedefinieerd en and geëvalueerd om de rijen met niet-gekochte producten te count.
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 yearweer te geven. All metingen zijn ook aanwezig in het model, en and Orders per klant wordt gewijzigd in de DAX-query.
Parameters in DAX query's
Een goed gedefinieerde DAX query-instructie kan worden geparameteriseerd and vervolgens gebruikt over and met alleen wijzigingen in de parameter values.
De methode
Verwijs naar XMLA-parameters door de naam van de parameter vooraf te laten gaan met een @
teken. Elke plaats in de syntaxis waarin een value is toegestaan, kan de value worden vervangen door een parameteroproep.
All XMLA-parameters worden getypt als tekst.
Belangrijk
Parameters die in de parameterssectie andnot zijn gedefinieerd, gebruikt in het element <STATEMENT>
generate een error-antwoord in XMLA.
Parameters die zijn gebruikt andnot gedefinieerd in het <Parameters>
-element generate een error-antwoord in XMLA.