Usare gli operatori DAX

Completato

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.