Sintassi DAX

Questo articolo descrive la sintassi e i requisiti del linguaggio di espressioni delle formule DAX.

Requisiti della sintassi

Una formula DAX inizia sempre con un segno di uguale (=). Dopo il segno di uguale, è possibile specificare qualsiasi espressione che restituisce un valore scalare o un'espressione che può essere convertita in un valore scalare. Di seguito sono elencate le quattro opzioni disponibili.

  • Una costante scalare o un'espressione che usa un operatore scalare (+,-,*,/,>=,...,&&, ...)

  • Riferimenti a colonne o tabelle. Come input per le funzioni, nel linguaggio DAX vengono sempre usate tabelle e colonne e mai matrici o set arbitrari di valori.

  • Operatori, costanti e valori forniti come parte di un'espressione.

  • Il risultato di una funzione e i relativi argomenti obbligatori. Alcune funzioni DAX restituiscono una tabella anziché un valore scalare ed è quindi necessario eseguirne wrapping in una funzione in grado di valutare la tabella e restituire un valore scalare. Fa eccezione il caso in cui la tabella ha una sola colonna e una sola riga e viene quindi trattata come un valore scalare.

    La maggior parte delle funzioni DAX richiede uno o più argomenti che possono includere tabelle, colonne, espressioni e valori. Tuttavia, alcune funzioni, ad esempio PI, non richiedono argomenti, ma richiedono sempre le parentesi per indicare l'argomento null. È ad esempio necessario digitare sempre PI() e non PI. È inoltre possibile annidare le funzioni all'interno di altre funzioni.

  • Espressioni. Un'espressione può contenere uno o più dei seguenti elementi: operatori, costanti o riferimenti a colonne.

Ad esempio, le formule riportate di seguito sono tutte valide.

Formula Result
= 3 3
= "Sales" Sales
= 'Sales'[Amount] Se si usa questa formula all'interno della tabella Sales, si otterrà il valore della colonna Amount nella tabella Sales per la riga corrente.
= (0.03 *[Amount])

= 0.03 *[Amount]
Il 3% del valore nella colonna Amount della tabella corrente.

Anche se questa formula può essere usata per calcolare una percentuale, il risultato non viene visualizzato come percentuale a meno che non si applichi la formattazione nella tabella.
= PI() Valore della costante pi.

Le formule possono comportarsi in modo diverso a seconda della modalità di utilizzo. È necessario tenere sempre presente il contesto e il modo in cui i dati usati nella formula sono correlati ad altri dati che potrebbero essere usati nel calcolo.

Requisiti per la denominazione

Un modello di dati contiene spesso più tabelle. Nel loro complesso, le tabelle e le relative colonne costituiscono un database archiviato nel motore di analisi in memoria (VertiPaq). All'interno di tale database, tutte le tabelle devono avere nomi univoci. Inoltre, le colonne devono avere nomi univoci all'interno di ogni tabella. Per tutti i nomi di oggetto non viene fatta distinzione tra maiuscole e minuscole. I nomi SALES e Sales, ad esempio, rappresentano la stessa tabella.

Ogni colonna e misura aggiunta a un modello di dati esistente deve appartenere a una tabella specifica. La tabella che contiene la colonna può essere specificata in modo implicito, quando si crea una colonna calcolata all'interno di una tabella, oppure in modo esplicito, quando si crea una misura e si specifica il nome della tabella in cui deve essere archiviata la relativa definizione.

Quando si usa una tabella o una colonna come input per una funzione, è in genere necessario specificare il nome completo della colonna. Il nome completo di una colonna è costituito dal nome della tabella, seguito da quello della colonna tra parentesi quadre: ad esempio, 'U.S. Sales'[Products]. L'uso di un nome completo è sempre obbligatorio quando si fa riferimento a una colonna nei contesti seguenti:

  • Come argomento per la funzione, VALUES

  • Come argomento per le funzioni, ALL o ALLEXCEPT

  • In un argomento di filtro per le funzioni, CALCULATE o CALCULATETABLE

  • Come argomento per la funzione, RELATEDTABLE

  • Come argomento per qualsiasi funzione di Business Intelligence per le gerarchie temporali

Il nome non completo corrisponde solo al nome della colonna, racchiuso tra parentesi quadre, ad esempio [Sales Amount]. Ad esempio, quando si fa riferimento a un valore scalare dalla stessa riga della tabella corrente, è possibile usare il nome di colonna non completo.

Se il nome di una tabella contiene spazi, parole chiave riservate o caratteri non consentiti, è necessario racchiuderlo tra virgolette singole. È inoltre necessario racchiudere i nomi di tabella tra virgolette se contengono caratteri al di fuori dell'intervallo di caratteri alfanumerici ANSI, indipendentemente dal fatto che il set di caratteri sia supportato dalle impostazioni locali. Ad esempio, se si apre una cartella di lavoro che contiene nomi di tabella scritti in caratteri cirillici, come 'Таблица', tali nomi devono essere racchiusi tra virgolette, anche se non contengono spazi.

Nota

Per immettere più facilmente i nomi completi di colonne, usare la funzionalità di completamento automatico nell'editor delle formule.

Tabelle

  • I nomi delle tabelle sono necessari ogni volta che la colonna proviene da una tabella diversa da quella corrente e devono essere univoci all'interno del database.

  • I nomi delle tabelle devono essere racchiusi tra virgolette singole se contengono spazi, altri caratteri speciali o caratteri alfanumerici non in lingua inglese.

Misure

  • I nomi delle misure devono essere sempre racchiusi tra parentesi quadre.

  • I nomi delle misure possono contenere spazi.

  • Ogni nome di misura deve essere univoco all'interno di un modello. Pertanto, quando si fa riferimento a una misura esistente, il nome della tabella davanti al nome della misura è facoltativo. Tuttavia, quando si crea una misura, è sempre necessario specificare il nome della tabella in cui verrà archiviata la definizione della misura.

Colonne

I nomi delle colonne devono essere univoci nel contesto di una tabella. Possono tuttavia essere presenti più tabelle che contengono colonne con gli stessi nomi. In tal caso, l'ambiguità viene risolta specificando il nome della tabella.

In generale, è possibile fare riferimento alle colonne senza fare riferimento alla tabella di base a cui appartengono, tranne nel caso in cui si verifichi un conflitto di nome da risolvere o vengano usate funzioni che richiedono nomi di colonna completi.

Parole chiave riservate

Se il nome usato per una tabella corrisponde a una parola chiave riservata di Analysis Services, viene restituito un errore ed è necessario rinominare la tabella. È tuttavia possibile usare parole chiave nei nomi di oggetto se il nome dell'oggetto è racchiuso tra parentesi quadre (per le colonne) o tra virgolette (per le tabelle).

Nota

Le virgolette possono essere rappresentate da caratteri diversi, a seconda dell'applicazione. Se si incollano formule da un documento esterno o da una pagina Web, controllare il codice ASCII del carattere usato per le virgolette di apertura e chiusura per assicurarsi che siano uguali, altrimenti DAX potrebbe non essere in grado di riconoscere i simboli come virgolette e il riferimento non risulterebbe valido.

Caratteri speciali

I caratteri e tipi di carattere seguenti non sono validi per i nomi di tabelle, colonne o misure:

  • Spazi iniziali o finali, a meno che gli spazi non siano racchiusi tra delimitatori di nome, parentesi quadre o apostrofi singoli.

  • Caratteri di controllo

  • I caratteri seguenti non sono validi per i nomi degli oggetti:

    .,;':/\*|?&%$!+=()[]{}<>

Esempi di nomi di oggetto

Nella tabella seguente sono riportati alcuni esempi di nomi di oggetto:

Tipi di oggetto Esempi Commento
Nome tabella Sales Se il nome della tabella non contiene spazi o altri caratteri speciali, non è necessario racchiuderlo tra virgolette.
Nome tabella 'Canada Sales' Se il nome contiene spazi, tabulazioni o altri caratteri speciali, racchiuderlo tra virgolette singole.
Nome di colonna completo Sales[Amount] Il nome della tabella precede quello della colonna e quest'ultimo è racchiuso tra parentesi quadre.
Nome di misura completo Sales[Profit] Il nome della tabella precede quello della misura e quest'ultimo è racchiuso tra parentesi quadre. In determinati contesti, un nome completo è sempre obbligatorio.
Nome di colonna non completo [Amount] Il nome non completo corrisponde al semplice nome della colonna, tra parentesi quadre. Tra i contesti in cui è possibile usare il nome non completo sono incluse le formule in una colonna calcolata all'interno della stessa tabella o una funzione di aggregazione che esegue l'analisi della stessa tabella.
Nome di colonna completo in tabella con spazi 'Canada Sales'[Qty] Il nome della tabella contiene spazi e pertanto deve essere racchiuso tra virgolette singole.

Altre limitazioni

La sintassi richiesta per ogni funzione e il tipo di operazione che può eseguire variano notevolmente a seconda della funzione. In generale, tuttavia, le regole seguenti si applicano a tutte le formule ed espressioni:

  • Le formule e le espressioni DAX non possono modificare né inserire singoli valori nelle tabelle.

  • Non è possibile creare righe calcolate tramite DAX. È possibile creare solo colonne calcolate e misure.

  • Quando si definiscono le colonne calcolate, è possibile annidare le funzioni a qualsiasi livello.

  • In DAX sono disponibili diverse funzioni che restituiscono una tabella. In genere, i valori restituiti da queste funzioni vengono usati come input per altre funzioni, che richiedono una tabella come input.

Operatori e costanti DAX

Nella tabella seguente sono elencati gli operatori supportati da DAX. Per altre informazioni sulla sintassi dei singoli operatori, vedere Operatori DAX.

Tipo di operatore Simbolo e uso
Operatore di parentesi () ordine di precedenza e raggruppamento di argomenti
Operatori aritmetici + (addizione)

- (sottrazione/

segno)

* (moltiplicazione)

/ (divisione)

^ (elevamento a potenza)
Operatori di confronto = (uguale a)

> (maggiore di)

< (minore di)

>= (maggiore o uguale a)

<= (minore o uguale a)

<> (diverso da)
Operatore di concatenazione del testo & (concatenazione)
Operatori logici && (and)

|| (or)

Tipi di dati

Non è necessario sottoporre a cast, convertire o specificare in altro modo il tipo di dati di una colonna o di un valore usato in una formula DAX. Quando si usano dati in una formula DAX, DAX identifica automaticamente i tipi di dati nelle colonne a cui si fa riferimento e i valori digitati ed esegue conversioni implicite, quando necessario, per completare l'operazione specificata.

Se, ad esempio, si prova ad aggiungere un numero a un valore di data, il motore interpreterà l'operazione nel contesto della funzione e convertirà i numeri in un tipo di dati comune, quindi presenterà il risultato nel formato previsto, ovvero una data.

Esistono alcune limitazioni relative ai valori che possono essere convertiti correttamente. Se il tipo di dati di un valore o di una colonna è incompatibile con l'operazione corrente, DAX restituisce un errore. Inoltre, in DAX non sono disponibili funzioni che consentono di modificare, convertire o sottoporre a cast in modo esplicito il tipo di dati dei dati esistenti importati in un modello.

Importante

DAX non supporta l'uso del tipo di dati Variant. Pertanto, quando si caricano o si importano dati in un modello, si presuppone che i dati di ogni colonna siano in genere di un tipo coerente.

Alcune funzioni restituiscono valori scalari, incluse stringhe, mentre altre funzioni utilizzano numeri, sia interi che reali, oppure date e ore. Il tipo di dati richiesto per ogni funzione è descritto nella sezione Funzioni DAX.

Come argomento di una funzione è possibile usare tabelle contenenti più colonne e righe di dati. Alcune funzioni restituiscono anche tabelle, che vengono archiviate in memoria e possono essere usate come argomenti per altre funzioni.

Data e ora

DAX archivia i valori di data e ora usando il tipo di dati datetime usato da Microsoft SQL Server. Il formato Datetime usa un numero a virgola mobile in cui i valori di data corrispondono alla parte intera che rappresenta il numero di giorni dal 30 dicembre 1899. I valori di ora corrispondono alla parte decimale di un valore di data in cui ore, minuti e secondi sono rappresentati da frazioni decimali di un giorno. Le funzioni di data e ora DAX convertono in modo implicito gli argomenti in un tipo di dati datetime.

Nota

Il valore DateTime massimo esatto supportato da DAX è il 31 dicembre 9999 00:00:00.

Valore letterale data e ora

A partire dalla versione di agosto 2021 di Power BI Desktop, i valori di data e datetime DAX possono essere specificati come valore letterale nel formato dt"YYYY-MM-DD", dt"YYYY-MM-DDThh:mm:ss"o dt"YYYY-MM-DD hh:mm:ss". Se specificato come valore letterale, non è necessario usare le funzioni DATE, TIME, DATEVALUE, TIMEVALUE nell'espressione.

Ad esempio, l'espressione seguente usa funzioni DATE e TIME per filtrare in OrderDate:

EVALUATE
FILTER (
        FactInternetSales,
        [OrderDate] > (DATE(2015,1,9) + TIME(2,30,0)) &&[OrderDate] < (DATE(2015,12,31) + TIME(11,59,59))
)

La stessa espressione di filtro può essere specificata come valore letterale:

EVALUATE
FILTER (
        FactInternetSales,
        [OrderDate] > dt"2015-1-9T02:30:00" && [OrderDate] < dt"2015-12-31T11:59:59"
)

Nota

Il formato letterale data e datetime tipizzato DAX non è supportato in tutte le versioni di Power BI Desktop, Analysis Services e Power Pivot in Excel. Le funzionalità DAX nuove e aggiornate vengono in genere introdotte in Power BI Desktop e successivamente incluse in Analysis Services e Power Pivot in Excel.