Después de la entrega anterior donde vimos que podemos hacer cambios en la evaluación del contexto con FILTER, ALL y CALCULATE vamos a explorar este último a fondo para terminar de comprender su utilización. Recordemos la sintaxisCALCULATE ( <expresión>, <filtro1>, <filtro2>, <filtro3>, …)

  • El resultado de CALCULATE es la evaluación de la expresión representada por el primer parámetro.
  • La expresión se evalúa según el contexto modificado por los filtros pasados por parámetro. La clave es que estos filtros pueden ampliar o reducir el filtro de contexto.

La expresión debe de ser una función de agregación. Recordar que una función de agregación “X” se utiliza cuando no es solo una columna, sino una operación entre varias de ellas. Imaginemos la siguiente PivotTable y su tabla de datos de PowerPivot

Para este caso, tenemos el filtro de “Colección”. Si en algún momento nos interesa tener el total de cantidades sin tener este filtro en cuenta, podríamos tenerlo de la siguiente forma

CALCULATE (SUM (Compra[Cantidad]), ALL (Compra[Colección]))

Con lo que el resultado que tendríamos sería:

Si nosotros le añadimos el atributo talla podemos ver el siguiente comportamiento:

Vemos como para la “Suma Cantidad” se tienen en cuenta los filtros de “Coleccion” y “Talla”. Para el calculo Cantidad sin colección, gracias a Calculate, se da la suma de tallas sin tener en cuenta la colección. Si nosotros creamos dos medidas que sean:

Solo XL Calculate: =CALCULATE(Sum(Compra[Cantidad]),Compra[Talla] = “XL”)

Solo XL Filter: = CALCULATE(Sum(Compra[Cantidad]),FILTER(ALL(Compra[Talla]),Compra[Talla]=»XL”))

Tenemos expresiones equivalentes como podemos ver en la PivotTable

Definamos el comportamiento de Calculate de la siguiente forma:

  • La función CALCULATE aplica un calculo (el primer parámetro) para cada una de las celdas, considerando el filtro resultante obtenido, remplazándolo por lo filtrado (los siguientes argumentos) y el filtro de contexto.
  • En el ejemplo superior, se hace una suma de la cantidad donde se filtra por la talla XL y posteriormente por el filtro de contexto, que es la colección (Calculo “Solo XL Calculate)
  • Cada filtro en CALCULATE puede ser un filtro de tabla o un filtro de columna.
  • Véase las dos medidas anteriores, donde en el primer calculate tenemos un filtro de columna y en el segundo un filtro de tabla
  • Un filtro de columna solo tiene valores para una sola columna y es definido utilizando un filtro booleano o una función que devuelva una sola columna de tabla
  • Un filtro de tabla puede tener múltiples valores para mas de una columna y es definido utilizando una función que devuelva una tabla con mas de una columna
  • Por ejemplo esta medida: =SUMX(FILTER(Compra,Compra[Talla]=”L”&&Compra[Coleccion]=”Invierno”)) se esta haciendo un filtro a la tabla compra para que solo incluya las tallas= L y la colección de invierno. Dando el siguiente resultado en la PivotTable

  • Cada filtro se calcula individualmente en el conjunto de filtros de CALCULATE
  • Si una columna es especificada en un filtro (dentro de CALCULATE) y esta columna esta dentro del filtro de contexto, se cambia dicho filtro de contexto por el nuevo definido.
  • Esto explica porqué cuando en la primera expresión, cambiamos el contexto mediante ALL(Compra), el filtro de contexto de Colección se pierde
  • Si una expresión de filtro devuelve devuelve mas columnas es un filtro de tabla. La función CALCULATE considera solo filas de tabla que al menos tengan una fila concordante con el filtro de tabla
  • Si una columnas es especificada en en varios filtros, el resultado es la intersección de ambos valores
  • Se opera como un AND
  • Una vez se calculan todos los filtros, la intersección de estos determina el contexto de la expresión pasado como primer parámetro en CALCULATE

Nos vemos.

Sergio

 

Fuentes

1. Funciones de Información

2. How Calculate Works

 

Índice de contenidos

I. Evaluando
el contexto en PowerPivot

II. SUMX.
Operaciones de Agregacion dependientes del contexto

III. Funcion
ALL, FILTER, CALCULATE

IV. Calculate a fondo

V. EARLIER

 

Últimas entradas de Sergio Carrillo (ver todo)