Delen via


Gebruik SELECTEDVALUE in plaats van VALUES

Als gegevensmodeller moet u soms een DAX expressie schrijven waarmee wordt getest of een kolom wordt gefilterd op een specifieke waarde.

In eerdere versies van DAXwerd deze vereiste veilig bereikt met behulp van een patroon met drie DAX functies; IF, HASONEVALUE en VALUES. In de volgende metingsdefinitie ziet u een voorbeeld. Het berekent het btw-bedrag, maar alleen voor verkopen aan Australische klanten.

Australian Sales Tax =
IF(
    HASONEVALUE(Customer[Country-Region]),
    IF(
        VALUES(Customer[Country-Region]) = "Australia",
        [Sales] * 0.10
    )
)

In het voorbeeld retourneert de functie HASONEVALUE alleen TRUE wanneer één waarde van de kolom Land-regio zichtbaar is in de huidige filtercontext. Wanneer het TRUE, wordt de functie VALUES vergeleken met de letterlijke tekst 'Australië'. Wanneer de functie VALUESTRUEretourneert, wordt de meting Verkoop vermenigvuldigd met 0,10 (10%). Als de functie HASONEVALUEFALSEretourneert, omdat meer dan één waarde de kolom filtert, retourneert de eerste IF functie BLANK.

Het gebruik van de HASONEVALUE is een defensieve techniek. Dit is vereist omdat het mogelijk is dat meerdere waarden de kolom land-regio filteren. In dit geval retourneert de functie VALUES een tabel met meerdere rijen. Als u een tabel met meerdere rijen vergelijkt met een scalaire waarde, resulteert dit in een fout.

Aanbeveling

Het is raadzaam om de functie SELECTEDVALUE te gebruiken. Het bereikt hetzelfde resultaat als het patroon dat in dit artikel wordt beschreven, maar efficiënter en eleganter.

Met behulp van de functie SELECTEDVALUE wordt de definitie van de voorbeeldmeting nu herschreven.

Australian Sales Tax =
IF(
    SELECTEDVALUE(Customer[Country-Region]) = "Australia",
    [Sales] * 0.10
)

Tip

Het is mogelijk om een alternatieve resultaatwaarde in de SELECTEDVALUE functie door te geven. De alternatieve resultaatwaarde wordt geretourneerd wanneer er geen filters (of meerdere filters) worden toegepast op de kolom.