Examinar el contexto de filtro
La función VALUES
de DAX permite que las fórmulas determinen qué valores se encuentran en el contexto de filtro.
La sintaxis de la función VALUES
es la siguiente:
VALUES(<TableNameOrColumnName>)
La función requiere pasar una referencia de tabla o una referencia de columna. Cuando se pasa una referencia de tabla, devuelve un objeto de tabla con las mismas columnas que contienen filas para lo que está en el contexto de filtro. Cuando se pasa una referencia de columna, devuelve una tabla de una sola columna con valores únicos que se encuentran en el contexto del filtro.
La función siempre devuelve un objeto de tabla y es posible que una tabla contenga varias filas. Por lo tanto, para comprobar si un valor específico está en el contexto de filtro, la fórmula debe comprobar primero que la función VALUES
devuelve una sola fila. Dos funciones pueden ayudarle a realizar esta tarea: las funciones HASONEVALUE
y SELECTEDVALUE
de DAX.
La función HASONEVALUE
devuelve TRUE
cuando una referencia de columna determinada se ha filtrado a un valor único.
La función SELECTEDVALUE
simplifica la tarea de determinar lo que puede ser un único valor. Cuando la función pasa una referencia de columna, devolverá un valor único, o cuando haya más de un valor en el contexto de filtro, devolverá BLANK, o un valor alternativo que se pasa a la función.
En el ejemplo siguiente, usará la función HASONEVALUE
. Agregue la siguiente medida, que calcula la comisión de ventas, a la tabla Sales. Tenga en cuenta que, en Adventure Works, la tarifa de la comisión es el 10 % de los ingresos de todos los países y regiones, excepto Estados Unidos. En Estados Unidos, el personal de ventas gana una comisión del 15 %. Dé formato a la medida como moneda con dos posiciones decimales y, luego, agréguela a la tabla que se encuentra en la Página 3 del informe.
Sales Commission =
[Revenue]
* IF(
HASONEVALUE('Sales Territory'[Country]),
IF(
VALUES('Sales Territory'[Country]) = "United States",
0.15,
0.1
)
)
Tenga en cuenta que el resultado total de Sales Commission es BLANK. La razón es que hay varios valores en el contexto de filtro para la columna Country de la tabla Sales Territory. En este caso, la función HASONEVALUE
devuelve FALSE
, lo que da lugar a que se multiplique la medida Revenue por BLANK (un valor multiplicado por BLANK es BLANK). Para generar un total, debe usar una función de iterador, que se explica más adelante en este módulo.
Otras tres funciones que puede usar para probar el estado del filtro son:
-
ISFILTERED
: devuelveTRUE
cuando una referencia de columna pasada se filtra directamente. -
ISCROSSFILTERED
: devuelveTRUE
cuando una referencia de columna pasada se filtra indirectamente. Una columna tiene un filtro cruzado cuando un filtro aplicado a otra columna de la misma tabla o de una tabla relacionada afecta a la columna de referencia filtrándola. -
ISINSCOPE
: devuelveTRUE
cuando una referencia de columna pasada es el nivel de una jerarquía de niveles.
Vuelva a la Página 2 del informe y, a continuación, modifique la definición de la medida Revenue % Total Country para comprobar que la columna Region de la tabla Sales Territory está en el ámbito. Si no está en el ámbito, el resultado de la medida debe ser BLANK.
Revenue % Total Country =
VAR CurrentRegionRevenue = [Revenue]
VAR TotalCountryRevenue =
CALCULATE(
[Revenue],
REMOVEFILTERS('Sales Territory'[Region])
)
RETURN
IF(
ISINSCOPE('Sales Territory'[Region]),
DIVIDE(
CurrentRegionRevenue,
TotalCountryRevenue
)
)
En el objeto visual de matriz, observe que los valores de Revenue % Total Country ahora solo se muestran cuando una región está en el ámbito.