CALCULATE

Si applica a:Calcolo visivo misuratabella calcolata colonnacalcolata

Valuta un'espressione in un contesto di filtro modificato.

Nota

È disponibile anche la funzione CALCULATETABLE, che ha 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 di tabella che definiscono i filtri o le funzioni modificatore di filtro.

L'espressione usata come primo parametro corrisponde essenzialmente a una misura.

I filtri possono essere:

  • Espressioni filtro booleane
  • Espressioni 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 (||), ovvero entrambe le condizioni possono essere vere.

Espressioni filtro booleane

Un filtro di espressione booleana è un'espressione che restituisce TRUE o FALSE. Queste espressioni devono rispettare diverse regole:

  • Possono fare riferimento a colonne da una singola tabella.
  • Non possono fare riferimento a misure.
  • Non possono usare una funzione CALCULATE annidata.

A partire dalla versione di settembre 2021 di Power BI Desktop, si applica anche quanto segue:

  • Non possono usare funzioni che analizzano o restituiscono una tabella, a meno che siano passate come argomenti alle funzioni di aggregazione.
  • Possono contenere una funzione di aggregazione che restituisce un valore scalare. Ad esempio, usare
    Total sales on the last selected date =
    CALCULATE (
        SUM ( Sales[Sales Amount] ),
        'Sales'[OrderDateKey] = MAX ( 'Sales'[OrderDateKey] )
    )
    

Espressione filtro tabella

Un filtro di espressione tabella applica un oggetto tabella come filtro. Può trattarsi di un riferimento a una tabella del modello, ma è più probabile che si tratti di una funzione che restituisce un oggetto tabella. È possibile usare la funzione FILTER per applicare condizioni di filtro complesse, incluse quelle che non è possibile definire tramite un'espressione filtro booleana.

Funzioni di modificatore di filtro

Le funzioni di modificatore di filtro consentono di eseguire altre operazioni oltre alla semplice aggiunta di filtri. Forniscono un maggiore controllo quando si modifica il contesto di filtro.

Funzione Scopo
REMOVEFILTERS Rimuovere tutti i filtri oppure i filtri da una o più colonne di una tabella o da tutte le colonne di una singola tabella.
ALL1, 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 Creare una relazione inattiva tra colonne correlate. In questo caso, la relazione attiva diventa automaticamente inattiva.
CROSSFILTER Modificare la direzione del filtro (da entrambe le direzioni a una singola direzione o viceversa) oppure 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 in uso, è preferibile usare questa funzione per rimuovere i filtri.

Valore restituito

Valore che rappresenta il risultato dell'espressione.

Osservazioni:

  • Quando vengono fornite espressioni filtro, la funzione CALCULATE modifica il contesto di filtro per valutare l'espressione. Per ogni espressione filtro, ci sono due possibili risultati standard quando non si esegue il wrapping dell'espressione filtro nella funzione KEEPFILTERS:

    • Se le colonne (o le tabelle) non sono presenti nel contesto di filtro, i nuovi filtri verranno aggiunti al contesto di filtro per valutare l'espressione.
    • Se le colonne (o le tabelle) sono già nel contesto di filtro, i filtri esistenti verranno sovrascritti dai nuovi filtri per valutare l'espressione CALCULATE.
  • La funzione CALCULATE usata senza filtri soddisfa un requisito specifico. Converte il contesto di riga in contesto di filtro. Ciò è 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 nella modalità DirectQuery se usata in colonne calcolate o nelle regole di sicurezza a livello di riga.

Esempi

La definizione di misura della tabella Sales seguente produce un risultato relativo ai ricavi, ma solo per i prodotti di colore blu.

Gli esempi in questo articolo possono essere usati con il modello campione di Adventure Works DW 2020 di Power BI Desktop. Per ottenere il modello, vedere modello campione DAX.

Blue Revenue =
CALCULATE(
    SUM(Sales[Sales Amount]),
    'Product'[Color] = "Blue"
)
Categoria Sales Amount Blue Revenue
Accessori $1,272,057.89 $165,406.62
Bikes $94,620,526.21 $8,374,313.88
Clothing $2,117,613.45 $259,488.37
Componenti $11,799,076.66 $803,642.10
Totali $109,809,274.20 $9,602,850.97

La funzione CALCULATE valuta la somma della colonna Sales Amount della tabella Sales in un contesto di filtro modificato. Viene aggiunto un nuovo filtro alla colonna Color della tabella Product oppure il filtro sovrascrive i filtri già applicati alla colonna.

La definizione di misura della tabella Sales seguente produce un rapporto tra vendite e vendite per tutti i canali di vendita.

Canale Sales Amount % ricavi canale sul totale
Internet $29,358,677.22 26.74%
Reseller $80,450,596.98 73.26%
Totali $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 DIVIDE divide un'espressione che somma il valore della colonna Sales Amount della tabella Sales (nel contesto di filtro) per la stessa espressione in un contesto di filtro modificato. La funzione CALCULATE modifica il contesto di filtro usando la funzione REMOVEFILTERS, che è una funzione di modificatore di filtro. Rimuove i filtri dalla colonna Channel della tabella Sales Order.

La colonna calcolata della tabella Customer seguente classifica i clienti in base a una classe di fedeltà. Si tratta di uno scenario molto semplice: quando i ricavi prodotti dal cliente sono inferiori a 2500 dollari, vengono classificati come Low; in caso contrario, sono classificati come 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. In questo caso si parla di transizione del contesto. La funzione ALLEXCEPT rimuove i filtri da tutte le colonne della tabella Customer ad eccezione della colonna CustomerKey.

Contesto di filtro
Contesto di riga
Funzione CALCULATETABLE
Funzioni di filtro