Operatori DAX
Il linguaggio Data Analysis Expression (DAX) utilizza operatori per creare espressioni che confrontano elementi values, eseguono calcoli aritmetici e lavorano con le stringhe or.
Tipi di operatori
Esistono quattro diversi tipi di operatori di calcolo: aritmetico, confronto, concatenazione del testo, and logica.
Operatori aritmetici
Per eseguire operazioni matematiche di base, ad esempio addizione, sottrazione, or moltiplicazione; combinare numeri; and produrre risultati numerici, usare gli operatori aritmetici seguenti.
Operatore aritmetico | Significato | Esempio |
---|---|---|
+ (più sign) |
Addizione | 3+3 |
- (meno sign) |
Sottrazione orsign | 3-1-1 |
* (asterisco) |
Moltiplicazione | 3*3 |
/ (barra obliqua) |
Divisione | 3/3 |
^ (accento circonflesso) |
Elevamento a potenza | 16^4 |
Nota
Il più sign può funzionare sia come operatore binario and, sia come operatore unario . Un operatore binario richiede numeri su entrambi i lati dell'operatore and esegue l'addizione. Quando si usa values in una formula DAX su entrambi i lati dell'operatore binario, DAX tenta di eseguire il cast del values ai tipi di dati numerici if sono già numeri not. Al contrario, l'operatore unario può essere applicato a qualsiasi tipo di argomento. Il simbolo più not non influisce sul tipo orvalueand e viene semplicemente ignorato, mentre l'operatore meno crea un valuenegativoif, applicato a un valuenumerico.
Operatori di confronto
È possibile confrontare due values con gli operatori seguenti. Quando due values vengono confrontati usando questi operatori, il risultato è un valuelogico, TRUE
orFALSE
.
Operatore di confronto | Significato | Esempio |
---|---|---|
= |
Uguale a | [Region] = "USA" |
== |
Strettamente uguale a | [Region] == "USA" |
> |
Maggiore di | [Sales Date] > "Jan 2009" |
< |
Minore di | [Sales Date] < "1 gennaio 2009" |
>= |
Maggiore di or uguale a | [Amount] >= 20000 |
<= |
Minore di or, uguale a | [Amount] <= 100 |
<> |
Not uguale a | [Region] <> "USA" |
All operatori di confronto except == considerano BLANK uguale al numero 0, stringa vuota "", DATE(1899, 12, 30), orFALSE
. Di conseguenza, [Column] = 0 viene true quando il value di [Column] è o 0 o orBLANK. Al contrario, [Column] == 0 è true solo quando il value di [Column] è 0.
Operatore di concatenazione del testo
Usare la e commerciale (&
) per unire, orconcatenate, due or più stringhe di testo per produrre una singola parte di testo.
Operatore di testo | Significato | Esempio |
---|---|---|
& (e commerciale) |
Si connette, or concatena, due values per produrre un value di testo continuo | [Region] & ", " & [City] |
Operatori logici
Usare operatori logici (&&
) and (||
) per combinare le espressioni per produrre un singolo risultato.
Operatore di testo | Significato | Esempi |
---|---|---|
&& (doppia e commerciale) |
Crea una condizione AND tra due espressioni ognuna con un risultato booleano.
If entrambe le espressioni restituiscono TRUE , la combinazione delle espressioni restituisce anche TRUE ; in caso contrario, la combinazione restituisce FALSE . |
([Region] = "France") && ([BikeBuyer] = "yes")) |
|| (simbolo doppia barra verticale) |
Crea una condizione OR tra due espressioni logiche.
If entrambe le espressioni restituiscono TRUE , il risultato è TRUE ; solo quando entrambe le espressioni sono FALSE , il risultato è FALSE . |
(([Region] = "France") || ([BikeBuyer] = "yes")) |
IN |
Crea una condizione OR logica tra ogni riga confrontata con una tabella. Nota: per la sintassi del costruttore della tabella vengono usate le parentesi graffe. | 'Product'[Color] IN { "Red", "Blue", "Black" } |
Ordine di precedenza degli operatori and
In alcuni casi, l'ordine in cui viene eseguito il calcolo può influire sul valueRestituito ; pertanto, è importante comprendere come viene determinato l'ordine and come è possibile modificare l'ordine per ottenere i risultati desiderati.
Ordine di calcolo
Un'espressione valuta gli operatori andvalues in un ordine specifico. Le espressioni All iniziano sempre con un uguale sign (=). L'sign uguale indica che i caratteri successivi costituiscono un'espressione.
Dopo l'uguale sign ci sono gli elementi da calcolare (gli operandi), che sono separati dagli operatori di calcolo. Le espressioni vengono sempre lette da left a right, ma l'ordine in cui gli elementi vengono raggruppati può essere controllato in qualche modo usando parentesi.
Precedenza tra gli operatori
If si combinano più operatori in una singola formula, le operazioni vengono ordinate in base alla tabella seguente. If gli operatori hanno la stessa precedenza valuee vengono ordinati da left a right. Ad esempio, if un operatore di moltiplicazione contains e uno di divisione and, vengono valutati nell'ordine in cui appaiono nell'espressione, da left a right.
Operatore | Descrizione |
---|---|
^ |
Elevamento a potenza |
– |
Sign (ad esempio –1) |
* and / |
Moltiplicazione and divisione |
+ and – |
Addizione and 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 first. Ad esempio, la formula seguente ha come risultato 11 perché la moltiplicazione viene calcolata prima dell'addizione. La formula moltiplica 2 per 3, and quindi aggiunge 5 al risultato.
=5+2*3
Al contrario, if si usano parentesi per modificare la sintassi, l'ordine viene modificato in modo che 5 and 2 vengano aggiunti insieme, and il risultato moltiplicato per 3 per produrre 21.
=(5+2)*3
Nell'esempio seguente, le parentesi intorno alla parte first della formula forzano il calcolo a evaluate l'espressione (3 + 0.25)
firstand quindi divide il risultato in base al risultato dell'espressione, (3 - 0.25)
.
=(3 + 0.25)/(3 - 0.25)
Nell'esempio seguente l'operatore exponentiation viene applicato first, in base alle regole di precedenza per gli operatori, and quindi viene applicato l'operatore sign. Il risultato di questa espressione è-4.
=-2^2
Per assicurarsi che l'operatore sign venga applicato al numero numerico valuefirst, è possibile usare le parentesi per controllare gli operatori, come illustrato nell'esempio seguente. Il risultato di questa espressione è 4.
= (-2)^2
Compatibilità
DAX gestisce facilmente and confronta vari tipi di dati, come Microsoft Excel. Tuttavia, il motore di calcolo sottostante si basa su SQL Server Analysis Services and offre funzionalità avanzate aggiuntive di un archivio dati relazionale, incluso il supporto più avanzato per i tipi di dateandtime. Pertanto, in alcuni casi i risultati dei calcoli or e il comportamento delle funzioni può not essere identico a quello in Excel. Inoltre, DAX supporta più tipi di dati rispetto a Excel. In questa sezione vengono descritte le differenze principali.
Coercizione dei tipi di dati degli operandi
In generale, i due operandi sui lati leftandright di qualsiasi operatore devono essere dello stesso tipo di dati. Tuttavia, if i tipi di dati sono diversi, DAX li convert a un tipo di dati comune per applicare l'operatore in alcuni casi:
- Entrambi gli operandi vengono convertiti nel tipo di dati comune più ampio possibile.
- L'operatore è applicato, if è possibile.
Si supponga, ad esempio, di avere due numeri da combinare. Un numero risultante da una formula, ad esempio =[Price] * .20
, and il risultato può contenere molte posizioni decimali. L'altro numero è un numero intero fornito come stringa value.
In questo caso, DAXconvert entrambi i numeri in numeri reali in un formatnumerico usando il format numerico più grande in grado di archiviare entrambi i tipi di numeri. Quindi DAX applicherà la moltiplicazione.
A seconda della combinazione di tipi di dati, la coercizione dei tipi può not essere applicata per le operazioni di confronto. Per un elenco completo dei tipi di dati supportati da DAX, vedere Tipi di dati supportati nei modelli tabulariandTipi di dati in Power BI Desktop.
Integer, Real Number, Currency, Date/timeandBlank vengono considerati numerici a scopo di confronto. Blank restituisce zero quando si esegue un confronto. Per le operazioni di confronto sono supportate le combinazioni di tipi di dati seguenti.
Tipo di dati lato Left | Tipo di dati lato Right |
---|---|
Numeric | Numeric |
Boolean | Boolean |
Stringa | Stringa |
Altri confronti di tipi di dati misti restituiranno un error. Ad esempio, una formula come ="1" > 0 restituisce un error che indica che DAX operazioni di confronto not supportano il confronto di values di tipo Text con values 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 |
Currency | Currency |
Differenze nell'ordine di precedenza
L'ordine di precedenza delle operazioni nelle formule di DAX è sostanzialmente lo stesso di quello usato da Microsoft Excel, ma alcuni operatori di Excel, come percentuale, sono supportati da not. Gli intervalli not sono anche supportati.
Pertanto, ogni volta che si copiano and formule incollate da Excel, assicurarsi di esaminare attentamente la formula, poiché alcuni operatori or elementi nelle formule potrebbero not essere validi. In caso di dubbi sull'ordine in cui vengono eseguite le operazioni, è consigliabile usare le parentesi per controllare l'ordine delle operazioni and rimuovere eventuali ambiguità sul risultato.