Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
I client di report come Power BI ed Excel eseguono query DAX ogni volta che gli oggetti visivi vengono visualizzati in un report o un campo aggiunto a una tabella e queste query DAX regolano quando viene applicato un filtro. L'analizzatore delle prestazioni di Power BI Desktop può mostrarti queste query DAX e persino eseguirle nella visualizzazione delle query DAX di Power BI Desktop.
Usando DAX visualizzazione query in Power BI Desktop o Scrivi query DAX nel servizio Power BI, è possibile creare ed eseguire query DAX personalizzate. Con Microsoft Fabricè possibile aumentare ulteriormente la produttività con Copilot per scrivere le query DAX nella visualizzazione delle query DAX Desktop o Web. Oltre agli strumenti di Power BI, è possibile eseguire query DAX nei notebook Fabric utilizzando il collegamento semantico per leggere i dati dai modelli semantici con Python e con l'API REST Esegui Query, disponibile anche in Power Automate. Altri strumenti, ad esempio SQL Server Management Studio (SSMS), Generatore report di Power BIe strumenti open source come DAX Studio, consentono anche di creare ed eseguire query DAX.
DAX query restituiscono risultati come tabella direttamente all'interno dello strumento, consentendo di creare e testare rapidamente le prestazioni delle formule DAX in misure o semplicemente visualizzare i dati nel modello semantico. INFO e INFO. Le funzioni VIEW DAX possono anche ottenere informazioni sul modello semantico, ad esempio un elenco di tabelle, colonne, misure e molto altro ancora.
Prima di apprendere le query, è importante avere una conoscenza approfondita delle basi di DAX. Se non l'hai già fatto, assicurati di consultare la panoramica di DAX.
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 DAX o un 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 sotto forma di tabella, come SUMMARIZE, SUMMARIZECOLUMNS, SELECTCOLUMNS, FILTER, UNION, TOPN, ADDCOLUMNS, DATATABLEe molte altre, lavorano con EVALUATE per generare una tabella dei risultati.
- Le tabelle nel modello, quando vengono riferite per nome, funzionano con EVALUATE per produrre una tabella dei risultati che mostra i dati nella tabella. Ad esempio, EVALUATE 'Nome tabella' può essere eseguito come una query DAX.
- Le misure nel modello o in qualsiasi formula DAX, che restituiscono un valore scalare, lavorano con EVALUATE per mostrare il valore come una tabella di risultati quando sono racchiuse tra parentesi graffe. Ad esempio, EVALUATE {[Total Sales]} o EVALUATE {COUNTROWS('Sales')} può essere eseguita come una query DAX. Questi vengono chiamati costruttori di tabelle .
Esistono diverse parole chiave facoltative specifiche per le query DAX: ORDER BY, START AT, DEFINE, MEASURE, VAR, TABLE e COLUMN.
EVALUATE (obbligatorio)
Al livello più semplice, una query DAX è un'istruzione EVALUATE
contenente un'espressione di tabella. È necessaria almeno un'istruzione EVALUATE, tuttavia, una query può contenere un numero qualsiasi di istruzioni EVALUATE.
sintassi EVALUATE
EVALUATE <table>
EVALUATE Parametri
Termine | Definizione |
---|---|
table |
Un'espressione di tabella. |
EVALUATE Esempio
EVALUATE
'Sales Order'
Restituisce tutte le righe e le colonne della tabella Sales Order, come tabella dei risultati. Ciò può essere limitato con l'uso di TOPN o FILTERe ordinato con ORDER BY.
ORDER BY (facoltativo)
La parola chiave facoltativa ORDER BY
definisce una o più colonne nella query o nelle espressioni 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 non si applica ai risultati delle query DAX. Se 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 DAX da usare nella ORDER BY.
sintassi ORDER BY
EVALUATE <table>
[ORDER BY {<expression> [{ASC | DESC}]}[, …]]
ORDER BY Parametri
Termine | Definizione |
---|---|
expression |
Qualsiasi espressione DAX che restituisce un singolo valore scalare o colonna inclusa nella query DAX. |
ASC |
(predefinito) Ordinamento crescente. |
DESC |
Ordinamento decrescente. |
ORDER BY Esempio
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 e il profitto medio per ordine per mese, in ordine crescente per mese, come tabella dei risultati.
TOPN non sceglie 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 a SalesOrderLienKey in ordine crescente, quindi ordina i risultati prima in base all'ordine di vendita, poi in base alla linea dell'ordine di vendita.
START AT (facoltativo)
La parola chiave START AT
facoltativa viene usata all'interno di una clausola ORDER BY
. Definisce il valore in corrispondenza del 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 |
Valore costante. Non può essere un'espressione. |
parameter |
Nome di un parametro in un'istruzione XMLA preceduto da un carattere @ . |
START AT osservazioni
Gli START AT argomenti hanno una corrispondenza uno-a-uno con le colonne nella clausola ORDER BY. Nella clausola START AT possono essere presenti tutti gli argomenti presenti nella clausola ORDER BY, ma non di più. Il primo argomento nella START AT definisce il valore iniziale nella colonna 1 delle colonne ORDER BY. Il secondo argomento nella START AT definisce il valore iniziale nella colonna 2 delle colonne ORDER BY all'interno delle righe che soddisfano il primo valore per la colonna 1.
START AT Esempio
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 tutte le colonne della tabella Sales Order, in ordine crescente in base all'ordine di vendita, a partire da SO43661. Le righe prima di questo ordine di vendita non sono incluse nella tabella dei risultati.
DEFINE (facoltativo)
La parola chiave facoltativa DEFINE
introduce una o più definizioni di entità calcolate esistenti solo per la durata della query. A differenza di EVALUATE
, può essere presente un solo blocco DEFINE
con una o più definizioni in una query DAX.
DEFINE
deve precedere la prima istruzione EVALUATE
e essere valida per tutte le istruzioni EVALUATE nella query. Le definizioni possono essere variabili, misure, tabelle1 e colonne1. Le definizioni possono fare riferimento ad altre definizioni visualizzate prima o dopo la definizione corrente. Almeno una definizione è necessaria se la parola chiave DEFINE
è inclusa in una query.
DEFINE MEASURE
è uno scenario comune per creare nuove misure o modificare le misure esistenti in un modello semantico. Quando la misura esiste già nel modello, la query DAX userà la formula della misura DAX definita nella query. Ciò è utile per testare le misure con una query DAX prima di aggiornare il modello.
DEFINE MEASURE
è utile anche per creare analisi aggiuntive con formule DAX per una specifica query DAX in cui non si dispone dell'autorizzazione per aggiungere una misura del modello oppure non è necessario averla 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, TABLE1o COLUMN1. |
name |
Nome di una definizione di misura, var, tabella o colonna. Non può essere un'espressione. Il nome non deve essere univoco. Il nome esiste solo per la durata dell'interrogazione. |
expression |
Qualsiasi espressione DAX che restituisce una tabella o un valore scalare. L'espressione può usare una qualsiasi delle entità definite. Se è necessario convertire un'espressione scalare in un'espressione di tabella, eseguire il wrapping dell'espressione all'interno di un costruttore di tabella con parentesi graffe {} oppure usare la funzione ROW() per restituire una singola tabella di righe. |
[1]Attenzione: definizioni TABLE e COLUMN con ambito query sono destinate solo all'uso interno. Sebbene sia possibile definire espressioni TABLE e COLUMN per una query senza errori di sintassi, possono generare errori di runtime e non sono consigliati.
DEFINE osservazioni
Una query DAX può avere più istruzioni EVALUATE, ma può avere una sola istruzione DEFINE. Le definizioni nell'istruzione DEFINE possono essere applicate a qualsiasi istruzione EVALUATE nella query.
Almeno una definizione è richiesta in un'istruzione DEFINE.
Le definizioni di misura per una query sostituiscono le misure del modello con lo stesso nome, ma vengono utilizzate solo all'interno della query. Non influiranno sulla misura del modello.
VAR nomi hanno restrizioni univoci. Per altre informazioni, vedere VAR - Parametri.
DEFINE Esempio
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 e valutata una misura per contare le righe di prodotti non acquistati.
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]
)
Restituisce una tabella che valuta tre misure definite per visualizzare i risultati per anno fiscale. Tutte le misure esistono anche nel modello e gli ordini per cliente vengono modificati nella query DAX.
Parametri nelle query di DAX
Un'istruzione di query DAX ben definita può essere parametrizzata e quindi usata più volte con sole modifiche nei valori dei parametri.
Il metodo Execute (XMLA) dispone di un elemento Parameters (XMLA) di tipo raccolta che consente la definizione e l'assegnazione di un valore per i parametri. All'interno della raccolta ogni elemento Parameter (XMLA) definisce il nome e un valore per il parametro.
Fare riferimento ai parametri XMLA aggiungendo un carattere @
come prefisso del nome del parametro. In qualsiasi posizione nella sintassi in cui è consentito un valore, il valore può essere sostituito con una chiamata al parametro. Tutti i parametri XMLA sono tipizzati come testo.
Importante
I parametri definiti nella sezione parametri e non usati nell'elemento <STATEMENT>
generano una risposta di errore in XMLA.
I parametri usati e non definiti nell'elemento <Parameters>
generano una risposta di errore in XMLA.