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.
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.
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
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.
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.
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
)
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")
)
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.
Hulp nodig? Raadpleeg onze gids voor probleemoplossing of geef specifieke feedback door een probleem te melden.