Query DAX

I client di creazione di report come Power BI ed Excel eseguono query DAX ogni volta che un campo viene inserito in un report o quando viene applicato un filtro. Usando SQL Server Management Studio (SSMS), Generatore report di Power BI e strumenti open source come DAX Studio, è possibile creare ed eseguire query DAX personalizzate. Le query DAX restituiscono risultati come tabella direttamente all'interno dello strumento, consentendo di creare e testare rapidamente le prestazioni delle formule DAX.

Prima di acquisire familiarità con le query, è importante avere una conoscenza approfondita delle nozioni di base di DAX. Se non è già stato fatto, vedere Panoramica di DAX.

Parole chiave

Le query DAX hanno una sintassi semplice costituita da una sola parola chiave obbligatoria, EVALUATE e diverse parole chiave facoltative: ORDER BY, START AT, DEFINE, MEASURE, VAR, TABLE e COLUMN. Ogni parola chiave definisce un'istruzione usata per la durata della query.

EVALUATE (obbligatoria)

Al livello più elementare, una query DAX è un'istruzione EVALUATE che contiene un'espressione di tabella. È necessaria almeno un'istruzione EVALUATE, tuttavia, una query può contenere un numero qualsiasi di istruzioni EVALUATE.

Sintassi EVALUATE

EVALUATE <table>  

Parametri EVALUATE

Termine Definizione
table Espressione di tabella.

Esempio EVALUATE

EVALUATE
    'Internet Sales'

Restituire tutte le righe e le colonne dalla tabella Internet Sales, sotto forma di tabella.

Istruzione DAX Evaluate

ORDER BY (facoltativa)

La parola chiave ORDER BY facoltativa definisce una o più espressioni usate per ordinare i risultati della query. Qualsiasi espressione valutabile per ogni riga del risultato è valida.

Sintassi ORDER BY

EVALUATE <table>  
[ORDER BY {<expression> [{ASC | DESC}]}[, …]]  

Parametri ORDER BY

Termine Definizione
expression Qualsiasi espressione DAX che restituisce un singolo valore scalare.
ASC (predefinito) Ordinamento crescente.
DESC Ordinamento decrescente.

Esempio ORDER BY

EVALUATE
    'Internet Sales'
    
ORDER BY
    'Internet Sales'[Order Date]

Restituisce tutte le righe e le colonne della tabella Internet Sales, in ordine crescente in base alla data ordine, come tabella.

Istruzione DAX Evaluate order by

START AT (facoltativa)

La parola facoltativa START AT viene usata all'interno della 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>} [, …]]]

Parametri START AT

Termine Definizione
value Valore costante di . Non può essere un'espressione.
parameter Nome di un parametro in un'istruzione XMLA preceduto da un carattere @.

Osservazioni START AT

Gli argomenti START AT presentano una corrispondenza uno-a-uno con le colonne nella clausola ORDER BY. Nella clausola START AT può essere presente lo stesso numero di argomenti della clausola ORDER BY, ma non di più. Il primo argomento in START AT definisce il valore iniziale nella colonna 1 delle colonne ORDER BY. Il secondo argomento in 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.

Esempio START AT

EVALUATE
    'Internet Sales'
    
ORDER BY
    'Internet Sales'[Sales Order Number]
START AT "SO7000"

Restituisce tutte le righe e le colonne della tabella Internet Sales, in ordine crescente in base al numero ordine di vendita, a partire da SO7000.

DAX Evaluate order by Sales order number statement

DEFINE (facoltativa)

La parola chiave DEFINE facoltativa introduce una o più definizioni di entità calcolate esistenti solo per la durata della query. Le definizioni precedono l'istruzione EVALUATE e sono valide 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.

Sintassi DEFINE

[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>) +

Parametri DEFINE

Termine Definizione
Entity MISURA, VAR, TABELLA1 o COLONNA1.
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 della query.
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: le 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 consigliate.

Osservazioni DEFINE

  • 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.

  • In un'istruzione DEFINE è necessaria almeno una definizione.

  • Le definizioni di misura per un modello di override della query hanno lo stesso nome, ma vengono usate solo all'interno della query. Non influiranno sulla misura del modello.

  • I nomi VAR hanno restrizioni univoche. Per altre informazioni, vedere VAR - Parametri.

Esempio DEFINE

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]

Restituire le vendite totali calcolate per gli anni 2013 e 2014 e le vendite totali calcolate combinate per gli anni 2013 e 2014, sotto forma di tabella. La misura nell'istruzione DEFINE, Internet Total Sales, viene usata in entrambe le espressioni Total Sales e Combined Years Total Sales.

DAX Evaluate with measure defnition

Parametri nelle query DAX

Un'istruzione di query DAX definita in modo corretto può essere parametrizzata e quindi usata più volte modificando solo i 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 dei 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.

Istruzioni DAX
SUMMARIZECOLUMNS
TREATAS
FILTER