CALCULATETABLE
在已修改的筛选器上下文中计算表表达式。
语法
CALCULATETABLE(<expression>[, <filter1> [, <filter2> [, …]]])
parameters
术语 | 定义 |
---|---|
表达式 | 要进行求值的表表达式。 |
filter1, filter2,… | (可选)定义筛选器或筛选器修饰符函数的布尔表达式或表表达式。 |
用作第一个参数的表达式必须是模型表或返回表的函数。
筛选器可为:
- 布尔筛选表达式
- 表筛选表达式
- 筛选器修改函数
当存在多个筛选器时,将使用 AND 逻辑运算符对它们进行计算。 这意味着所有条件都必须同时为 TRUE。
布尔筛选表达式
布尔表达式筛选器是计算结果为 TRUE 或 FALSE 的表达式。 必须遵守下面几项规则:
- 它们只能引用单个列。
- 它们不能引用度量值。
- 它们不能使用嵌套的 CALCULATE 函数。
从 Power BI Desktop 的 2021 年 9 月版本开始,以下内容同样适用:
- 它们不能使用扫描或返回表的函数,除非作为参数传递给聚合函数。
- 它们可以包含返回标量值的聚合函数。
表筛选表达式
表表达式筛选器将表对象应用为筛选器。 它可以是对模型表的引用,但更有可能是返回表对象的函数。 可使用 FILTER 函数应用复杂的筛选条件,包括不能由布尔筛选表达式定义的条件。
筛选器修饰符函数
通过筛选器修饰符函数,不仅仅可以添加筛选器。 它们还在修改筛选器上下文时为你提供额外的控制。
函数 | 用途 |
---|---|
REMOVEFILTERS | 删除所有筛选器,删除表的一列或多列中的筛选器,或者删除单个表的所有列中的筛选器。 |
ALL1、ALLEXCEPT、ALLNOBLANKROW | 删除一列或多列中的筛选器,或者删除单个表的所有列中的筛选器。 |
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 |