CALCULATETABLE

Evalúa una expresión de tabla en un contexto de filtro modificado.

Nota

También está la función CALCULATE. Hace exactamente lo mismo, salvo que modifica el contexto de filtro aplicado a una expresión que devuelve un valor escalar.

Sintaxis

CALCULATETABLE(<expression>[, <filter1> [, <filter2> [, …]]])

Parámetros

Término Definición
expression Expresión de tabla 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 debe ser una tabla de modelo o una función que devuelve una tabla.

Los filtros pueden ser:

  • Expresiones de filtro booleanas
  • Expresiones de filtro de tabla
  • Funciones de modificación de filtro

Cuando hay varios filtros, se evalúan mediante el operador lógico AND. Esto significa que todas las condiciones deben ser "true" a la vez.

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:

  • Solo pueden hacer referencia a una única columna.
  • 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.

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

Una tabla de valores.

Comentarios

  • Cuando se proporcionan expresiones de filtro, la función CALCULATETABLE 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 CALCULATETABLE los filtros nuevos sobrescribirán los existentes.
  • 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).

Ejemplo

En el ejemplo siguiente se usa la función CALCULATETABLE para obtener la suma de las ventas por Internet de 2006. Este valor se usa posteriormente para calcular la relación de ventas por Internet con respecto a todas las ventas del año 2006.

La fórmula siguiente:

= SUMX(
    CALCULATETABLE(
        'InternetSales_USD',
        'DateTime'[CalendarYear] = 2006
    ),
    [SalesAmount_USD]
)  

Da como resultado la tabla siguiente:

Etiquetas de fila Internet SalesAmount_USD CalculateTable 2006 Internet Sales Internet Sales to 2006 ratio
2005 2 627 031,40 $ 5 681 440,58 $ 0,46
2006 5 681 440,58 $ 5 681 440,58 $ 1.00
2007 8 705 066,67 $ 5 681 440,58 $ 1,53
2008 9 041 288,80 $ 5 681 440,58 $ 1,59
Total general 26 054 827,45 $ 5 681 440,58 $ 4.59