Operatori DAX

Nel linguaggio DAX (Data Analysis Expressions) vengono usati gli operatori per creare espressioni che confrontano valori, eseguono calcoli aritmetici o utilizzano stringhe.

Tipi di operatori

Sono disponibili quattro tipi diversi di operatori di calcolo: aritmetico, di confronto, di concatenazione di testo e logico.

Operatori aritmetici

Per eseguire operazioni matematiche di base, ad esempio l'addizione, la sottrazione o la moltiplicazione, per combinare numeri e per produrre risultati numerici, usare gli operatori aritmetici seguenti.

Operatore aritmetico Significato Esempio
+ (segno di addizione) Addizione 3+3
– (segno di sottrazione) Sottrazione o segno 3–1–1
* (asterisco) Moltiplicazione 3*3
/ (barra) Divisione 3/3
^ (accento circonflesso) Elevamento a potenza 16^4

Nota

Il segno più può essere usato sia come operatore binario sia come operatore unario. Un operatore binario richiede numeri su entrambi i lati ed esegue un'addizione. Quando si usano valori in una formula DAX su entrambi i lati dell'operatore binario, DAX tenta di eseguire il cast dei valori in tipi di dati numerici, se questi non sono già numeri. Al contrario, l'operatore unario può essere applicato a qualsiasi tipo di argomento. Il simbolo più non influisce sul tipo o sul valore e viene semplicemente ignorato, mentre l'operatore di sottrazione crea un valore negativo, se applicato a un valore numerico.

Operatori di confronto

È possibile confrontare due valori con gli operatori seguenti. Quando vengono messi a confronto due valori tramite questi operatori, il risultato corrisponde a un valore logico, ovvero TRUE o FALSE.

Operatore di confronto Significato Esempio
= Uguale a [Region] = "USA"
== Strettamente uguale a [Region] == "USA"
> Maggiore di [Sales Date] > "Jan 2009"
< Minore di [Sales Date] < "Jan 1 2009"
>= Maggiore di o uguale a [Amount] >= 20000
<= Minore di o uguale a [Amount] <= 100
<> Diverso da [Region] <> "USA"

Tutti gli operatori di confronto tranne == trattano BLANK come valore 0, stringa vuota "", DATE(1899, 12, 30) o FALSE. Di conseguenza, [Column] = 0 è true quando il valore di [Column] è 0 o BLANK. Al contrario, [Column] == 0 è true solo quando il valore di [Column] è 0.

Operatore di concatenazione del testo

Utilizzare la e commerciale (&) per unire o concatenare due o più stringhe di testo per produrre una singola parte di testo.

Operatore di testo Significato Esempio
& (e commerciale) Connette, o concatena, due valori per generare un valore di testo continuo [Region] & ", " & [City]

Operatori logici

Usare operatori logici (&&) e (||) per combinare espressioni per produrre un singolo risultato.

Operatore di testo Significato Esempi
&& (doppia e commerciale) Crea una condizione AND tra due espressioni, ciascuna con un risultato booleano. Se entrambe le espressioni restituiscono TRUE, anche la combinazione delle espressioni restituisce TRUE; in caso contrario, la combinazione restituisce FALSE. ([Region] = "France") && ([BikeBuyer] = "yes"))
|| (simbolo della doppia barra verticale) Crea una condizione OR tra due espressioni logiche. Se una delle due espressioni restituisce TRUE, il risultato è TRUE. Il risultato è FALSE solo quando sono FALSE entrambe le espressioni. (([Region] = "France") || ([BikeBuyer] = "yes"))
IN Crea una condizione OR logica tra ogni riga confrontata rispetto a una tabella. Nota: per la sintassi del costruttore della tabella vengono usate le parentesi graffe. 'Product'[Color] IN { "Red", "Blue", "Black" }

Operatori e ordine di precedenza

In alcuni casi, l'ordine in cui viene eseguito il calcolo può influire sul valore restituito. È quindi importante comprendere come viene determinato l'ordine e come è possibile modificare l'ordine per ottenere i risultati desiderati.

Ordine di calcolo

Un'espressione valuta gli operatori e i valori in un ordine specifico. Tutte le espressioni iniziano sempre con un segno di uguale (=). Il segno di uguale indica che i caratteri che seguono costituiscono un'espressione.

Dopo il segno di uguale sono riportati gli elementi da calcolare (gli operandi), che sono separati da operatori di calcolo. Le espressioni vengono lette sempre da sinistra a destra, ma l'ordine in cui gli elementi sono raggruppati può essere controllato in una certa misura usando le parentesi.

Precedenza tra gli operatori

Se si combinano più operatori in una stessa formula, le operazioni vengono ordinate in base alla tabella seguente. Se gli operatori hanno la stessa precedenza, vengono ordinati da sinistra verso destra. Se, ad esempio, un'espressione contiene sia un operatore di moltiplicazione che un operatore di divisione, questi vengono valutati nell'ordine in cui compaiono nell'espressione, da sinistra a destra.

Operatore Descrizione
^ Elevamento a potenza
Segno (come in –1)
* e / Moltiplicazione e divisione
+ e – Addizione e sottrazione
& Connette due stringhe di testo (concatenazione)
=,==,<,>,<=,>=,<>,IN Confronto
NOT NOT (operatore unario)

Uso delle parentesi per controllare l'ordine di calcolo

Per modificare l'ordine di valutazione, è necessario racchiudere tra parentesi la parte della formula che deve essere calcolata per prima. Ad esempio, la formula seguente ha come risultato 11 perché la moltiplicazione viene calcolata prima dell'addizione. La formula moltiplica 2 per 3 e quindi somma 5 al risultato.

=5+2*3  

Al contrario, se si usano le parentesi per modificare la sintassi, l'ordine di calcolo cambia. Vengono prima sommati 5 e 2 e il risultato dell'addizione viene moltiplicato per 3, restituendo così 21 come risultato finale.

=(5+2)*3  

Nell'esempio seguente, le parentesi che racchiudono la prima parte della formula richiedono che l'espressione (3 + 0.25) venga valutata per prima e che il risultato così ottenuto venga diviso per quello dell'espressione (3 - 0.25).

=(3 + 0.25)/(3 - 0.25)  

Nell'esempio seguente viene applicato per primo l'operatore di elevamento a potenza, in base alle regole di precedenza per gli operatori, quindi viene applicato l'operatore di segno. Il risultato di questa espressione è-4.

=-2^2  

Per assicurarsi che l'operatore di segno venga applicato per primo al valore numerico, è possibile usare le parentesi per controllare gli operatori, come illustrato nell'esempio seguente. Il risultato di questa espressione è 4.

= (-2)^2  

Compatibilità

DAX è in grado di gestire e confrontare facilmente diversi tipi di dati, in modo analogo a Microsoft Excel. Tuttavia, il motore di calcolo sottostante si basa su SQL Server Analysis Services e offre funzionalità avanzate aggiuntive di un archivio dati relazionale, incluso un supporto più esteso per i tipi relativi a data e ora. In alcuni casi, pertanto, il comportamento delle funzioni o i risultati dei calcoli potrebbero non essere uguali a quelli di Excel. DAX include inoltre il supporto per più tipi di dati rispetto a Excel. In questa sezione vengono descritte le differenze principali.

Coercizione dei tipi di dati degli operandi

In linea di massima, il tipo di dati dei due operandi a destra e a sinistra di qualsiasi operatore deve essere lo stesso. Se tuttavia i tipi di dati sono diversi, in alcuni casi DAX li convertirà in un tipo comune per applicare l'operatore:

  1. Entrambi gli operandi vengono convertiti nel tipo di dati comune più ampio possibile.
  2. Viene applicato l'operatore, se possibile.

Si supponga, ad esempio, di avere due numeri da combinare. Un numero deriva da una formula, ad esempio =[Price] * .20, e il risultato può contenere molte posizioni decimali. L'altro è un numero intero specificato come valore stringa.

In questo caso, DAX convertirà entrambi i numeri in numeri reali in formato numerico, usando il formato numerico più ampio, in grado di archiviare i due tipi di numeri. Dopo la conversione, DAX applicherà la moltiplicazione.

A seconda della combinazione di tipi di dati, è possibile che la coercizione dei tipi non sia applicabile per le operazioni di confronto. Per un elenco completo dei tipi di dati supportati da DAX, vedere Tipi di dati supportati nei modelli tabulari e Tipi di dati in Power BI Desktop.

Integer, Real Number, Currency, Date/time e Blank sono considerati tipi di dati numerici ai fini delle operazioni di confronto. Quando si esegue un confronto, Blank restituisce zero. Per le operazioni di confronto sono supportate le combinazioni di tipi di dati seguenti.

Tipo di dati per il lato sinistro Tipo di dati per il lato destro
Numeric Numeric
Boolean Boolean
Stringa Stringa

Altri confronti di tipi di dati misti restituiranno un errore. Ad esempio, una formula come ="1" > 0 restituisce un errore che indica che le operazioni di confronto DAX non supportano il confronto di valori di tipo Text con valori di tipo Integer.

Tipi di dati usati in DAX Tipi di dati usati in Excel
Numeri (I8, R8) Numeri (R8)
Stringa Stringa
Boolean Boolean
Data/Ora Variante
Valuta Valuta

Differenze nell'ordine di precedenza

L'ordine di precedenza delle operazioni nelle formule DAX è fondamentalmente uguale a quello usato da Microsoft Excel. Tuttavia, alcuni operatori di Excel, come quello di percentuale, non sono supportati. Inoltre, non sono supportati nemmeno gli intervalli.

Di conseguenza, ogni volta che si copiano e si incollano formule da Excel, esaminarle con attenzione, poiché alcuni operatori o elementi delle formule potrebbero non essere validi. In caso di dubbi sull'ordine di esecuzione delle operazioni, è consigliabile usare le parentesi per controllare l'ordine di calcolo ed escludere qualsiasi ambiguità riguardo al risultato.

Sintassi DAX
Denominazione dei parametri DAX