CALCULATE

La función CALCULATE evalúa una expresión en un contexto que es modificado por los filtros que se incluyen como argumentos.

Sintaxis

CALCULATE(
    expression,
    filter1,
    filter2...
)

Parámetros
  • expression: Expresión a evaluar.
  • filter1filter2...: Argumentos opcionales. Lista de expresiones booleanas o expresiones de tabla que definen filtros a aplicar a expression.
Valor devuelto

La función CALCULATE devuelve el valor definido por expression tras modificar el contexto de acuerdo a los filtros incluidos como argumentos.

Información adicional

Si la expresión a evaluar es de tipo booleano, ésta no puede hacer referencia a una medida, ni usar la función CALCULATE anidada, ni usar funciones iterativas (de escaneo de una tabla) ni funciones que devuelvan una tabla.

Para cada columna que se incluya en los argumentos de la función, cualquier filtro que exista en dicha columna se obviará y en su lugar se aplicará el filtro representado en el argumento. Esto significa que aquellos filtros impuestos por el contexto que contradigan los filtros de CALCULATE serán ignorados.

En el caso de existir más de un filtro en la función, éstos se aplicarán independientemente a los datos. Es decir, se les aplica un "Y" lógico de forma que una fila de los datos fuente deberá cumplir todos los filtros para ser considerada en el cálculo. En el caso de que se necesite aplicar un "O" lógico a los filtros, puede usarse el operador ||:

= CALCULATE(expression, filter1 || filter2)

...en cuyo caso una fila será considerada en el cálculo cuando satisfaga la condición impuesta por filter1 o cuando satisfaga la impuesta por filter2. En este caso, los filtros deberán evaluar una misma columna: no es posible que un filtro imponga una condición evaluando una columna y que el segundo filtro imponga una condición evaluando otra columna diferente.

Cuando se desee añadir como filtro una comparación compleja (del tipo [columna] = [medida], [columna] = <fórmula>, [columna] = [columna], etc.) -expresiones que no se permiten como argumento en CALCULATE- deberá recurrirse a la función FILTER.

Ejemplos

Si definimos la medida Ventas como la suma de la columna SalesAmount:

Ventas = SUM(FactSales[SalesAmount])

...podemos crear una nueva medida basada en la función CALCULATE que modifique el contexto de cálculo de forma que únicamente consideren las ventas del año 2008:

Ventas 2008 = CALCULATE([Ventas], DimDate[CalendarYear]=2008)

En la siguiente imagen se muestra una visualización (en la parte superior) de tipo "gráfico de columnas apiladas" en la que se ha llevado la medida Ventas al campo Value y el campo Datekey al campo Axis de la visualización. A continuación se muestra una visualización tipo "card" con la medida Ventas 2008 y, por último, se crea una visualización semejante a la primera pero llevando la medida Ventas 2008 al campo Value. Como puede observarse, solo se muestran en ésta datos relativos al año 2008:

Función CALCULATE: Ejemplo de uso

Si deseamos calcular las ventas anteriores a cierta fecha, podemos usar la función CALCULATE añadiendo el filtro adecuado. Para mostrar este ejemplo, definimos la siguiente medida:

Ventas anteriores = CALCULATE(
    [Ventas],
    FactSales[DateKey]<=DATE(2007,1,2)
)

...que añade como filtro la condición de que la fecha de venta sea anterior o igual al 2 de enero de 2007. En la siguiente imagen se muestra una visualización con formato de tabla de las ventas ordenadas por día, y una visualización tipo tarjeta con la medida Ventas anteriores:

Función CALCULATE: Ejemplo de uso

Puede apreciarse como el resultado de la medida coincide con la suma de las ventas de los días 1 y 2 de enero.

Si quisiéramos calcular las ventas entre dos fechas, por ejemplo entre el 3 y el 4 de enero (ambas incluidas), podríamos definir la siguiente medida:

Ventas anteriores = CALCULATE(
    [Ventas],
    FactSales[DateKey]>=DATE(2007,1,3),
    FactSales[DateKey]<=DATE(2007,1,4)
)

...dando como resultado:

Función CALCULATE: Ejemplo de uso

La suma resultante coincide con la de las ventas de los días 3 y 4 de enero.

Si la función CALCULATE recibe como argumento de filtro una tabla, la expresión será evaluada solo para los datos contenidos en la tabla. Por ejemplo, si utilizamos la función DATESBETWEEN para extraer una tabla de una única columna conteniendo un conjunto de fechas, la expresión será evaluada solo para dichas fechas:

Ventas anteriores = CALCULATE(
    [Ventas],
    DATESBETWEEN(
        FactSales[DateKey],
        DATE(2007,1,3),
        DATE(2007,1,5)
    )
)

Función CALCULATE: Ejemplo de uso

Funciones relacionadas
Categoría
Filtro
Enviado por admin el Mar, 04/12/2018 - 11:13