Filteraanpassingsfuncties gebruiken

Wanneer u de functie CALCULATE gebruikt, kunt u filteraanpassingsfuncties doorgeven, waarmee u meer kunt doen dan alleen filters toevoegen.

Filters verwijderen

Gebruik de DAX-functie REMOVEFILTERS als een CALCULATE-filterexpressie om filters uit de filtercontext te verwijderen. Hiermee kunnen filters uit een of meer kolommen of uit alle kolommen van een enkele tabel worden verwijderd.

Notitie

De functie REMOVEFILTERS is relatief nieuw. In eerdere versies van DAX hebt u filters verwijderd met behulp van de DAX-functie ALL of varianten met inbegrip van de DAX-functies ALLEXCEPT en ALLNOBLANKROW. Deze functies gedragen zich als filteraanpassingen en als functies die tabelobjecten van afzonderlijke waarden retourneren. Deze functies worden nu vermeld, omdat u waarschijnlijk documentatie en formulevoorbeelden kunt vinden waarin filters worden verwijderd door ze te gebruiken.

In het volgende voorbeeld maakt u een nieuwe meting waarmee de meting Revenue wordt geëvalueerd, maar dit wordt gedaan door filters uit de tabel Sales Territory te verwijderen. Maak de meting op als valuta met twee decimalen.

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

Voeg nu de meting Revenue Total Region toe aan het matrix-besturingselement dat te vinden is op pagina 2 van het rapport. Het matrix-besturingselement wordt gegroepeerd op drie kolommen uit de tabel Sales Territory in de rijen: Group, Country en Region.

Een afbeelding toont een matrix met de titel Reseller Revenue has Group, Country en Region gegroepeerd in de rijen, en een samenvatting van Revenue en Revenue Total Region. De waarde voor Revenue Total Region is hetzelfde voor elke rijgroep.

U ziet dat alle waarden van Revenue Total Region hetzelfde zijn. Het is de waarde van de totale omzet.

Hoewel dit resultaat op zichzelf niet nuttig is wanneer het als een noemer wordt gebruikt in een verhouding, wordt een percentage van het eindtotaal berekend. Daarom overschrijft u nu de definitie van de meting Revenue Total Region met de volgende definitie. (Met deze nieuwe definitie wordt de naam van de meting gewijzigd. Maak de meting op als een percentage met twee decimalen.)

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

Controleer of in het matrix-besturingselement nu de waarden voor Revenue % Total Region worden weergegeven.

Een afbeelding toont een matrix-besturingselement met de titel Reseller Revenue has Group, Country en Region gegroepeerd in de rijen, en een samenvatting van Revenue en % Total Region.

U gaat nu nog een meting maken, maar deze keer berekent u de verhouding van de omzet voor een regio gedeeld door de omzet van het land.

Voordat u deze taak voltooit, ziet u dat de waarde voor Revenue % Total Region voor de regio Southwest 22,95 procent is. Onderzoek de filtercontext voor deze cel. Ga naar de gegevensweergave en selecteer in het deelvenster Fields de tabel Sales Territory.

Pas de volgende kolomfilters toe:

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

Een afbeelding toont de Power BI Desktop-tabelfilters voor de tabel Sales Territory. Filters worden toegepast op (1) Group = North America, (2) Country = United States, en (3) Region = Southwest.

U ziet dat de filters de tabel beperken tot slechts één rij. Terwijl u nadenkt over uw nieuwe doel om een verhouding te maken tussen de inkomsten van regio ten opzichte van de inkomsten van het land, wist u het filter nu uit de kolom Region.

Een afbeelding toont het contextmenu van de kolom en de opdracht Clear Filters is gemarkeerd.

U ziet dat er nu vijf rijen bestaan, waarbij elke rij behoort tot het land United States. Als u de kolomfilters Region verwijdert en filters in de kolommen Country en Group behouden blijven, hebt u een nieuwe filtercontext die voor het land van de regio is.

In de volgende metingsdefinitie ziet u hoe u een filter kunt wissen of verwijderen uit een kolom. In DAX-logica is het een kleine en subtiele wijziging die wordt aangebracht in de formule van de meting Revenue % Total Region: De functie REMOVEFILTERS verwijdert nu filters uit de kolom Region in plaats van alle kolommen van de tabel Sales Territory.

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

Voeg de meting Revenue % Total Country toe en maak deze vervolgens op als een percentage met twee decimalen. Voeg de nieuwe meting toe aan het matrix-besturingselement.

Een afbeelding toont een matrix-besturingselement met de titel Reseller Revenue has Group, Country en Region gegroepeerd in de rijen, en een samenvatting van Revenue, Revenue % Total Region en Revenue % Total Country. Alleen de waarden voor Revenue % Total Country voor de United States zijn niet 100%.

U ziet dat alle waarden, met uitzondering van de waarden voor regio’s in de Verenigde Staten, 100 procent zijn. De reden hiervoor is dat bij het bedrijf Adventure Works de Verenigde Staten regio's heeft, terwijl alle andere landen die niet hebben.

Notitie

Modellen in tabelvorm bieden geen ondersteuning voor onregelmatige hiërarchieën, wat hiërarchieën met variabele diepten zijn. Daarom hebben ontwerpen vaak de gewoonte om bovenliggende waarden op lagere niveaus van de hiërarchie te herhalen. Zo heeft bijvoorbeeld Australië geen regio, en dus wordt de landwaarde herhaald als de regionaam. Het is altijd beter om een betekenisvolle waarde in plaats van BLANK op te slaan.

Het volgende voorbeeld is de laatste meting die u gaat maken. Voeg de meting Revenue % Total Group toe en maak deze vervolgens op als een percentage met twee decimalen. Voeg de nieuwe meting vervolgens toe aan het matrix-besturingselement.

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

Een afbeelding toont een matrix-besturingselement met de titel Reseller Revenue has Group, Country en Region gegroepeerd in de rijen, en een samenvatting van Revenue, Revenue % Total Region, Revenue % Total Country en Revenue % Total Group.

Wanneer u filters verwijdert uit de kolommen Region en Country in de tabel Sales Territory, berekent de meting de regio-omzet als een verhouding van de omzet van de groep.

Filters behouden

U kunt de DAX-functie KEEPFILTERS gebruiken als een filterexpressie in de functie CALCULATE om filters te behouden.

Als u wilt weten hoe u deze taak kunt uitvoeren, gaat u naar pagina 1 van het rapport. Wijzig vervolgens de definitie van de meting Revenue Red om de functie KEEPFILTERS te gebruiken.

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

Een afbeelding toont een tabelbesturingselement met drie kolommen: Color, Revenue en Revenue Red. Er worden negen rijen en een totaal weergegeven. Voor Revenue Red zijn alleen de rij Red en het totaal niet BLANK.

In het tabelbesturingselement ziet u dat er slechts één waarde voor Revenue Red bestaat. De reden hiervoor is dat de Booleaanse filterexpressie bestaande filters voor de kolom Color in de tabel Product. De reden waarom andere kleuren dan rood BLANK zijn, is omdat de filtercontexten en de filterexpressies worden gecombineerd voor deze twee filters. De kleuren zwart en rood worden doorkruist en omdat beide niet tegelijk TRUE kunnen zijn, wordt de expressie door geen productrijen gefilterd. Het is alleen mogelijk dat beide rode filters op hetzelfde moment TRUE kunnen zijn, wat verklaart waarom de ene waarde voor Revenue Red wordt weergegeven.

Inactieve relaties gebruiken

Een inactieve modelrelatie kan alleen filters doorgeven wanneer de DAX-functie USERELATIONSHIP als een filterexpressie wordt doorgegeven aan de functie CALCULATE. Wanneer u deze functie gebruikt om een inactieve relatie te gaan gebruiken, wordt de actieve relatie automatisch inactief.

Bekijk een voorbeeld van een definitie van een meting die gebruikmaakt van een inactieve relatie om de meting Revenue te berekenen per verzenddatum:

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

Relatiegedrag wijzigen

U kunt het gedrag van de modelrelatie wijzigen wanneer een expressie wordt geëvalueerd door de DAX-functie CROSSFILTER door te geven als een filterexpressie voor de functie CALCULATE. Dit is een geavanceerde functie.

Met de functie CROSSFILTER kunt u filterrichtingen (van beide naar één of van één naar beide) wijzigen en zelfs een relatie uitschakelen.