Usare gli operatori DAX
Le formule DAX possono usare operatori per creare espressioni in grado di eseguire calcoli aritmetici, confrontare valori, usare stringhe o testare condizioni.
Suggerimento
In molti casi gli operatori DAX e l'ordine di precedenza corrispondono a quanto disponibile in Excel.
Operatori aritmetici
La tabella seguente elenca gli operatori aritmetici.
Operatore | Descrizione |
---|---|
+ | Addizione |
- | Sottrazione |
* | Moltiplicazione |
/ | Divisione |
^ | Elevamento a potenza |
Tenere presente che quando si dividono due espressioni e il denominatore può restituire zero o BLANK, è più efficiente e più sicuro usare la funzione DAX DIVIDE
.
Operatori di confronto
La tabella seguente elenca gli operatori di confronto, usati per confrontare due valori. Il risultato è TRUE o FALSE.
Operatore | Descrizione |
---|---|
= | Uguale a |
== | Strettamente uguale a |
> | Maggiore di |
< | Minore di |
>= | Maggiore o uguale a |
<= | Minore o uguale a |
<> | Diverso da |
Tutti gli operatori di confronto, ad eccezione di strettamente uguale a (==), trattano BLANK come corrispondente al numero zero, a una stringa vuota (""), alla data 30 dicembre 1899 o a FALSE. Ciò significa che l'espressione [Revenue] = 0
sarà TRUE quando il valore di [Revenue]
è zero o BLANK.
[Revenue] == 0
sarà invece TRUE solo quando il valore di [Revenue]
è zero.
Operatore di concatenazione del testo
Usare il carattere e commerciale (&) per connettere, o concatenare, due valori di testo per produrre un valore di testo continuo. Considerare, ad esempio, la definizione di colonna calcolata seguente:
Model Color = 'Product'[Model] & "-" & 'Product'[Color]
Operatori logici
Usare gli operatori logici per combinare espressioni che producono un singolo risultato. La tabella seguente elenca tutti gli operatori logici.
Operatore | Descrizione |
---|---|
&& | Crea una condizione AND tra due espressioni che prevedono ognuna un risultato booleano. Se entrambe le espressioni restituiscono TRUE, anche la combinazione delle espressioni restituisce TRUE; in caso contrario, la combinazione restituisce FALSE. |
|| (doppia pipe) | 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. |
IN | Crea una condizione OR logica tra ogni riga confrontata con una tabella. Nota: la sintassi del costruttore della tabella usa le parentesi graffe. |
NOT | Inverte lo stato di un'espressione booleana (FALSE diventa TRUE e viceversa). |
Un esempio in cui viene usato l'operatore logico IN
è la definizione della misura ANZ Revenue, che usa la funzione DAX CALCULATE
per applicare un filtro specifico di due paesi: Australia e Nuova Zelanda.
Nota
Quando si apprenderà come modificare il contesto di filtro, verrà presentata la potente funzione CALCULATE
.
ANZ Revenue =
CALCULATE(
[Revenue],
Customer[Country-Region] IN {
"Australia",
"New Zealand"
}
)
Precedenza tra gli operatori
Quando la formula DAX include più operatori, DAX usa alcune regole per determinare l'ordine di valutazione e in questo caso si parla di precedenza tra gli operatori. Le operazioni vengono ordinate in base alla tabella seguente.
Operatore | Descrizione |
---|---|
^ | Elevamento a potenza |
- | Segno (come in -1) |
* e / | Moltiplicazione e divisione |
NOT | NOT |
+ e - | Addizione e sottrazione |
& | Concatenazione di due stringhe di testo |
=,==,<,>,<=,=,><> | Confronto |
Quando gli operatori hanno lo stesso valore di precedenza, vengono ordinati da sinistra verso destra.
In generale, la precedenza degli operatori corrisponde a quella in Excel. Se è necessario eseguire l'override dell'ordine di valutazione, raggruppare le operazioni tra parentesi.
Considerare, ad esempio, la definizione di colonna calcolata seguente:
Extended Amount = Sales[Order Quantity] * Sales[Unit Price] * 1 - [Unit Price Discount Pct]
Questa definizione di colonna calcolata di esempio produce un risultato errato perché la moltiplicazione viene eseguita prima della sottrazione. La definizione di colonna calcolata corretta seguente usa le parentesi per garantire che le sottrazioni vengano eseguite prima delle moltiplicazioni.
Extended Amount = Sales[Order Quantity] * Sales[Unit Price] * (1 - [Unit Price Discount Pct])
Suggerimento
Ricordare le regole di precedenza degli operatori può essere complesso, in particolare se si ha poca familiarità con DAX. Di conseguenza, è consigliabile testare accuratamente le formule. Quando le formule non producono il risultato corretto a causa di un ordine di valutazione errato, è possibile provare ad aggiungere parentesi per modificare l'ordine di valutazione. È anche possibile aggiungere parentesi per migliorare la leggibilità delle formule.
Per altre informazioni sugli operatori DAX e sull'ordine di precedenza, vedere operatori DAX.
Conversione implicita
Quando si scrive una formula DAX che usa gli operatori per combinare tipi di dati diversi, non è necessario convertire in modo esplicito i tipi. In genere DAX identifica automaticamente i tipi di dati degli oggetti del modello a cui si fa riferimento e, quando necessario, esegue conversioni implicite per completare l'operazione specificata.
Ci possono essere, tuttavia, alcune limitazioni relative ai valori che è possibile convertire. Se il tipo di dati di un valore o di una colonna non è compatibile con l'operazione corrente, DAX restituisce un errore. Il tentativo di moltiplicare un valore di data, ad esempio, crea un errore perché non si tratta di un'operazione logica.
BLANK viene gestito in modo diverso, a seconda dell'operatore usato. Viene gestita in modo analogo a quanto avviene con BLANK in Excel, ma diversamente da quanto avviene con i valori NULL dei database (SQL). BLANK viene considerato come zero dagli operatori aritmetici e come stringa vuota in caso di concatenazione a una stringa.
Suggerimento
Ricordare il modo in cui viene gestito BLANK può essere complesso, in particolare se si ha poca familiarità con DAX. Di conseguenza, è consigliabile testare accuratamente le formule. Quando i valori BLANK creano risultati imprevisti, usare le funzioni DAX IF
e ISBLANK
per verificare la presenza di valori BLANK e rispondere nel modo appropriato.