CALCULATE

Si applica a:colonna calcolatatabella calcolata calcolo visivomisura

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 funziona come una misura.

I filtri possono essere:

  • Espressioni di filtro booleane
  • Espressioni di filtro tabella
  • Funzioni di modifica del filtro

Quando si usano più filtri, è possibile valutarli usando l'operatore AND logico (&&), il che significa che tutte le condizioni devono essere TRUEo dall'operatore OR logico (||), il che significa che entrambe le condizioni possono essere true. Per altre informazioni, vedere DAX Operatori logici degli operatori>.

Espressioni di filtro booleane

Un filtro di espressione booleana è un'espressione che restituisce TRUE o FALSE. Deve seguire diverse regole:

  • Può fare riferimento a colonne da una singola tabella.

  • Non può fare riferimento a misure.

  • Non può usare una funzione nidificata CALCULATE .

  • Non può usare funzioni che analizzano o restituiscono una tabella a meno che non vengano passate come argomenti alle funzioni di aggregazione.

  • Può 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 FILTER funzione per applicare condizioni di filtro complesse, incluse quelle che non è possibile definire 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. Offrono 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 diventa 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 lo strumento supporta la REMOVEFILTERS funzione, usarlo per rimuovere i filtri.

Valore restituito

Valore risultante dall'espressione.

Osservazioni

  • Quando si forniscono espressioni di filtro, la CALCULATE funzione modifica il contesto di filtro per valutare l'espressione. Per ogni espressione di filtro, esistono due risultati standard quando l'espressione di filtro non viene sottoposta a wrapping nella KEEPFILTERS funzione:

    • Se le colonne o le tabelle non si trovano nel contesto di filtro, i nuovi filtri vengono 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 vengono sovrascritti dai nuovi filtri per valutare l'espressione CALCULATE .
  • L'uso della CALCULATE funzione senza filtri consente di ottenere un requisito specifico. Esegue la transizione del contesto di riga al contesto di filtro. Questa transizione è necessaria 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. Quando si usa una misura del modello 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

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.

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

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 valuta la somma della tabella sales colonna Sales Amount in un contesto di filtro modificato. Alla tabella Product viene aggiunto un nuovo filtro colonna Color oppure il filtro sovrascrive qualsiasi filtro già applicato alla colonna.

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

Revenue % Total Channel =
DIVIDE (
    SUM ( Sales[Sales Amount] ),
    CALCULATE (
        SUM ( Sales[Sales Amount] ),
        REMOVEFILTERS ( 'Sales Order'[Channel] )
    )
)
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%

La funzione divide un'espressione che somma la tabella sales valore di colonna Sales Amount (nel contesto di filtro) per la stessa espressione in un contesto di filtro modificato. Si tratta della funzione CALCULATE che modifica il contesto di filtro usando la funzione REMOVEFILTERS, che è una funzione modificatore di filtro. Rimuove i filtri dalla tabella Sales Order colonna Channel.

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"
)
Segmento clienti Conteggio clienti Importo vendite
Alto 4,637 $102.670.663.09
Low 13,848 $ 7.138.611,11
totale 18,485 $109.809.274.20

In questo esempio il contesto di riga viene convertito nel contesto di filtro. È noto come transizione del contesto . La funzione rimuove i filtri da tutte le colonne della tabella Customer , ad eccezione della colonna CustomerKey .