Uso de funciones modificadoras de filtro
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 DAX 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 DAX ALL
o con variantes de esta, como las funciones DAX 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.
Como puede ver, el valor de 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. Asegúrese de dar formato a la medida como un porcentaje con dos 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.
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 Campos, seleccione la tabla Sales Territory.
Aplique los filtros siguientes filtros de columna:
- Group: Norteamérica
- Country: Estados Unidos
- Region: Suroeste
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.
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 filtros 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, 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 aplíquele el formato de porcentaje con dos decimales. Añada 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 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
)
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 DAX 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")
)
Observe que, en el objeto visual de tabla, solo hay 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 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 DAX 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 al evaluar una expresión pasando la función DAX 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.