Filtercontext wijzigen

Voltooid

U kunt de DAX-functie CALCULATE gebruiken om de filtercontext in uw formules te wijzigen. De syntaxis voor de functie CALCULATE is als volgt:

CALCULATE(<expression>, [[<filter1>], <filter2>]…)

De functie vereist dat een expressie wordt doorgegeven die een scalaire waarde retourneert en zoveel filters als u nodig hebt. De expressie kan een meting (ofwel een benoemde expressie) zijn of een expressie die in de filtercontext kan worden geëvalueerd.

Filters kunnen Booleaanse expressies of tabelexpressies zijn. Het is ook mogelijk om filterwijzigingsfuncties door te geven die extra controle bieden wanneer u de filtercontext wijzigt.

Wanneer u meerdere filters hebt, worden deze geëvalueerd met behulp van de AND logische operator, wat betekent dat alle voorwaarden op hetzelfde moment moeten zijn TRUE .

Notitie

De CALCULATETABLE DAX-functie voert precies dezelfde functionaliteit uit als de CALCULATE functie, behalve dat hiermee de filtercontext wordt gewijzigd die wordt toegepast op een expressie die een tabelobject retourneert. In deze module wordt in de uitleg en voorbeelden de CALCULATE functie gebruikt, maar houd er rekening mee dat deze scenario's ook van toepassing kunnen zijn op de CALCULATETABLE functie.

Booleaanse expressiefilters toepassen

Een Booleaanse expressiefilter is een expressie die of evalueert TRUEFALSE. De volgende regels gelden voor Booleaanse filters:

  • Ze kunnen slechts naar één kolom verwijzen.
  • Ze kunnen niet verwijzen naar metingen.
  • Ze kunnen geen functies gebruiken die een tabel scannen of retourneren die aggregatiefuncties bevat, zoals SUM.

In dit voorbeeld maakt u een meting. Download en open eerst het bestand Adventure Works DW 2020 M06.pbix. Voeg vervolgens de volgende meting toe aan de tabel Sales waarmee de meting Revenue wordt gefilterd met behulp van een Boole-expressiefilter voor rode producten.

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

Voeg de meting Revenue Red toe aan het besturingselement van de tabel dat te vinden is op pagina 1 van het rapport.

Een afbeelding toont een tabel met drie kolommen: Region, Revenue en Revenue Red. In de tabel worden 10 rijen en een totaal weergegeven.

In dit volgende voorbeeld wordt de meting Revenue door de volgende meting gefilterd op meerdere kleuren. Let op het gebruik van de IN operator gevolgd door een lijst met kleurwaarden.

Revenue Red or Blue = CALCULATE([Revenue], 'Product'[Color] IN {"Red", "Blue"})

De volgende meting filtert de meting Revenue op dure producten. Dure producten zijn producten met een catalogusprijs van meer dan USD 1000.

Revenue Expensive Products = CALCULATE([Revenue], 'Product'[List Price] > 1000)

Tabelexpressiefilters toepassen

Een tabelexpressiefilter past een tabelobject als een filter toe. Dit kan een verwijzing naar een modeltabel zijn. Het is echter waarschijnlijk een DAX-functie waarmee een tabelobject wordt geretourneerd.

Meestal gebruikt u de FILTER DAX-functie om complexe filtervoorwaarden toe te passen, waaronder voorwaarden die niet kunnen worden gedefinieerd door een Booleaanse filterexpressie. De FILTER functie wordt geclasseerd als een iterator-functie. Daarom geeft u een tabel of tabelexpressie door en een expressie die moet worden geëvalueerd voor elke rij van die tabel.

De FILTER functie retourneert een tabelobject met precies dezelfde structuur als een object dat door de tabel is doorgegeven. De rijen zijn een subset van de rijen die zijn doorgegeven, wat betekent dat de rijen waarin de expressie wordt geëvalueerd als TRUE.

In het volgende voorbeeld ziet u een tabelfilterexpressie die gebruikmaakt van de FILTER functie:

Revenue High Margin Products =
CALCULATE(
    [Revenue],
    FILTER(
        'Product',
        'Product'[List Price] > 'Product'[Standard Cost] * 2
    )
)

In dit voorbeeld filtert de FILTER functie alle rijen van de tabel Product die zich in de filtercontext bevinden. Elke rij voor een product waarvan de catalogusprijs meer dan twee keer hoger is dan de standaardkosten, wordt weergegeven als een rij van de gefilterde tabel. Daarom wordt de meting Omzet geëvalueerd voor alle producten die door de FILTER functie worden geretourneerd.

Alle filterexpressies die aan de CALCULATE functie worden doorgegeven, zijn tabelfilterexpressies. Een Booleaanse filterexpressie is een steno-opmaak waarmee u de schrijf- en leeservaring kunt verbeteren. Intern worden Booleaanse filterexpressies door Microsoft Power BI omgezet naar tabelfilterexpressies. Dit is de manier waarop uw definitie van de meting Revenue Red wordt omgezet.

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

Filtergedrag

Er treden twee mogelijke standaardresultaten op wanneer u filterexpressies toevoegt aan de CALCULATE functie:

  • Als de kolommen (of tabellen) zich niet in de filtercontext bevinden, worden nieuwe filters toegevoegd aan de filtercontext om de CALCULATE expressie te evalueren.
  • Als de kolommen (of tabellen) zich al in de filtercontext bevinden, worden de bestaande filters overschreven door de nieuwe filters om de CALCULATE expressie te evalueren.

In de volgende voorbeelden ziet u hoe het toevoegen van filterexpressies aan de CALCULATE functie werkt.

Notitie

In elk van de voorbeelden worden geen filters toegepast op het tabelbesturingselement.

Net als bij de vorige activiteit is de meting Revenue Red meting toegevoegd aan een tabelbesturingselement dat groepeert per regio en omzet weergeeft.

Een afbeelding toont een tabel met drie kolommen: Region, Revenue en Revenue Red. In de tabel worden 10 rijen en een totaal weergegeven.

Omdat er geen filter wordt toegepast op de kolom Kleur in de tabel Product , voegt de evaluatie van de meting een nieuw filter toe aan de filtercontext. In de eerste rij is de waarde van $ 2.681.324,79 voor rode producten die in de regio Australië zijn verkocht.

Als u de eerste kolom van de tabelvisual overschakelt van Regio naar Kleur , krijgt u een ander resultaat omdat de kolom Kleur in de tabel Product zich nu in de filtercontext bevindt.

Een afbeelding toont een tabel met drie kolommen: Color, Revenue en Revenue Red. In de tabel worden 10 rijen en een totaal weergegeven. De waarde voor Revenue Red is hetzelfde voor elke rij.

De formule Revenue Red evalueert de meting Revenue door een filter toe te voegen op de kolom Kleur (op rood) in de tabel Product . Als gevolg hiervan overschrijft de metingformule, in dit besturingselement dat groepeert op kleur, de filtercontext met een nieuw filter.

Dit resultaat is mogelijk wel of niet wat u wilt. In de volgende eenheid wordt de KEEPFILTERS DAX-functie geïntroduceerd. Dit is een functie voor het wijzigen van filters die u kunt gebruiken om filters te behouden in plaats van ze te overschrijven.