Uso de funciones modificadoras de filtro

Completado

Al usar la función CALCULATE, puede pasar las funciones modificadoras de filtro, que le permiten realizar otras operaciones, aparte de únicamente agregar filtros.

Quitar filtros

Use la función REMOVEFILTERS de DAX como una expresión de filtro CALCULATE para quitar 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 las versiones anteriores de DAX, los filtros se quitaban con las variantes o la función ALL de DAX, incluidas las funciones ALLEXCEPT y ALLNOBLANKROW de DAX. 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 ejemplo siguiente, agregará una medida a la tabla Sales que evalúa la medida Revenue, pero lo hace quitando los 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, agregue 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á en tres columnas de la tabla Sales Territory en las filas: Group, Country y Region.

Una imagen muestra una matriz titulada Reseller Revenue tiene Group, Country y Region agrupados en las filas, además de los resúmenes de Revenue y Revenue Total Region. El valor de Revenue Total Region es el mismo para cada grupo de filas.

Tenga en cuenta todos los valores de Revenue Total Region son los mismos. Se trata del valor de los ingresos totales.

Aunque este resultado no resulta ú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 medida Revenue Total Region con la siguiente definición. (Esta nueva definición cambia el nombre de la medida y declara dos variables. Asegúrese de dar formato a la medida como un porcentaje con dos posiciones 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 ahora muestra los valores de Revenue % Total Region.

Una imagen muestra un objeto visual de matriz titulado Reseller Revenue tiene Group, Country y Region agrupados en las filas, además de los resúmenes de Revenue y Revenue % Total Region.

Ahora, creará otra medida, pero esta vez, calculará la proporción de ingresos para una región dividida por los ingresos de su país.

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 %. Investigue el contexto de filtro de esta celda. Cambie a la vista de datos y, después, en el panel Campos, seleccione la tabla Sales Territory.

Aplique los filtros de columna siguientes:

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

Una imagen muestra los filtros de tabla de Power BI Desktop para la tabla Sales Territory. Los filtros se aplican a (1) Group = Norteamérica, (2) Country = Estados Unidos y (3) Region = Suroeste.

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

Una imagen muestra el menú contextual de columna, y el comando Borrar filtros está resaltado.

Observe que ahora existen cinco filas, y todas pertenecen al país Estados Unidos. En consecuencia, al borrar los filtros de columna Region, mientras se conserven los filtros de las columnas Country y Group, tendrá un nuevo contexto de filtro para el país de la región.

En la definición de medida siguiente, observe cómo puede borrar o quitar un filtro de una columna. En la lógica de DAX, se trata de un cambio pequeño y sutil que se realiza en la fórmula de medida Revenue % Total Region: La función REMOVEFILTERS ahora quita 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
    )

Agregue la medida Revenue % Total Country a la tabla Sales y, después, aplíquele formato como un porcentaje con dos posiciones decimales. Agregue la nueva medida al objeto visual de matriz.

Una imagen muestra un objeto visual de matriz titulado Reseller Revenue tiene Group, Country y Region agrupados en filas, además de los resúmenes de Revenue, Revenue % Total Region, y Revenue % Total Country. Solo los valores de Revenue % Total Country para Estados Unidos no son 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 compañía Adventure Works, Estados Unidos tiene regiones, mientras que todos los demás países no tienen.

Nota

Los modelos tabulares no admiten jerarquías desequilibradas, que son jerarquías con profundidades variables. Por lo tanto, se trata de un enfoque de diseño común para repetir valores primarios u otros elementos antecesores en los niveles inferiores de la jerarquía. Por ejemplo, Australia no tiene ninguna región, por lo que el valor del país y 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á. Agregue la medida Revenue % Total Group y, después, aplíquele formato como un porcentaje con dos posiciones decimales. Después, agregue 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
    )

Una imagen muestra un objeto visual de matriz titulado Reseller Revenue tiene Group, Country y Region agrupados en filas, además de los resúmenes de Revenue, Revenue % Total Region, Revenue % Total Country y Revenue % Total Group.

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

Conservar filtros

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

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

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

Una imagen muestra un objeto visual de tabla con tres columnas: Color, Revenue y Revenue Red. Se muestran nueve filas y el total. Para Revenue Red, solo la fila Red y el total son BLANK.

En el objeto visual de tabla, observe que solo existe un valor Revenue Red. La razón es 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 del rojo son BLANK es porque 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 ambos no pueden ser TRUE al mismo tiempo, la expresión no se filtra por ninguna fila de producto. Solo es posible que ambos filtros rojos puedan ser TRUE al mismo tiempo, lo que explica por qué se muestra un valor Revenue Red.

Usar relaciones inactivas

Una relación de modelo inactiva solo puede propagar los filtros cuando la función USERELATIONSHIP de DAX 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.

Revise 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 la relación de los modelos cuando se evalúa una expresión pasando la función CROSSFILTER de DAX 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 de los filtros (de ambos a uno o de uno a ambos) e incluso deshabilitar una relación.