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
Usare la e commerciale (&) per unire, o concatenare, due o più stringhe di testo in modo da ottenere un'unica stringa.
Operatore di testo | Significato | Esempio |
---|---|---|
& (e commerciale) | Connette, o concatena, due valori per generare un valore di testo continuo | [Region] & ", " & [City] |
Operatori logici
Utilizzare gli 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:
- Entrambi gli operandi vengono convertiti nel tipo di dati comune più ampio possibile.
- 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.