CALCULATE
Se aplica a:Columna calculadaTabla calculadaMedidaCálculo visual
Evalúa una expresión en un contexto de filtro modificado.
Nota
También está la función CALCULATETABLE. Hace exactamente lo mismo, salvo que modifica el contexto de filtro aplicado a una expresión que devuelve un objeto de tabla.
Sintaxis
CALCULATE(<expression>[, <filter1> [, <filter2> [, …]]])
Parámetros
Término | Definición |
---|---|
expression | Expresión que se va a evaluar. |
filter1, filter2,… | (Opcional) Expresiones booleanas o expresiones de tabla que definen filtros o funciones de modificador de filtro. |
La expresión usada como primer parámetro es esencialmente la misma que una medida.
Los filtros pueden ser:
- Expresiones de filtro booleanas
- Expresiones de filtro de tabla
- Funciones de modificación de filtro
Cuando hay varios filtros, se pueden evaluar mediante el operador lógicoAND (&&), lo que significa que todas las condiciones deben ser verdaderas, o bien el operador lógico OR (||), lo que significa que cualquiera de las condiciones puede ser true.
Expresiones de filtro booleanas
Un filtro de expresión booleana es una expresión que se evalúa como TRUE o FALSE. Hay varias reglas que deben cumplir lo siguiente:
- Deben hacer referencia a columnas de una sola tabla.
- No pueden hacer referencia a medidas.
- No pueden usar una función CALCULATE anidada.
A partir de la versión de septiembre de 2021 de Power BI Desktop, también se aplica lo siguiente:
- No pueden usar funciones que analicen o devuelvan una tabla a menos que se pasen como argumentos a las funciones de agregación.
- Pueden contener una función de agregación que devuelve un valor escalar. Por ejemplo:
Total sales on the last selected date = CALCULATE ( SUM ( Sales[Sales Amount] ), 'Sales'[OrderDateKey] = MAX ( 'Sales'[OrderDateKey] ) )
Expresión de filtro de tabla
Un filtro de expresión de tabla aplica un objeto de tabla como un filtro. Podría ser una referencia a una tabla de modelo, pero lo más probable es que sea una función que devuelva un objeto de tabla. Puede usar la función FILTER para aplicar condiciones de filtro complejas, incluidas las que no se pueden definir mediante una expresión de filtro booleana.
Funciones de modificador de filtro
Las funciones del modificador de filtro permiten hacer algo más que simplemente agregar filtros. Proporcionan un control adicional al modificar el contexto de filtro.
Función | Finalidad |
---|---|
REMOVEFILTERS | Quitar todos los filtros, o los filtros de una o varias columnas de una tabla o de todas las columnas de una sola tabla. |
ALL1, ALLEXCEPT, ALLNOBLANKROW | Quitar los filtros de una o varias columnas, o de todas las columnas de una sola tabla. |
KEEPFILTERS | Agregar un filtro sin quitar los existentes en las mismas columnas. |
USERELATIONSHIP | Activar una relación inactiva entre las columnas relacionadas, en cuyo caso la relación activa se convertirá automáticamente en inactiva. |
CROSSFILTER | Modificar la dirección del filtro (de ambas a única o de única a ambas) o deshabilitar una relación. |
1 La función ALL y sus variantes se comportan como modificadores de filtro y como funciones que devuelven objetos de tabla. Si la herramienta admite la función REMOVEFILTERS, es mejor usarla para quitar filtros.
Valor devuelto
Valor que es el resultado de la expresión.
Comentarios
Cuando se proporcionan expresiones de filtro, la función CALCULATE modifica el contexto de filtro para evaluar la expresión. Cuando la expresión de filtro no está incluida en la función KEEPFILTERS, para cada expresión de filtro hay dos posibles resultados estándar:
- Si las columnas (o tablas) no están en el contexto de filtro, para evaluar la expresión se agregarán filtros nuevos al contexto de filtro.
- Si las columnas (o tablas) ya están en el contexto de filtro, para evaluar la expresión CALCULATE los filtros nuevos sobrescribirán los existentes.
La función CALCULATE usada sin filtros alcanza un requisito específico. Realiza la transición del contexto de fila al contexto de filtro. Es necesario cuando una expresión (no una medida de modelo) que resume los datos del modelo debe evaluarse en el contexto de fila. Este escenario puede producirse en una fórmula de columna calculada o cuando se evalúa una expresión en una función de iterador. Tenga en cuenta que, cuando se usa una medida de modelo en el contexto de fila, la transición de contexto es automática.
Esta función no se admite para su uso en el modo DirectQuery cuando se utiliza en columnas calculadas o en reglas de seguridad de nivel de fila (RLS).
Ejemplos
La definición de medida de la tabla Sales siguiente genera un resultado de ingresos, pero solo para los productos en color azul.
Los ejemplos de este artículo se pueden usar con el modelo de ejemplo de Power BI Desktop de Adventure Works DW 2020. Para obtener el modelo, vea Modelo de ejemplo de DAX.
Blue Revenue =
CALCULATE(
SUM(Sales[Sales Amount]),
'Product'[Color] = "Blue"
)
Category | Sales Amount | Ingresos en azul |
---|---|---|
Accessories | 1 272 057,89 USD | 165 406,62 USD |
Bikes | 94 620 526,21 USD | 8 374 313,88 USD |
Clothing | 2 117 613,45 USD | 259 488,37 USD |
Componentes | $11,799,076.66 | 803 642,10 USD |
Total | 109 809 274,20 USD | 9 602 850,97 USD |
La función CALCULATE evalúa la suma de la columna Sales Amount de la tabla Sales en un contexto de filtro modificado. Se agrega un nuevo filtro a la columna Color de la tabla Product, o bien el filtro sobrescribe cualquier filtro que ya se haya aplicado a la columna.
La siguiente definición de medida de la tabla Sales genera una relación de ventas sobre ventas en todos los canales de ventas.
Canal | Sales Amount | Porcentaje total de ingresos del canal |
---|---|---|
Internet | $29,358,677.22 | 26,74 % |
Reseller | $80,450,596.98 | 73,26 % |
Total | 109 809 274,20 USD | 100 % |
Revenue % Total Channel =
DIVIDE(
SUM(Sales[Sales Amount]),
CALCULATE(
SUM(Sales[Sales Amount]),
REMOVEFILTERS('Sales Order'[Channel])
)
)
La función DIVIDE divide una expresión que suma el valor de la columna Sales Amount de la tabla Sales (en el contexto de filtro) entre la misma expresión en un contexto de filtro modificado. La función CALCULATE modifica el contexto de filtro mediante la función REMOVEFILTERS, que es una función de modificador de filtro. Quita los filtros de la columna Channel de la tabla Sales Order.
En la siguiente definición de columna calculada de la tabla Customer se clasifican los clientes en una clase de fidelidad. Se trata de un escenario muy sencillo: Cuando los ingresos que genera el cliente son inferiores a 2500 USD, se clasifican como Low; de lo contrario, como High.
Customer Segment =
IF(
CALCULATE(SUM(Sales[Sales Amount]), ALLEXCEPT(Customer, Customer[CustomerKey])) < 2500,
"Low",
"High"
)
En este ejemplo, el contexto de fila se convierte en el contexto de filtro. Esto se conoce como transición de contexto. La función ALLEXCEPT quita los filtros de todas las columnas de la tabla Customer, excepto los de la columna CustomerKey.
Contenido relacionado
Contexto de filtro
Contexto de fila
Función CALCULATETABLE
Funciones de filtro