Guida di riferimento agli operatori DAX per PowerPivot
Nel linguaggio DAX (Data Analysis Expression) vengono utilizzati operatori per creare espressioni che consentono di confrontare valori, eseguire calcoli aritmetici o utilizzare stringhe. In questa sezione viene descritto l'utilizzo di ogni operatore.
Tipi di operatori
Vi sono quattro tipi diversi di operatori di calcolo, ovvero aritmetici, di confronto, di concatenazione di testo e logici.
Operatori aritmetici
Per effettuare operazioni matematiche di base, ad esempio addizione, sottrazione o moltiplicazione, combinare numeri e ottenere risultati numerici, utilizzare 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ò fungere sia da operatore binario sia da operatore unario. Un operatore binario richiede numeri da entrambi i lati dell'operatore ed esegue un'addizione. Quando si utilizzano valori in una formula DAX su entrambi lati dell'operatore binario, DAX tenta di eseguire il cast dei valori in tipi di dati numerici, qualora non si tratti già di numeri. L'operatore unario può invece essere applicato a qualsiasi tipo di argomento. Il simbolo più non influisce sul tipo o sul valore e viene semplicemente ignorato, mentre l'operatore meno crea un valore negativo, se applicato a un valore numerico.
Operatori di confronto
È possibile confrontare due valori utilizzando 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' |
> |
Maggiore di |
[Sales Date] > 'Jan 2009' |
< |
Minore di |
[Sales Date] < 'Jan 1 2009' |
>= |
Maggiore o uguale a |
[Amount] >= 20000 |
<= |
Minore o uguale a |
[Amount] <= 100 |
<> |
Diverso da |
[Region] <> 'USA' |
Operatore di concatenazione del testo
Utilizzare la e commerciale (&) per unire o concatenare due o più stringhe di testo al fine di restituire un'unica stringa.
Operatore di testo |
Significato |
Esempio |
---|---|---|
& (e commerciale) |
Consente di connettere o concatenare due valori per generare un valore di testo continuo |
[Region] & ", " & [City] |
Operatori logici
Utilizzare gli operatori logici (&&) e (||) per combinare espressioni e generare un singolo risultato.
Operatore di testo |
Significato |
Esempi |
---|---|---|
&& (e commerciale doppia) |
Consente di creare 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. |
([Region] = "France") && ([BikeBuyer] = "yes")) |
|| (barra verticale doppia) |
Crea una condizione OR tra due espressioni logiche. Se una delle espressioni restituisce TRUE, il risultato è TRUE. Solo quando entrambe le espressioni sono FALSE il risultato è FALSE. |
(([Region] = "France") || ([BikeBuyer] = "yes")) |
Operatori e ordine di precedenza
In alcuni casi, l'ordine con cui viene eseguito il calcolo può influire sul valore restituito, pertanto è importante comprendere in che modo viene determinato l'ordine e come è possibile modificarlo per ottenere i risultati desiderati.
Ordine di calcolo
In un'espressione gli operatori e i valori vengono valutati in base a un ordine specifico. Tutte le espressioni iniziano sempre con un segno di uguale (=). Il segno di uguale indica che i caratteri seguenti costituiscono un'espressione.
Dopo il segno di uguale vi sono gli elementi da calcolare (gli operandi), che sono separati dagli operatori di calcolo. Le espressioni vengono sempre lette da sinistra verso destra, ma l'ordine con cui vengono raggruppati gli elementi può essere in parte controllato tramite l'utilizzo di parentesi.
Ordine di precedenza degli operatori
Se si combinano diversi operatori in una singola formula, le operazioni vengono ordinate in base alla tabella seguente. Se gli operatori hanno lo stesso valore di precedenza, vengono ordinati da sinistra verso destra. Se, ad esempio, in un'espressione sono contenuti sia un operatore di moltiplicazione sia uno di divisione, questi vengono valutati nell'ordine in cui vengono visualizzati nell'espressione, da sinistra verso destra.
Operatore |
Descrizione |
---|---|
^ |
Elevamento a potenza |
– |
Segno (come in -1) |
* e / |
Moltiplicazione e divisione |
! |
NOT (operatore unario) |
+ e – |
Addizione e sottrazione |
& |
Consente di connettere due stringhe di testo (concatenazione) |
=< ><=>=<> |
Confronto |
Utilizzo di 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. Il risultato della formula seguente è ad esempio 11 in quanto la moltiplicazione viene calcolata prima dell'addizione. La formula moltiplica 2 per 3, quindi aggiunge 5 al risultato.
=5+2*3
Se invece si utilizzano parentesi per modificare la sintassi, l'ordine viene modificato in modo che vengano sommati 5 e 2 e il risultato venga moltiplicato per 3, restituendo 21.
=(5+2)*3
Nell'esempio seguente le parentesi che racchiudono la prima parte della formula forzano la valutazione dell'espressione (3 + 0.25) come prima operazione e quindi la divisione del risultato per il risultato dell'espressione, (3 - 0.25).
=(3 + 0.25)/(3 - 0.25)
Nell'esempio seguente viene applicato per primo l'operatore dell'elevamento a potenza, in base alle regole di precedenza per gli operatori, quindi viene applicato l'operatore di segno. Il risultato per questa espressione è -4.
=-2^2
Per assicurarsi che l'operatore di segno venga applicato per primo al valore numerico, è possibile utilizzare parentesi per controllare gli operatori, come illustrato nell'esempio seguente. Il risultato per questa espressione è 4.
= (-2)^2
Note relative alla compatibilità
DAX consente di gestire e confrontare in modo semplice diversi tipi di dati, con aspetti molto simili a quelli di Microsoft Excel. Il motore di calcolo sottostante è tuttavia basato su SQL Server Analysis Services e fornisce caratteristiche avanzate aggiuntive di un archivio dati relazionale, incluso il supporto avanzato per i tipi di data e ora. In alcuni casi, pertanto, è possibile che i risultati dei calcoli o il comportamento delle funzioni non corrispondano a quelli di Excel. DAX supporta inoltre una quantità maggiore di tipi di dati rispetto a Excel. In questa sezione vengono illustrate le differenze principali.
Coercizione dei tipi di dati degli operandi
In generale, i due operandi a sinistra e a destra di un operatore devono essere dello stesso tipo di dati. Se tuttavia i tipi di dati sono diversi, in DAX vengono convertiti in un tipo di dati comune per il confronto, come indicato di seguito:
Entrambi gli operandi vengono innanzitutto convertiti nel tipo di dati comune più grande possibile.
Quindi vengono confrontati.
Si supponga, ad esempio, che vi siano due numeri che si desidera combinare. Un numero è il risultato di una formula, ad esempio =[Price] * .20 e tale risultato potrebbe contenere numerose posizioni decimali. L'altro numero è un numero intero fornito come valore stringa.
In questo caso, entrambi i numeri vengono convertiti da DAX in numeri reali in un formato numerico, utilizzando il formato numerico più grande in grado di archiviare entrambi i tipi di numeri. Quindi i valori vengono confrontati.
In Excel viene invece eseguito un tentativo di confrontare valori di tipi diversi senza prima convertirli in un tipo comune. Per questo motivo, in DAX e in Excel è possibile ottenere risultati diversi per la stessa espressione di confronto.
Tipi di dati utilizzati in DAX |
Tipi di dati utilizzati in Excel |
---|---|
Numeri (I8, R8) Booleano Stringa DateTime Valuta |
Numeri (R8) Booleano Stringa Variant Valuta |
Per ulteriori informazioni sulla conversione implicita dei tipi di dati, vedere Tipi di dati supportati nelle cartelle di lavoro di PowerPivot.
Differenze nell'ordine di precedenza
L'ordine di precedenza delle operazioni nelle formule DAX è fondamentalmente uguale a quello utilizzato da Microsoft Excel, ma alcuni operatori di Excel non sono supportati, ad esempio l'operatore percento. Gli intervalli non sono inoltre supportati.
Quando si copiano e si incollano formule da Excel, assicurarsi pertanto di analizzare la formula attentamente, in quanto alcuni operatori o elementi nelle formule potrebbero non essere validi. In caso di dubbi relativamente all'ordine con cui vengono eseguite le operazioni, è consigliabile utilizzare parentesi per controllare tale ordine e rimuovere qualsiasi ambiguità nel risultato.