Compartir a través de


Usar SELECTEDVALUE en lugar de VALUES

Como modelador de datos, a veces es posible que necesite escribir una DAX expresión que compruebe si una columna está filtrada por un valor específico.

En versiones anteriores de DAX, este requisito se lograba de forma segura mediante el uso de un patrón que implicaba tres funciones: DAX, IF, HASONEVALUE y VALUES. La siguiente definición de medida presenta un ejemplo. Calcula el importe fiscal de ventas, pero solo para las ventas realizadas a los clientes australianos.

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

En el ejemplo, la HASONEVALUE función devuelve TRUE solo cuando un único valor de la columna Country-Region está visible en el contexto de filtro actual. Cuando es TRUE, la VALUES función se compara con el texto literal "Australia". Cuando la VALUES función devuelve TRUE, la medida Sales se multiplica por 0,10 (que representa 10%). Si la HASONEVALUE función devuelve FALSE,porque más de un valor filtra la columna, la primera IF función devuelve BLANK.

El uso de HASONEVALUE es una técnica defensiva. Es necesario porque es posible que varios valores filtren la columna Country-Region . En este caso, la VALUES función devuelve una tabla de varias filas. Comparar una tabla de varias filas con un valor escalar produce un error.

Recomendación

Se recomienda usar la SELECTEDVALUE función . Logra el mismo resultado que el patrón descrito en este artículo, pero de forma más eficaz y elegante.

Al usar la función SELECTEDVALUE, la definición de la medida de ejemplo ha sido reescrita.

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

Sugerencia

Es posible pasar un valor de resultado alternativo a la SELECTEDVALUE función . El valor de resultado alternativo se devuelve cuando no se aplica ningún filtro (o varios filtros) a la columna.