Uso de funciones modificadoras de filtro

Completado

Mediante la función CALCULATE, puede pasar funciones de modificación de filtro, con las que podrá hacer más cosas que solo con la adición de filtros.

Quitar filtros

Use la función REMOVEFILTERS como una expresión de filtro CALCULATE a fin de eliminar filtros del contexto de filtro. Puede quitar filtros de una o varias columnas o de todas las columnas de una única tabla.

Nota

La función REMOVEFILTERS es relativamente nueva. En versiones anteriores de DAX, los filtros se eliminaban con la función ALL o con variantes de esta, como las funciones ALLEXCEPT y ALLNOBLANKROW. Estas funciones se comportan como modificadores de filtro y como funciones que devuelven objetos de tabla de valores distintos. Estas funciones se mencionan ahora porque es probable que encuentre ejemplos de documentación y fórmulas que las usen para quitar filtros.

En el siguiente ejemplo, añadirá una nueva medida a la tabla Sales que evalúa la medida Revenue, pero eliminando filtros de la tabla Sales Territory. Dé formato a la medida como moneda con dos números decimales.

Revenue Total Region = CALCULATE([Revenue], REMOVEFILTERS('Sales Territory'))

Ahora, añada la medida Revenue Total Region al objeto visual de matriz que se encuentra en la página 2 del informe. El objeto visual de matriz se agrupará por tres columnas de la tabla Sales Territory en las filas Group, Country y Region.

Captura de pantalla de la matriz, con todos los valores iguales para todas las filas en la columna Revenue Total Region

Como puede ver, el valor de la medida Revenue Total Region es el mismo. Es el valor de los ingresos totales.

Aunque este resultado no sea útil, como se usa como un denominador en una proporción, calcula un porcentaje del total general. Por tanto, ahora sobrescribirá la definición de la medida Revenue Total Region con la siguiente definición. Esta nueva definición cambia el nombre de la medida y declara dos variables. Cambie el formato de la medida a un porcentaje con dos números decimales.

Revenue % Total Region =
VAR CurrentRegionRevenue = [Revenue]
VAR TotalRegionRevenue =
    CALCULATE(
        [Revenue],
        REMOVEFILTERS('Sales Territory')
    )
RETURN
    DIVIDE(
        CurrentRegionRevenue,
        TotalRegionRevenue
    )

Compruebe que el objeto visual de matriz muestre ahora los valores de Revenue % Total Region.

Captura de pantalla con valores únicos por región en la columna Revenue y una nueva columna

Ahora creará otra medida, pero esta vez calculará el coeficiente de ingresos de una región dividido por los ingresos de su país o región.

Antes de completar esta tarea, tenga en cuenta que el valor de Revenue % Total Region para la región del suroeste es del 22,95 %. Analice el contexto de filtro de esta celda. Cambie a la vista de datos y, en el panel Datos, seleccione la tabla Sales Territory.

Aplique los siguientes filtros de columna:

  • Group: Norteamérica
  • Country: Estados Unidos
  • Region: Sudoeste

Captura de pantalla del panel de datos con filtros para las tres columnas, tal y como se ha descrito

Observe que los filtros reducen la tabla a una sola fila. Ahora, mientras piensa en el nuevo objetivo para crear una relación entre los ingresos de la región y los ingresos de su país, borre el filtro de la columna Region.

Captura de pantalla del menú contextual de columna; el comando Borrar filtros está resaltado

Como puede ver, ahora hay cinco filas y todas pertenecen al país Estados Unidos. Por lo tanto, al borrar los filtros de la columna Region y conservar los filtros de las columnas Country y Group, tendrá un nuevo contexto de filtro para el país de la región.

En la siguiente definición de medida, observe cómo puede borrar o quitar un filtro de una columna. En la lógica DAX, esto es un cambio pequeño en la fórmula de la medida Revenue % Total Region: ahora, la función REMOVEFILTERS elimina los filtros de la columna Region en lugar de todas las columnas de la tabla Sales Territory.

Revenue % Total Country =
VAR CurrentRegionRevenue = [Revenue]
VAR TotalCountryRevenue =
    CALCULATE(
        [Revenue],
        REMOVEFILTERS('Sales Territory'[Region])
    )
RETURN
    DIVIDE(
        CurrentRegionRevenue,
        TotalCountryRevenue
    )

Añada la medida Revenue % Total Country a la tabla Sales y aplique el formato de porcentaje con dos decimales. Añada la nueva medida al objeto visual de matriz.

Captura de pantalla que muestra la matriz con valores individuales para cada región, con un total del 100 %

Observe que todos los valores, excepto los valores de las regiones de Estados Unidos, son del 100 %. La razón es que, en la empresa Adventure Works, Estados Unidos tiene regiones, a diferencia de los demás países o regiones.

Nota

Los modelos tabulares no admiten jerarquías desequilibradas, es decir, jerarquías con profundidades variables. Por lo tanto, es habitual repetir valores primarios, u otros valores antecesores, en los niveles inferiores de la jerarquía. Por ejemplo, Australia no tiene una región, por lo que el valor del país/región se repite como el nombre de la región. Siempre es mejor almacenar un valor significativo en lugar de BLANK.

El ejemplo siguiente es la última medida que creará. Añada la medida Revenue % Total Group y aplique el formato de porcentaje con dos decimales. Luego, añada la nueva medida al objeto visual de matriz.

Revenue % Total Group =
VAR CurrentRegionRevenue = [Revenue]
VAR TotalGroupRevenue =
    CALCULATE(
        [Revenue],
        REMOVEFILTERS(
            'Sales Territory'[Region],
            'Sales Territory'[Country]
        )
    )
RETURN
    DIVIDE(
        CurrentRegionRevenue,
        TotalGroupRevenue
    )

Captura de pantalla donde ahora se ve la matriz con una columna de resumen Revenue % Total Group

Al quitar los filtros de las columnas Region y Country en la tabla Sales Territory, la medida calcula los ingresos de la región como una proporción de los ingresos de su grupo.

Conservar filtros

Puede usar la función KEEPFILTERS como una expresión de filtro en la función CALCULATE para conservar los filtros.

Para ver cómo llevar a cabo esta tarea, vaya a la página 1 del informe. A continuación, modifique la definición de la medida Revenue Red para usar la función KEEPFILTERS.

Revenue Red =
CALCULATE(
    [Revenue],
    KEEPFILTERS('Product'[Color] = "Red")
)

Captura de pantalla de una tabla con Colors, Revenue y Revenue Red; Revenue Red solo devuelve resultados cuando el color es rojo

Observe que, en el objeto visual de tabla, solo hay un valor de medida Revenue Red. Esto se debe a que la expresión de filtro booleana conserva los filtros existentes en la columna Color de la tabla Product. El motivo por el que los colores distintos al rojo son BLANK es que los contextos de filtro y las expresiones de filtro se combinan para estos dos filtros. Los colores negro y rojo se intersecan y, dado que no es posible que ambos sean TRUE al mismo tiempo, la expresión no se filtra por ninguna fila de producto. Solo es posible que ambos filtros rojos sean TRUE al mismo tiempo, lo que explica por qué aparece el único valor Revenue Red.

Uso de relaciones inactivas

Una relación de modelo inactiva solo puede propagar filtros cuando la función USERELATIONSHIP se pasa como una expresión de filtro a la función CALCULATE. Cuando se usa esta función para interactuar con una relación inactiva, la relación activa se convierte automáticamente en inactiva.

A continuación, tiene un ejemplo de una definición de medida que usa una relación inactiva para calcular la medida Revenue por fechas de envío:

Revenue Shipped =
CALCULATE (
    [Revenue],
    USERELATIONSHIP('Date'[DateKey], Sales[ShipDateKey])
)

Modificar el comportamiento de las relaciones

Puede modificar el comportamiento de las relaciones del modelo cuando una expresión se evalúa pasando la función CROSSFILTER como una expresión de filtro a la función CALCULATE. Se trata de una funcionalidad avanzada.

La función CROSSFILTER puede modificar las direcciones del filtro (de ambos a uno o de uno a ambos) y hasta deshabilitar una relación.