SELECTEDVALUE gebruiken 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 DAX werd deze vereiste veilig bereikt met behulp van een patroon met drie DAX-functies; ALS, 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. Als de waarde WAAR is, wordt de functie VALUES vergeleken met de letterlijke tekst 'Australië'. Wanneer de functie VALUES TRUE retourneert, wordt de meting Verkoop vermenigvuldigd met 0,10 (10%). Als de functie HASONEVALUE ONWAAR retourneert, omdat meer dan één waarde de kolom filtert, retourneert de eerste functie ALS BLANK.

Het gebruik van de HASONEVALUE is een defensieve techniek. Dit is vereist omdat het mogelijk is dat meerdere waarden de kolom Country-Region 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 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 door te geven aan de functie SELECTEDVALUE. De alternatieve resultaatwaarde wordt geretourneerd wanneer er geen filters (of meerdere filters) worden toegepast op de kolom.