Modificare il contesto di filtro
È possibile usare la funzione DAX CALCULATE
per modificare il contesto di filtro nelle formule. La sintassi per la funzione CALCULATE è la seguente:
CALCULATE(<expression>, [[<filter1>], <filter2>]…)
La funzione richiede il passaggio di un'espressione che restituisce un valore scalare e tutti i filtri necessari. L'espressione può essere una misura, ovvero un'espressione denominata, o qualsiasi espressione che può essere valutata nel contesto di filtro.
I filtri possono essere espressioni booleane o espressioni di tabella. È anche possibile passare funzioni di modifica del filtro che forniscono controllo aggiuntivo durante la modifica del contesto di filtro.
Quando sono presenti più filtri, questi vengono valutati mediante l'operatore logico AND
, ovvero tutte le condizioni devono essere TRUE
contemporaneamente.
Nota
La funzione DAX CALCULATETABLE
offre esattamente la stessa funzionalità della funzione CALCULATE
, ma modifica il contesto di filtro applicato a un'espressione che restituisce un oggetto tabella. Le spiegazioni e gli esempi in questo modulo usano la funzione CALCULATE
, ma occorre ricordare che questi scenari possono essere applicati anche alla funzione CALCULATETABLE
.
Applicare filtri di espressione booleana
Un filtro di espressione booleana è un'espressione che restituisce TRUE
o FALSE
. I filtri booleani devono rispettare le regole seguenti:
- Possono fare riferimento solo a una singola colonna.
- Non possono fare riferimento a misure.
- Non possono usare funzioni che analizzano o restituiscono una tabella che include funzioni di aggregazione come
SUM
.
In questo esempio verrà creata una misura. Scaricare e aprire prima di tutto il file Adventure Works DW 2020 M06.pbix. Aggiungere quindi alla tabella Sales la misura seguente, che filtra la misura Revenue in base a un filtro di espressione booleana per i prodotti rossi.
Revenue Red = CALCULATE([Revenue], 'Product'[Color] = "Red")
Aggiungere la misura Revenue Red all'oggetto visivo tabella disponibile nella Pagina 1 del report.
Nell'esempio successivo la misura seguente filtra la misura Revenue in base a più colori. Si noti l'uso dell'operatore IN
seguito da un elenco di valori di colore.
Revenue Red or Blue = CALCULATE([Revenue], 'Product'[Color] IN {"Red", "Blue"})
La misura seguente filtra la misura Revenue in base ai prodotti costosi. I prodotti costosi sono i prodotti con un prezzo di listino superiore a 1000 USD.
Revenue Expensive Products = CALCULATE([Revenue], 'Product'[List Price] > 1000)
Applicare filtri di espressioni tabella
Un filtro di espressione tabella applica un oggetto tabella come filtro. Può essere un riferimento a una tabella di modelli, ma è probabile che si tratti di una funzione DAX che restituisce un oggetto tabella.
Verrà in genere usata la funzione DAX FILTER
per applicare condizioni di filtro complesse, incluse quelle che non possono essere definite da un'espressione filtro booleana. La funzione FILTER
è classificata come funzione iteratore e prevede quindi che vengano passate una tabella o un'espressione di tabella e un'espressione da valutare per ogni riga della tabella.
La funzione FILTER
restituisce un oggetto tabella con esattamente la stessa struttura della tabella passata. Le rispettive righe sono un subset delle righe passate, ovvero le righe in cui l'espressione ha restituito TRUE
.
L'esempio seguente mostra un'espressione filtro di tabella che usa la funzione FILTER
:
Revenue High Margin Products =
CALCULATE(
[Revenue],
FILTER(
'Product',
'Product'[List Price] > 'Product'[Standard Cost] * 2
)
)
La funzione FILTER
in questo esempio filtra tutte le righe della tabella Product incluse nel contesto di filtro. Ogni riga per un prodotto il cui prezzo di listino è superiore al rispettivo costo standard viene visualizzata come riga della tabella filtrata. La misura Revenue viene quindi valutata per tutti i prodotti restituiti dalla funzione FILTER
.
Tutte le espressioni filtro passate alla funzione CALCULATE
sono espressioni filtro di tabella. Un'espressione filtro booleana è una notazione abbreviata per migliorare l'esperienza di scrittura e lettura. Microsoft Power BI converte internamente le espressioni filtro booleane in espressioni filtro di tabella in modo da convertire la definizione di misura Revenue Red.
Revenue Red =
CALCULATE(
[Revenue],
FILTER(
'Product',
'Product'[Color] = "Red"
)
)
Comportamento del filtro
Quando si aggiungono espressioni filtro alla funzione CALCULATE
, si ottengono due risultati standard possibili:
- Se le colonne o le tabelle non si trovano nel contesto di filtro, verranno aggiunti nuovi filtri al contesto di filtro per valutare l'espressione
CALCULATE
. - Se le colonne o le tabelle si trovano già nel contesto di filtro, i filtri esistenti verranno sovrascritti da quelli nuovi per valutare l'espressione
CALCULATE
.
Gli esempi seguenti illustrano come vengono aggiunte le espressioni filtro alla funzione CALCULATE
.
Nota
In ogni esempio non vengono applicati filtri all'oggetto visivo tabella.
Analogamente all'attività precedente, la misura Revenue Red è stata aggiunta a un oggetto visivo tabella che raggruppa in base ad area e visualizza i ricavi.
Poiché non sono applicati filtri alla colonna Color nella tabella Product, la valutazione della misura aggiunge un nuovo filtro al contesto di filtro. Nella prima riga il valore $2.681.324,79 corrisponde ai prodotti rossi venduti nell'area Australia.
Il passaggio della prima colonna dell'oggetto visivo tabella da Region a Color produrrà un risultato diverso perché la colonna Color nella tabella Product si trova ora nel contesto di filtro.
La formula della misura Revenue Red valuta la misura Revenue aggiungendo un filtro alla colonna Color (per impostarla su rosso) nella tabella Product. In questo oggetto visivo che raggruppa in base a colore, quindi, la formula di misura sovrascrive il contesto di filtro con un nuovo filtro.
Questo risultato potrebbe corrispondere o non corrispondere alle aspettative. L'unità successiva presenta la funzione DAX KEEPFILTERS
, ovvero una funzione di modifica dei filtri che può essere usata per conservare i filtri invece di sovrascriverli.