CALCULATETABLE

适用于:计算列计算表度量值视觉对象计算

在已修改的筛选器上下文中计算表表达式。

注意

还有 CALCULATE 函数。 它执行完全相同的功能,只不过它修改了应用于返回标量值的表达式的筛选器上下文

语法

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

parameters

术语 定义
表达式 要进行求值的表表达式。
filter1, filter2,… (可选)定义筛选器或筛选器修饰符函数的布尔表达式或表表达式。

用作第一个参数的表达式必须是模型表或返回表的函数。

筛选器可为:

  • 布尔筛选表达式
  • 表筛选表达式
  • 筛选器修改函数

当存在多个筛选器时,将使用 AND 逻辑运算符对它们进行计算。 这意味着所有条件都必须同时为 TRUE。

布尔筛选表达式

布尔表达式筛选器是计算结果为 TRUE 或 FALSE 的表达式。 必须遵守下面几项规则:

  • 它们只能引用单个列。
  • 它们不能引用度量值。
  • 它们不能使用嵌套的 CALCULATE 函数。

从 Power BI Desktop 的 2021 年 9 月版本开始,以下内容同样适用:

  • 它们不能使用扫描或返回表的函数,除非作为参数传递给聚合函数。
  • 它们可以包含返回标量值的聚合函数。

表筛选表达式

表表达式筛选器将表对象应用为筛选器。 它可以是对模型表的引用,但更有可能是返回表对象的函数。 可使用 FILTER 函数应用复杂的筛选条件,包括不能由布尔筛选表达式定义的条件。

筛选器修饰符函数

通过筛选器修饰符函数,不仅仅可以添加筛选器。 它们还在修改筛选器上下文时为你提供额外的控制。

函数 用途
REMOVEFILTERS 删除所有筛选器,删除表的一列或多列中的筛选器,或者删除单个表的所有列中的筛选器。
ALL1ALLEXCEPTALLNOBLANKROW 删除一列或多列中的筛选器,或者删除单个表的所有列中的筛选器。
KEEPFILTERS 添加筛选器,但不删除相同列上的现有筛选器。
USERELATIONSHIP 在相关列之间建立非活动关系,此时活动关系将自动变为非活动状态。
CROSSFILTER 修改筛选器方向(从双向到单向,或从单向到双向)或禁用关系。

1 ALL 函数及其变体既充当筛选器修饰符,又充当返回表对象的函数。 如果工具支持 REMOVEFILTERS 函数,则最好用它来删除筛选器。

返回值

值表。

备注

  • 提供筛选表达式后,CALCULATETABLE 函数将修改筛选器上下文来对表达式求值。 对于每个筛选表达式,当筛选表达式未包装在 KEEPFILTERS 函数中时,有两种可能的标准结果:

    • 如果列(或表)不在筛选器上下文中,则将向筛选器上下文添加新的筛选器来对表达式求值。
    • 如果列(或表)已在筛选器上下文中,则新筛选器将覆盖现有筛选器以计算 CALCULATETABLE 表达式。
  • 在已计算的列或行级安全性 (RLS) 规则中使用时,不支持在 DirectQuery 模式下使用此函数。

示例

下面的示例使用 CALCULATETABLE 函数获取 2006 年的 Internet 销售额总和。 此值之后用于计算 2006 年的 Internet 销售额与所有销售额的比率。

以下公式:

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

结果如下表所示:

行标签 Internet SalesAmount_USD CalculateTable 2006 Internet 销售额 Internet 销售额与 2006 年销售额的比率
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
总计 $26,054,827.45 $5,681,440.58 4.59