Uso delle funzioni di modificatore del filtro

Completato

Quando si usa la funzione CALCULATE, è possibile passare le funzioni di modifica del filtro, che permettono di ottenere molto più della semplice aggiunta di filtri.

Rimozione di filtri

Usare la funzione DAX REMOVEFILTERS come espressione filtro di CALCULATE per rimuovere i filtri dal contesto del filtro. Può rimuovere i filtri da una o più colonne oppure da tutte le colonne di una singola tabella.

Nota

La funzione REMOVEFILTERS è relativamente nuova. Nelle versioni precedenti di DAX, per rimuovere i filtri si usava la funzione DAX ALL o delle varianti della stessa funzione, tra cui le funzioni DAX ALLEXCEPT e ALLNOBLANKROW. Queste funzioni si comportano sia come modificatori di filtro che come funzioni che restituiscono oggetti tabella con valori distinti. Queste funzioni sono menzionate qui perché è probabile che nella documentazione siano indicati esempi di formule che rimuovono i filtri attraverso il loro uso.

Nell'esempio di seguito si procederà ad aggiungere una nuova misura alla tabella Sales che valuta la misura Revenue, rimuovendo i filtri dalla tabella Sales Territory. Formattare la misura come valuta con due posizioni decimali.

Revenue Total Region = CALCULATE([Revenue], REMOVEFILTERS('Sales Territory'))

Ora aggiungere la misura Revenue Total Region all'oggetto visivo matrice a pagina 2 del report. L'oggetto visivo matrice verrà raggruppato in base a tre colonne della tabella Sales Territory sulle righe Group, Country e Region.

Notare che i valori di Revenue Total Region sono tutti uguali. È il valore dei ricavi totali.

Sebbene questo risultato da solo non sia utile, quando viene usato come denominatore in un rapporto calcola una percentuale del totale complessivo. Pertanto, ora si sovrascriverà la definizione della misura Revenue Total Region con la definizione di seguito. (Questa nuova definizione modifica il nome della misura e dichiara due variabili. Accertarsi di formattare la misura come percentuale con due posizioni decimali).

Revenue % Total Region =
VAR CurrentRegionRevenue = [Revenue]
VAR TotalRegionRevenue =
    CALCULATE(
        [Revenue],
        REMOVEFILTERS('Sales Territory')
    )
RETURN
    DIVIDE(
        CurrentRegionRevenue,
        TotalRegionRevenue
    )

Verificare che l'oggetto visivo matrice ora visualizzi ora i valori Revenue % Total Region.

Ora si procederà a creare un'altra misura, calcolando il rapporto tra i ricavi di un'area geografica e quelli del Paese o dell'area geografica.

Prima di completare questa attività, tenere presente che il valore di Revenue % Total Region per l'area Southwest è pari al 22,95%. Esaminare il contesto del filtro per questa cella. Passare alla vista dati, quindi nel riquadro Campi selezionare la tabella Sales Territory.

Applicare i seguenti filtri: di colonna:

  • Group: North America
  • Country: United States
  • Region: Southwest

Notare che i filtri riducono la tabella a una sola riga. Ora, mentre si riflette sul nuovo obiettivo di creare un rapporto tra le entrate dell'area geografica rispetto alle entrate del Paese, cancellare il filtro dalla colonna Region.

Notare che ora esistono cinque righe, ognuna delle quali appartiene al Paese United States. Di conseguenza, quando si cancellano i filtri della colonna Region, mantenendo i filtri nelle colonne Country e Group, si avrà un nuovo contesto di filtro relativo al Paese dell'area geografica.

Nella seguente definizione di misura notare in che modo è possibile cancellare o rimuovere un filtro da una colonna. Nella logica DAX si tratta di una piccola e impercettibile modifica apportata alla formula della misura Revenue % Total Region. La funzione REMOVEFILTERS ora rimuove i filtri dalla colonna Region anziché da tutte le colonne della tabella Sales Territory.

Revenue % Total Country =
VAR CurrentRegionRevenue = [Revenue]
VAR TotalCountryRevenue =
    CALCULATE(
        [Revenue],
        REMOVEFILTERS('Sales Territory'[Region])
    )
RETURN
    DIVIDE(
        CurrentRegionRevenue,
        TotalCountryRevenue
    )

Aggiungere la misura Revenue % Total Country alla tabella Sales e formattala come percentuale con due posizioni decimali. Aggiungere la nuova misura all'oggetto visivo matrice.

Notare che tutti i valori, ad eccezione di quelli relativi alle aree geografiche di United States, sono pari al 100%. Il motivo è che, nell'azienda Adventure Works, il Paese United States è suddiviso in aree geografiche, cosa che invece non avviene per tutti gli altri Paesi/aree geografiche.

Nota

I modelli tabulari non supportano le gerarchie irregolari, ovvero gerarchie con profondità variabili. È quindi un approccio di progettazione comune ripetere i valori padre (o altro antenato) ai livelli inferiori della gerarchia. Ad esempio, Australia non è suddivisa in aree geografiche, quindi il valore del Paese/area geografica viene ripetuto come nome dell'area geografica. È sempre meglio archiviare un valore significativo anziché BLANK.

Il prossimo esempio è l'ultima misura che verrà creata. Aggiungere la misura Revenue % Total Group e formattarla come percentuale con due posizioni decimali. Aggiungere quindi la nuova misura all'oggetto visivo matrice.

Revenue % Total Group =
VAR CurrentRegionRevenue = [Revenue]
VAR TotalGroupRevenue =
    CALCULATE(
        [Revenue],
        REMOVEFILTERS(
            'Sales Territory'[Region],
            'Sales Territory'[Country]
        )
    )
RETURN
    DIVIDE(
        CurrentRegionRevenue,
        TotalGroupRevenue
    )

Quando si rimuovono i filtri dalle colonne Region e Country nella tabella Sales Territory, la misura calcolerà i ricavi dell'area geografica come rapporto dei ricavi del gruppo.

Mantenimento dei filtri

È possibile usare la funzione DAX KEEPFILTERS come espressione filtro nella funzione CALCULATE per mantenere i filtri.

Per osservare come eseguire questa attività, passare alla pagina 1 del report. Quindi, modificare la definizione della misura Revenue Red per usare la funzione KEEPFILTERS.

Revenue Red =
CALCULATE(
    [Revenue],
    KEEPFILTERS('Product'[Color] = "Red")
)

Nell'oggetto visivo tabella, notare che esiste un solo valore Revenue Red. Il motivo è che l'espressione filtro booleana mantiene i filtri esistenti sulla colonna Color della tabella Product. Il motivo per cui i colori diversi dal rosso sono BLANK è che i contesti e le espressioni filtro sono combinati per questi due filtri. Il colore nero e il colore rosso si intersecano e, poiché non possono essere entrambi contemporaneamente TRUE, l'espressione viene filtrata per le righe senza prodotto. È invece possibile che entrambi i filtri rossi siano TRUE contemporaneamente, il che spiega perché viene visualizzato un valore Revenue Red.

Uso delle relazioni inattive

Una relazione del modello inattiva può propagare i filtri soltanto quando la funzione DAX USERELATIONSHIP viene passata come espressione filtro alla funzione CALCULATE. Quando si usa questa funzione per attivare una relazione inattiva, la relazione attiva diventerà automaticamente inattiva.

Esaminare un esempio di definizione di misura che usa una relazione inattiva per calcolare la misura Revenue in base alle date di spedizione:

Revenue Shipped =
CALCULATE (
    [Revenue],
    USERELATIONSHIP('Date'[DateKey], Sales[ShipDateKey])
)

Modifica del comportamento della relazione

È possibile modificare il comportamento della relazione del modello quando un'espressione viene valutata passando la funzione DAX CROSSFILTER come espressione di filtro alla funzione CALCULATE. Si tratta di una funzionalità avanzata.

La funzione CROSSFILTER può modificare le direzioni del filtro (da entrambi a singolo o da singolo a entrambi) e persino disabilitare una relazione tra tabelle.