Examinar el contexto de filtro

Completado

La función VALUES permite que sus fórmulas determinen qué valores están 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 probar si un valor específico está en el contexto de filtro, la fórmula debe primero probar si la función VALUES devuelve una sola fila. Hay dos funciones que pueden ayudar con esta tarea: las funciones HASONEVALUE y SELECTEDVALUE.

La función HASONEVALUE devuelve TRUE cuando una referencia de columna determinada se ha filtrado a un único valor.

La función SELECTEDVALUE simplifica la tarea de determinar qué podría ser un valor único. Cuando se pasa una referencia de columna a la función, devuelve un único valor; cuando hay más de un valor en el contexto de filtro, devuelve BLANK (o un valor alternativo que se pasa a la función).

En el siguiente ejemplo, usaremos la función HASONEVALUE. Añada la siguiente medida, que calcula la comisión de ventas, a la tabla Sales. En Adventure Works, la tasa de comisión es del 10 % de los ingresos para todos los países o regiones, excepto para 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, añádala 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
        )
    )

Captura de pantalla de una tabla con las columnas Region, Revenue y Sales Commission; la columna Revenue tiene un total, mientras que Sales Commission está en BLANK

Observe que el resultado de la medida total de Sales Commission es BLANK. La razón es que hay varios valores en el contexto de filtro para la columna Country en la tabla Sales Territory. En este caso, la función HASONEVALUE devuelve FALSE, lo que da como resultado que la medida Revenue se multiplique por BLANK (un valor multiplicado por BLANK es BLANK). Para producir un total, debe usar una función iteradora, lo que se explica más adelante en este módulo.

Hay otras tres funciones que puede usar para probar el estado del filtro:

  • ISFILTERED: devuelve TRUE cuando la referencia de una columna pasada se haya filtrado directamente.
  • ISCROSSFILTERED: devuelve TRUE cuando la referencia de una columna pasada se haya filtrado 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: devuelve TRUE cuando una referencia de columna pasada es el nivel en una jerarquía de niveles.

Vuelva a la página 2 del informe y modifique la definición de la medida Revenue % Total Country para probar que la columna Region en la tabla Sales Territory esté dentro del á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
        )
    )

Captura de pantalla de la matriz actualizada, por lo que ahora los resúmenes totales de grupos están en BLANK