Undersøk filterkontekst
VALUES
DAX-funksjonen lar formlene bestemme hvilke verdier som er i filterkontekst.
Syntaksen VALUES
for funksjonen er som følger:
VALUES(<TableNameOrColumnName>)
Funksjonen krever at du sender inn en tabellreferanse eller en kolonnereferanse. Når du sender inn en tabellreferanse, returneres den et tabellobjekt med de samme kolonnene som inneholder rader for det som er i filterkonteksten. Når du sender inn en kolonnereferanse, returnerer den en enkeltkolonne-tabell med unike verdier som er i filterkontekst.
Funksjonen returnerer alltid et tabellobjekt, og det er mulig for en tabell å inneholde flere rader. Hvis du vil teste om en bestemt verdi er i filterkontekst, må formelen først teste at funksjonen returnerer én VALUES
enkelt rad. To funksjoner kan hjelpe deg med å utføre denne oppgaven: HASONEVALUE
og SELECTEDVALUE
DAX-funksjonene.
Funksjonen HASONEVALUE
returnerer TRUE
når en gitt kolonnereferanse er filtrert ned til én enkelt verdi.
Funksjonen SELECTEDVALUE
forenkler oppgaven med å bestemme hva én enkelt verdi kan være. Når funksjonen sendes inn i en kolonnereferanse, returnerer den en enkeltverdi. Når mer enn én verdi er i filterkontekst, returnerer den BLANK (eller en alternativ verdi når du sender til funksjonen).
I eksemplet nedenfor skal du bruke HASONEVALUE
funksjonen. Legg til følgende mål, som beregner salgsprovisjon, i Salg-tabellen . Vær oppmerksom på at i Adventure Works er provisjonssatsen 10 prosent av omsetningen for alle land/regioner unntatt USA. I USA får selgerne 15 prosent provisjon. Formater målet som valuta med to desimalplasser, og legg det deretter til i tabellen som du finner på Side 3 i rapporten.
Sales Commission =
[Revenue]
* IF(
HASONEVALUE('Sales Territory'[Country]),
IF(
VALUES('Sales Territory'[Country]) = "United States",
0.15,
0.1
)
)
Legg merke til at totalen for Salgsprovisjon-resultatet er BLANK. Årsaken er at flere verdier er i filterkontekst for Land-kolonnen i Salgsterritorium-tabellen . I dette tilfellet HASONEVALUE
returnerer FALSE
funksjonen , noe som resulterer i at Omsetning-målet multipliseres med BLANK (en verdi multiplisert med BLANK er BLANK). For å produsere en total må du bruke en gjentakelsesfunksjon. Dette forklarer vi senere i denne modulen.
Det finnes for øvrig tre andre funksjoner du kan bruke til å teste filtertilstand:
-
ISFILTERED
– ReturnererTRUE
når en innsendt kolonnereferanse filtreres direkte . -
ISCROSSFILTERED
– ReturnererTRUE
når en innsendt kolonnereferanse er indirekte filtrert. En kolonne er kryssfiltrert når et filter som brukes i en annen kolonne i den samme tabellen, eller i en relatert tabell, påvirker referansekolonnen ved å filtrere den. -
ISINSCOPE
– ReturnererTRUE
når en innsendt kolonnereferanse er nivået i et hierarki av nivåer.
Gå tilbake til side 2 i rapporten, og endre deretter måldefinisjonen omsetning i % for land for å teste at Område-kolonnen i salgsdistrikttabellen er i omfanget. Hvis det ikke er innenfor omfanget, skal resultatet for målet være BLANK.
Revenue % Total Country =
VAR CurrentRegionRevenue = [Revenue]
VAR TotalCountryRevenue =
CALCULATE(
[Revenue],
REMOVEFILTERS('Sales Territory'[Region])
)
RETURN
IF(
ISINSCOPE('Sales Territory'[Region]),
DIVIDE(
CurrentRegionRevenue,
TotalCountryRevenue
)
)
Legg merke til at verdiene i Total omsetning i % for land i matrisevisualobjektet nå bare vises når et område er innenfor omfanget.