Hoy vamos a continuar hablando de contextos en Expresiones DAX, ya vimos: contexto de filas y contexto de columnas, así es que ahora vamos a centrarnos en el contexto de filtro.
El contexto de filtro es el conjunto de valores permitido en cada columna, basado en las restricciones de filtro que se aplicaron a la fila o que se han definido por expresiones de filtro dentro de la fórmula. El contexto del filtro se agrega al especificar las restricciones de filtro en el conjunto de valores permitido en una columna o tabla, utilizando los argumentos para una fórmula. Este contexto se aplica sobre otros contextos, como el contexto de la fila o el de la consulta.
En nuestro ejemplo vamos a utilizar, entre otras cosas, la función CALCULATE(). Esta función es muy popular entre las medidas. Las medidas tienen contexto de consulta como estuvimos viendo antes provocado por los filtros, por ejemplo: filtros de informe y/o filtros de etiquetas de filas y/o columnas y/o segmentadores Verticales u Horizontales. Todos ellos cambian el contexto en el que se muestra la medida en la tabla dinámica. Las medidas se reevalúan cada vez que cambia el contexto y esto puede ser bueno para nosotros, o no. CALCULATE se encarga de darnos el control que necesitamos, porque nos deja controlar de qué forma los filtros afectan las medidas, a través de una función, o creando un filtro nuevo que cambie el contexto.
Y una vez más, regresamos a nuestro ejemplo para demostrar este tipo de contexto.
Caso 1: Sin Filtro
CALCULATE admite como parámetros una expresión y de forma opcional, uno o más filtros. En nuestro caso, la expresión es la misma que ya teníamos: SUM(DetalleOrden[Importe]) y en este caso no utilizaremos ningún filtro, de tal forma que quedará el valor como antes.
Caso 2: Con Filtro ALL
Vamos a crear una nueva medida en la que aplicamos un filtro que rompa el contexto de consulta que se aplique.
Esta es la expresión: MedidaSumaImporteALL:=CALCULATE(SUM(DetalleOrden[Importe]);ALL(Orden))
Vemos ahora en la tabla dinámica y comprobamos que en una consulta sin filtros no hay diferencias
Aplicamos filtro sobre las etiquetas, por ejemplo de filas. En este caso, volvemos a obtener el mismo resultado para las dos columnas. El contexto de consulta a aplicado un filtro a una columna de la tabla Producto que no está afectado por el filtro All.
Ahora vamos a agregar un segmentador o slicer, que nos va a funcionar como filtro; pero que además, deja visibles las opciones disponibles. Como hicimos antes, filtramos por Territorio igual a Australia
Aquí ya empezamos a notar el efecto del contexto de filtro, porque la medida MedidaSumaImporteALL no se ve afectada por el filtro aplicado a Territorios, esto se debe a que Territorios se relaciona con Ordenes por lo que al tomar todas las órdenes no se refleja el filtro aplicado a los Territorios.
Por último, vamos a crear un filtro desde la lista de campos de la tabla dinámica, por LineaProducto, como hicimos antes.
El filtro se vuelve a aplicar, y se aplicará para cualquier tabla que esté fuera del alcance del filtro aplicado.
Sólo nos queda mostrar que se pueden aplicar varios filtros a la vez y que si seleccionamos MedidaSumaImporteTodoALL:=CALCULATE(SUM(DetalleOrden[Importe]);ALL(Orden);ALL(Producto))
Entonces, una tabla dinámica calcula sus valores para cada celda según los encabezados de columna y fila, tal como se describe en la sección anterior en el contexto de la consulta. Sin embargo, dentro de las medidas o las columnas calculadas que agrega a la tabla dinámica, puede especificar las expresiones de filtro para controlar los valores que utiliza la fórmula. También puede borrar de forma selectiva los filtros en columnas específicas.
Además de ALL(), que establece el contexto dentro de una fórmula, con CALCULATE(), para definir contextos de filtro se puede utilizar la función FILTER(), que permite especificar las filas a incluir en el contexto actual, y ALLEXCEPT() para borrar selectivamente y aplicar filtros dentro de las fórmulas, ya que permite quitar todos los filtros excepto uno que especifique.
De esta forma, hemos visto el efecto que tiene la aplicación de contextos en DAX. Hablamos de contexto de fila, contexto de consulta y contexto de filtro. En la próxima entrada vamos a continuar viendo el Lenguaje de expresiones DAX a través de funciones que trabajan sobre las relaciones de tablas, me refiero a: RELATED(), RELATEDTABLE() y USERELATIONSHIP().
Buenos dias, Soy nuevo en este campo del DAX. Me gustaria saber que tipo de funcion emplear si quiero que la medida no se me afecte por un filtro que ponga en un segmento de datos.
Ejemplo: La BD que manejo tiene informacion de los años 2019 y 2020. en segmentacion de datos tengo estos dos años y tengo una mediad para identificar las ofertas presentadas del personal pero deseo ver el acumulado de estas ofertas presentadas y al seleccionar cualquiera de los años mencionados, me muestra solo las ofertas presentadas del año seleccionado.
Como puedo hacer para que esa medida me muestra el acumulado de ofertas presentadas y que la segmentación de datos no me afecte el resultado?
Me gustaMe gusta