Esaminare il contesto di filtro
La funzione DAX VALUES
consente alle formule di determinare i valori che si trovano nel contesto di filtro.
La sintassi della funzione VALUES
è la seguente:
VALUES(<TableNameOrColumnName>)
La funzione richiede il passaggio di un riferimento a tabella o di un riferimento a colonna. Quando si passa un riferimento a tabella, restituisce un oggetto tabella con le stesse colonne che includono righe per gli elementi presenti nel contesto di filtro. Quando si passa un riferimento a colonna, restituisce una tabella a colonna singola con valori univoci che si trovano nel contesto di filtro.
La funzione restituisce sempre un oggetto tabella ed è possibile che una tabella includa più righe. Per verificare se un valore specifico si trova nel contesto di filtro, è quindi necessario che la formula verifichi prima di tutto che la funzione VALUES
restituisca una singola riga. Per eseguire questa attività è possibile usare due funzioni, ovvero le funzioni DAX HASONEVALUE
e SELECTEDVALUE
.
La funzione HASONEVALUE
restituisce TRUE
quando un riferimento a colonna specifico è stato filtrato fino a ottenere un singolo valore.
La funzione SELECTEDVALUE
semplifica l'attività di determinazione del singolo valore specifico. Quando alla funzione viene passato un riferimento a colonna, restituirà un singolo valore o, se nel contesto di filtro sono presenti più valori, restituirà VUOTO o un valore alternativo passato alla funzione.
Nell'esempio seguente verrà usata la funzione HASONEVALUE
. Aggiungere alla tabella Sales la misura seguente, che calcola le provvigioni relative alle vendite. Si noti che, in Adventure Works, il tasso di commissione è il 10% dei ricavi per tutti i paesi/aree geografiche, ad eccezione del Stati Uniti. Nell'area United States i venditori ricevono una provvigione del 15%. Formattare la misura come valuta con due cifre decimali e quindi aggiungerla alla tabella disponibile nella Pagina 3 del report.
Sales Commission =
[Revenue]
* IF(
HASONEVALUE('Sales Territory'[Country]),
IF(
VALUES('Sales Territory'[Country]) = "United States",
0.15,
0.1
)
)
Si noti che il totale del risultato per Sales Commission è VUOTO. Il contesto di filtro per la colonna Country della tabella Sales Territory contiene infatti più valori. In questo caso la funzione HASONEVALUE
restituisce FALSE
, che provoca la moltiplicazione della misura Revenue per BLANK (un valore moltiplicato per BLANK è BLANK). Per produrre un totale, sarà necessario usare una funzione iteratore, che viene illustrata più avanti in questo modulo.
Per testare lo stato del filtro è anche possibile usare le tre funzioni seguenti:
-
ISFILTERED
: restituisceTRUE
quando il riferimento a colonna passato viene filtrato direttamente. -
ISCROSSFILTERED
: restituisceTRUE
quando il riferimento a colonna passato viene filtrato indirettamente. Una colonna è a filtro incrociato quando un filtro applicato a un'altra colonna della stessa tabella o di una tabella correlata influisce sulla colonna di riferimento filtrandola. -
ISINSCOPE
: restituisceTRUE
quando il riferimento a colonna passato corrisponde al livello di una gerarchia di livelli.
Tornare alla Pagina 2 del report e quindi modificare la definizione della misura Revenue % Total Country per verificare che la colonna Region nella tabella Sales Territory rientri nell'ambito. Se non rientra nell'ambito, il risultato della misura deve essere VUOTO.
Revenue % Total Country =
VAR CurrentRegionRevenue = [Revenue]
VAR TotalCountryRevenue =
CALCULATE(
[Revenue],
REMOVEFILTERS('Sales Territory'[Region])
)
RETURN
IF(
ISINSCOPE('Sales Territory'[Region]),
DIVIDE(
CurrentRegionRevenue,
TotalCountryRevenue
)
)
Nell'oggetto visivo matrice si noti che i valori di Revenue % Total Country vengono ora visualizzati solo quando un'area rientra nell'ambito.