Partilhar via


Use SELECTEDVALUE em vez de VALUES

Como modelador de dados, às vezes talvez seja necessário escrever uma expressão DAX que teste se uma coluna é filtrada por um valueespecífico.

Em earlier versões do DAX, este requisito foi alcançado com segurança usando um padrão envolvendo três funções DAX; IF, HASONEVALUEandVALUES. A seguinte definição measure apresenta um exemplo. Ele calcula o valor do imposto sobre vendas, mas apenas para vendas feitas a clientes australianos.

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

No exemplo, a função retorna somente quando um único da coluna País-Região é visível no contexto atual. Quando é TRUE, a função VALUES é comparada com o texto literal "Austrália". Quando a função retorna , as Vendas são multiplicadas por 0,10 (representando 10%). If a função HASONEVALUE retorna FALSE—porque mais de uma valuefilters coluna, a função firstIF retorna BLANK.

O uso do HASONEVALUE é uma técnica defensiva. É necessário porque é possível que haja múltiplas colunas valuesfilter na coluna de País-Região . Nesse caso, a função VALUES retorna uma tabela de várias linhas. A comparação de uma tabela de várias linhas com um escalar value resulta num error.

Recomendação

Recomenda-se a utilização da função SELECTEDVALUE. Ele alcança o mesmo resultado que o padrão descrito neste artigo, mas de forma mais eficiente and elegante.

Usando a função SELECTEDVALUE, o exemplo measure definição now é reescrito.

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

Dica

É possível passar um resultado alternativo value para a função SELECTEDVALUE. O resultado alternativo value é retornado quando nenhum filters— nem múltiplos filters—or são aplicados à coluna.