CALCULATE
Valuta un'espressione in un contesto di filtro modificato.
Nota
C'è anche la funzione CALCULATETABLE. Esegue esattamente la stessa funzionalità, ad eccezione del fatto che modifica il contesto di filtro applicato a un'espressione che restituisce un oggetto tabella .
Sintassi
CALCULATE(<expression>[, <filter1> [, <filter2> [, …]]])
Parametri
Termine | Definizione |
---|---|
expression |
Espressione da valutare. |
filter1, filter2,… |
(Facoltativo) Espressioni booleane o espressioni di tabella che definiscono filtri o funzioni di modificatore di filtro. |
L'espressione usata come primo parametro è essenzialmente uguale a una misura.
I filtri possono essere:
- Espressioni di filtro booleane
- Espressioni di filtro tabella
- Funzioni di modifica del filtro
Quando sono presenti più filtri, possono essere valutati usando l'operatore logico AND (&&
) , ovvero tutte le condizioni devono essere TRUE
o dall'operatore logico OR (||
) , vale a dire che entrambe le condizioni possono essere vere.
Espressioni di filtro booleane
Un filtro di espressione booleana è un'espressione che restituisce TRUE
o FALSE
. Esistono diverse regole che devono rispettare:
- Possono fare riferimento a colonne da una singola tabella.
- Non possono fare riferimento a misure.
- Non possono usare una funzione di CALCULATE annidata.
A partire dalla versione di settembre 2021 di Power BI Desktop, si applicano anche le operazioni seguenti:
- Non possono usare funzioni che analizzano o restituiscono una tabella a meno che non vengano passate come argomenti alle funzioni di aggregazione.
- Possono contenere una funzione di aggregazione che restituisce un valore scalare. Per esempio
Total sales on the last selected date = CALCULATE ( SUM ( Sales[Sales Amount] ), 'Sales'[OrderDateKey] = MAX ( 'Sales'[OrderDateKey] ) )
Espressione filtro tabella
Un filtro di espressione di tabella applica un oggetto tabella come filtro. Potrebbe trattarsi di un riferimento a una tabella del modello, ma più probabilmente si tratta di una funzione che restituisce un oggetto tabella. È possibile usare la funzione FILTER per applicare condizioni di filtro complesse, incluse quelle che non possono essere definite da un'espressione di filtro booleana.
Funzioni di modifica filtro
Le funzioni di modificatore di filtro consentono di eseguire più operazioni rispetto all'aggiunta di filtri. Forniscono un controllo aggiuntivo durante la modifica del contesto di filtro.
Funzione | Scopo |
---|---|
REMOVEFILTERS | Rimuovere tutti i filtri o i filtri da una o più colonne di una tabella o da tutte le colonne di una singola tabella. |
ALL 1, ALLEXCEPT, ALLNOBLANKROW | Rimuovere i filtri da una o più colonne o da tutte le colonne di una singola tabella. |
KEEPFILTERS | Aggiungere un filtro senza rimuovere i filtri esistenti nelle stesse colonne. |
USERELATIONSHIP | Interagire con una relazione inattiva tra le colonne correlate, nel qual caso la relazione attiva diventerà automaticamente inattiva. |
CROSSFILTER | Modificare la direzione del filtro (da singola a singola o da singola a entrambe) o disabilitare una relazione. |
1 La funzione ALL e le relative varianti si comportano sia come modificatori di filtro che come funzioni che restituiscono oggetti tabella. Se la funzione REMOVEFILTERS è supportata dallo strumento, è preferibile usarla per rimuovere i filtri.
Valore restituito
Valore che rappresenta il risultato dell'espressione.
Osservazioni
Quando vengono fornite espressioni di filtro, la funzione CALCULATE modifica il contesto di filtro per valutare l'espressione. Per ogni espressione di filtro, esistono due possibili risultati standard quando l'espressione di filtro non viene sottoposta a wrapping nella funzione KEEPFILTERS:
- Se le colonne (o le tabelle) non sono nel contesto del filtro, i nuovi filtri verranno aggiunti al contesto di filtro per valutare l'espressione.
- Se le colonne (o le tabelle) sono già presenti nel contesto di filtro, i filtri esistenti verranno sovrascritti dai nuovi filtri per valutare l'espressione CALCULATE.
La funzione CALCULATE usata senza filtri ottiene un requisito specifico. Esegue la transizione del contesto di riga al contesto di filtro. È necessario quando un'espressione (non una misura del modello) che riepiloga i dati del modello deve essere valutata nel contesto di riga. Questo scenario può verificarsi in una formula di colonna calcolata o quando viene valutata un'espressione in una funzione iteratore. Si noti che quando una misura del modello viene usata nel contesto di riga, la transizione del contesto è automatica.
Questa funzione non è supportata per l'uso in modalità DirectQuery quando viene usata nelle colonne calcolate o nelle regole di sicurezza a livello di riga.
Esempi
La definizione di misura della tabella Sales seguente
Gli esempi in questo articolo possono essere usati con il modello adventure works DW 2020 di Power BI Desktop di esempio. Per ottenere il modello, vedere DAX modello di esempio.
Blue Revenue =
CALCULATE(
SUM(Sales[Sales Amount]),
'Product'[Color] = "Blue"
)
Categoria | Importo vendite | Blue Revenue |
---|---|---|
Accessoristica | $ 1.272.057,89 | $ 165,406,62 |
Biciclette | $ 94.620.526.21 | $8.374.313.88 |
Abbigliamento | $2.117.613.45 | $ 259,488,37 |
Componenti | $ 11.799.076.66 | $ 803.642,10 |
totale | $109.809.274.20 | $9.602.850.97 |
La funzione
La definizione di misura della tabella sales seguente
Canale | Importo vendite | Revenue % Total Channel |
---|---|---|
Internet | $ 29,358,677,22 | 26.74% |
Rivenditore | $ 80,450,596,98 | 73.26% |
totale | $109.809.274.20 | 100.00% |
Revenue % Total Channel =
DIVIDE(
SUM(Sales[Sales Amount]),
CALCULATE(
SUM(Sales[Sales Amount]),
REMOVEFILTERS('Sales Order'[Channel])
)
)
La funzione
L'tabella calcolata customer seguente classifica i clienti in una classe fedeltà. È uno scenario molto semplice: quando i ricavi prodotti dal cliente sono inferiori a $ 2500, vengono classificati come Bassa; in caso contrario, sono high.
Customer Segment =
IF(
CALCULATE(SUM(Sales[Sales Amount]), ALLEXCEPT(Customer, Customer[CustomerKey])) < 2500,
"Low",
"High"
)
In questo esempio il contesto di riga viene convertito nel contesto di filtro. È noto come transizione del contesto . La funzione