Usare le funzioni dei modificatori di filtro

Completato

Quando si usa la funzione CALCULATE, è possibile passare funzioni di modifica filtro, che consentono di eseguire operazioni aggiuntive rispetto alla semplice aggiunta di filtri.

Rimuovere i filtri

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

Nota

La funzione REMOVEFILTERS è relativamente nuova. Nelle versioni precedenti di DAX i filtri venivano rimossi mediante la funzione DAX ALL o varianti di tale funzione, tra cui le funzioni DAX ALLEXCEPT e ALLNOBLANKROW. Queste funzioni si comportano come modificatori di filtro e come funzioni che restituiscono oggetti tabella con valori distinti. Queste funzioni vengono citate ora perché è probabile che vengano usate in esempi di formule e sezioni della documentazione per rimuovere i filtri.

Nell'esempio seguente verrà aggiunta alla tabella Sales una nuova misura che valuta la misura Revenue ma esegue tale operazione rimuovendo filtri dalla tabella Sales Territory. Formattare la misura come valuta con due posizioni decimali.

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

Aggiungere ora la misura Revenue Total Region all'oggetto visivo matrice disponibile nella Pagina 2 del report. L'oggetto visivo matrice eseguirà il raggruppamento in base a tre colonne della tabella Sales Territory nelle righe: Group, Country e Region.

Si noti che tutti i valori Revenue Total Region sono uguali. Indica il valore dei ricavi totali.

Anche se questo risultato non è utile da solo, quando viene usato come denominatore in un rapporto consente di calcolare una percentuale del totale complessivo. La definizione della misura Revenue Total Region verrà quindi sovrascritta con la definizione seguente. Questa nuova definizione modifica il nome della misura e dichiara due variabili. Assicurarsi di formattare la misura come percentuale con due cifre decimali.

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

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

Verrà ora creata un'altra misura, ma in questo caso verrà calcolato il rapporto di ricavi per un'area diviso per i ricavi del rispettivo paese.

Prima di completare questa attività, si noti che il valore di Revenue % Total Region per l'area Southwest è 22,95%. Esaminare il contesto di filtro per questa cella. Passare alla visualizzazione dati e quindi nel riquadro Campi selezionare la tabella Sales Territory.

Applicare i filtri di colonna seguenti:

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

Si noti che i filtri riducono la tabella a una sola riga. Per raggiungere il nuovo obiettivo, ovvero la creazione di un rapporto dei ricavi dell'area rispetto ai ricavi del paese, cancellare il filtro dalla colonna Region.

Si noti che sono ora presenti cinque righe, ognuna delle quali appartiene al paese United States. Quando si cancellano i filtri della colonna Region, ma si conservano i filtri nelle colonne Country e Group, sarà quindi disponibile un nuovo contesto di filtro relativo al paese dell'area.

Nella definizione di misura seguente si noti che è possibile cancellare o rimuovere un filtro da una colonna. Nella logica DAX si tratta di una lieve modifica apportata alla formula della misura Revenue % Total Region: la funzione REMOVEFILTERS rimuove ora i filtri dalla colonna Region invece che 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 alla tabella Sales la misura Revenue % Total Country e quindi formattarla come percentuale con due cifre decimali. Aggiungere la nuova misura all'oggetto visivo matrice.

Si noti che tutti i valori, ad eccezione dei valori per le aree di United States, sono pari al 100%. Questa situazione è dovuta al fatto che nella società Adventure Works sono presenti aree per United States, ma non sono presenti aree per gli altri paesi.

Nota

I modelli tabulari non supportano le gerarchie incomplete, ovvero gerarchie con profondità variabili. Uno degli approcci comuni per la progettazione consiste quindi nel ripetere valori padre (o di altri predecessori) ai livelli inferiori della gerarchia. Ad esempio, l'Australia non ha un'area, quindi il valore del paese o dell'area geografica viene ripetuto come nome dell'area. È sempre consigliabile archiviare un valore significativo invece di VUOTO.

L'esempio seguente è relativo all'ultima misura che verrà creata. Aggiungere la misura Revenue % Total Group e quindi formattarla come percentuale con due cifre 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 rimuoveranno i filtri dalle colonne Region e Country nella tabella Sales Territory, la misura calcolerà i ricavi dell'area come rapporto dei ricavi del rispettivo gruppo.

Conservare i filtri

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

Per esaminare la procedura per eseguire questa attività, passare alla Pagina 1 del report. Modificare quindi la definizione della misura Revenue Red in modo da usare la funzione KEEPFILTERS.

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

Nell'oggetto visivo tabella si noti che esiste solo un valore Revenue Red. L'espressione filtro booleana conserva infatti i filtri esistenti nella colonna Color della tabella Product. I colori diversi dal rosso sono VUOTO perché i contesti del filtro e le espressioni filtro sono combinate per questi due filtri. Il colore nero e il colore rosso sono intersecati e poiché non possono essere entrambi TRUE contemporaneamente, nessuna riga di prodotto soddisfa il filtro per l'espressione. Entrambi i filtri rossi possono essere TRUE solo contemporaneamente e questo spiega perché viene visualizzato solo il valore Revenue Red.

Usare le relazioni inattive

Una relazione di modello inattiva può propagare filtri solo 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])
)

Modificare il comportamento della relazione

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

La funzione CROSSFILTER può modificare le direzioni del filtro, da entrambe a singola o da singola a entrambe, e può anche disabilitare una relazione.