Uso de funciones modificadoras de filtro
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.
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.
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
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.
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.
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
)
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")
)
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.