DAX query
I client di report come Power BI and Excel eseguono query DAX ogni volta che le visualizzazioni vengono mostrate in un report, or un campo viene aggiunto a una tabella, and queste query DAX si adattano quando viene applicato un filter. L'analizzatore delle prestazioni in Power BI Desktop consente di visualizzare queste query DAXandeven e di eseguirle nella vista query DAX.
Usando DAX visualizzazione query in Power BI Desktop orwrite DAX query nel servizio Power BI, è possibile creare and eseguire query DAX personalizzate. Con Microsoft Fabric, è possibile aumentare ulteriormente la produttività con Copilot per scrivere query DAX nella visualizzazione query di or Web Desktop DAX. Oltre agli strumenti di business intelligence Power, è possibile eseguire query DAX nei notebook di Fabric usando collegamento semantico per leggere i dati da modelli semantici con Python, and con l'API REST Execute Queries, disponibile anche in Power Automate. Altri strumenti, ad esempio SQL Server Management Studio (SSMS), Power Generatore report di BI, and strumenti open source come DAX Studio, consentono anche di creare and eseguire query DAX.
DAX query restituiscono risultati come tabella right all'interno dello strumento, consentendo di creare rapidamente and testare le prestazioni delle formule DAX nelle misure or visualizzare semplicemente i dati nel modello semantico. INFO and INFO.VIEW DAX Le funzioni possono anche ottenere informazioni sul tuo modello semantico, come un elenco di tabelle, colonne, misure, and e molto altro.
Prima di apprendere le query, è importante avere una conoscenza approfondita delle basi di DAX. If se non l'hai già fatto, assicurati di controllare la panoramicaDAX.
Parole chiave
DAX query hanno una sintassi semplice costituita da una sola parola chiave obbligatoria, EVALUATE. EVALUATE è seguito da un'espressione di tabella, ad esempio una funzione DAXor nome di tabella, che quando si esegue restituisce una tabella dei risultati. Le espressioni di tabella che generano una tabella dei risultati includono:
- Funzioni comuni di DAX che generano un output di una tabella, ad esempio SUMMARIZE, SUMMARIZECOLUMNS, SELECTCOLUMNS, FILTER, UNION, TOPN, ADDCOLUMNS, DATATABLE, and e molti altri, usano EVALUATE per generare una tabella dei risultati.
- Le tabelle nel modello quando si fa riferimento in base al nome funzionano con EVALUATE per restituire una tabella dei risultati che mostra i dati nella tabella. Ad esempio, EVALUATE 'Nome tabella' può essere eseguita come query di DAX.
- Le misure nel modello or, qualsiasi formula di DAX che restituisca uno scalare value, funzionano con EVALUATE per mostrare il value come tabella dei risultati quando sono racchiuse tra parentesi graffe. Ad esempio, EVALUATE {[Total Sales]}orEVALUATE {COUNTROWS('Sales')} può essere eseguita come una query DAX. Questi vengono chiamati costruttori di tabelle .
Esistono diverse parole chiave facoltative specifiche per le query di DAX: ORDER BY, START AT, DEFINE, MEASURE, VAR, TABLE, and COLUMN.
EVALUATE (obbligatorio)
Al livello più semplice, una query DAX è un'istruzione EVALUATE
contenente un'espressione di tabella. È richiesta almeno un'istruzione EVALUATE; tuttavia, una query può contenere un numero qualsiasi di EVALUATEstatements.
sintassi EVALUATE
EVALUATE <table>
EVALUATE Parametri
Termine | Definizione |
---|---|
table |
Espressione di tabella. |
Esempio di EVALUATE
EVALUATE
'Sales Order'
Restituisce all righe and colonne dalla tabella Ordine di Vendita, come una tabella di risultati. Ciò può essere limitato con l'uso di TOPNorFILTER, and ordinato con ORDER BY.
ORDER BY (facoltativo)
La parola chiave facoltativa ORDER BY
definisce una colonna or in più nelle espressioni della query or usate per ordinare i risultati della query. Qualsiasi espressione valutabile per ogni riga del risultato è valida. Anche qualsiasi colonna nella query stessa è valida.
L'ordinamento per proprietà di colonna nei modelli semantici not si applica ai risultati delle query DAX. If una colonna deve essere ordinata in base a una colonna diversa nel modello, ad esempio nel caso di Month Name, l'ordinamento per colonna deve essere incluso anche nella query di DAX da usare nel ORDER BY.
sintassi ORDER BY
EVALUATE <table>
[ORDER BY {<expression> [{ASC | DESC}]}[, …]]
ORDER BY Parametri
Termine | Definizione |
---|---|
expression |
Qualsiasi espressione DAX che restituisce una singola colonna scalare value, or inclusa nella query DAX. |
ASC |
(predefinito) Ordinamento crescente. |
DESC |
Ordinamento decrescente. |
Esempio di ORDER BY
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
Restituisce gli ordini di abbigliamento andaverage come profitto per ordine indicato da month, in ordine crescente secondo month, come una tabella dei risultati.
TOPN not scegliere il numero specificato di righe da restituire in base all'ordinamento specificato in ORDER BY. Al contrario, TOPN ha la propria sintassi per specificare facoltativamente un ordinamento prima che vengano restituite le prime 100 righe. ORDER BY ordina solo la tabella dei risultati restituita da 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
Restituisce i primi 100 ordini di vendita ordinati in base all'ordine crescente di SalesOrderLienKey, quindi ordina i risultati first in base all'ordine di vendita, quindi in base alla riga dell'ordine di vendita.
START AT (facoltativo)
La parola chiave START AT
facoltativa viene usata all'interno di una clausola ORDER BY
. Definisce il punto di partenza value, a partire dal quale iniziano i risultati della query.
sintassi START AT
EVALUATE <table>
[ORDER BY {<expression> [{ASC | DESC}]}[, …]
[START AT {<value>|<parameter>} [, …]]]
START AT parametri
Termine | Definizione |
---|---|
value |
Costante value. Non può essere un'espressione. |
parameter |
Nome di un parametro in un'istruzione XMLA preceduto da un carattere @ . |
START AT osservazioni
START AT argomenti hanno una corrispondenza uno-a-uno con le colonne nella clausola ORDER BY. Nella clausola START AT possono essere presenti tanti argomenti quanti nella clausola ORDER BY, più not. L'argomento first nella START AT definisce il value iniziale nella colonna 1 delle colonne ORDER BY. L'argomento second nell'START AT definisce il value iniziale nella colonna 2 tra le colonne ORDER BY all'interno delle righe che soddisfano i criteri firstvalue per la colonna 1.
Esempio di START AT
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"
Restituisce all colonne della tabella Sales Order, in ordine crescente in base a Sales Order, a partire da SO43661. Le righe precedenti a questo ordine di vendita vengono incluse nella tabella dei risultati not.
DEFINE (facoltativo)
La parola chiave facoltativa DEFINE
introduce una or più definizioni di entità calcolate esistenti solo per il duration della query. A differenza di EVALUATE
, può essere presente un solo blocco DEFINE
con più definizioni or in una query DAX.
DEFINE
deve precedere l'istruzione firstEVALUATE
and sono valide per allEVALUATEstatements nella query. Le definizioni possono essere variabili, misure, tabelle1, and colonne1. Le definizioni possono fare riferimento ad altre definizioni visualizzate prima di or dopo la definizione corrente. È necessaria almeno una definizione if la parola chiave DEFINE
è inclusa in una query.
DEFINE MEASURE
è uno scenario comune per creare nuove misure or modificare le misure esistenti in un modello semantico. Quando il measure esiste già nel modello, la query DAX userà la formula measureDAX definita nella query. Ciò è utile per testare le misure con una query DAX prima di aggiornare il modello.
DEFINE MEASURE
è utile anche creare analisi aggiuntive con formule di DAX per una query DAX specifica in cui è possibile not avere l'autorizzazione per aggiungere un modello measureor è not necessario averlo nel modello.
sintassi DEFINE
[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>) +
DEFINE parametri
Termine | Definizione |
---|---|
Entity |
MEASURE, VAR, TABLE1, or COLUMN1. |
name |
Nome di una definizione di colonna measure, var, tabella or. Non può essere un'espressione. Il nome not deve essere univoco. Il nome esiste solo per il duration della query. |
expression |
Qualsiasi espressione DAX che restituisce una tabella or scalare value. L'espressione può usare una qualsiasi delle entità definite.
If è necessario convert un'espressione scalare in un'espressione di tabella, racchiudere l'espressione all'interno di un costruttore di tabella con parentesi graffe {} , or usare la funzione ROW() per restituire una tabella singola di una riga. |
[1]Attenzione: le definizioni di COLONNA della TABELLA con ambito di query and sono destinate solo all'uso interno. Sebbene sia possibile define TABLE and espressioni COLUMN per una query senza sintassi error, possono generare errori di runtime and sono not consigliati.
DEFINE osservazioni
Una query DAX può avere più EVALUATEstatements, ma può avere una sola istruzione DEFINE. Le definizioni nell'istruzione DEFINE possono essere applicate a qualsiasi EVALUATEstatements nella query.
Almeno una definizione è richiesta in un'istruzione DEFINE.
Measure definizioni per un modello di override della query con lo stesso nome, ma vengono usate solo all'interno della query. not influiscono sul modello measure.
VAR nomi hanno restrizioni univoci. Per altre informazioni, vedere VAR - Parametri.
Esempio di DEFINE
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]}
Restituisce la tabella definita nella query DAX per mostrare i prodotti non acquistati con un'ulteriore colonna definita che fa riferimento a variabili definite. Viene inoltre definita una measureand valutata per count le righe di prodotti non battuti.
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]
)
Visualizza i risultati restituendo una tabella che valuta tre misure prestabilite in base all'anno fiscale year. Esistono anche nel modello le misure All, and Ordini per Cliente viene modificato nella query DAX.
Parametri nelle query di DAX
Un'istruzione di query DAX ben definita può essere parametrizzata and e quindi utilizzata su and apportando solo modifiche al parametro values.
Il metodo
Fare riferimento ai parametri XMLA aggiungendo un carattere @
come prefisso del nome del parametro. Qualsiasi posizione nella sintassi in cui è consentita una value, il value può essere sostituito con una chiamata di parametro.
All parametri XMLA vengono tipizzati come testo.
Importante
I parametri definiti nella sezione dei parametri andnot sono utilizzati nell'elemento <STATEMENT>
generate in una risposta error in XMLA.
I parametri usati andnot definiti nell'elemento <Parameters>
generate una risposta error in XMLA.