CALCULATETABLE
计算修改后的筛选器上下文中的表表达式。
语法
CALCULATETABLE(<expression>[, <filter1> [, <filter2> [, …]]])
参数
术语 | 定义 |
---|---|
expression |
要计算的表表达式。 |
filter1, filter2,… |
(可选)定义筛选器或筛选修饰符函数的布尔表达式或表表达式。 |
用作第一个参数的表达式必须是模型表或返回表的函数。
筛选器可以是:
- 布尔筛选器表达式
- 表筛选器表达式
- 筛选器修改函数
当有多个筛选器时,将使用 AND逻辑运算符来计算它们。 这意味着所有条件都必须同时 TRUE
。
布尔筛选器表达式
布尔表达式筛选器是计算结果为 TRUE
或 FALSE
的表达式。 有几个规则必须遵守:
- 它们只能引用单个列。
- 它们不能引用度量值。
- 它们不能使用嵌套 CALCULATE 函数。
从 2021 年 9 月版 Power BI Desktop 开始,以下各项也适用:
- 除非将表作为参数传递给聚合函数,否则它们不能使用扫描或返回表的函数。
- 它们 可以 包含返回标量值的聚合函数。
表筛选器表达式
表表达式筛选器将表对象作为筛选器应用。 它可以是对模型表的引用,但更有可能是返回表对象的函数。 可以使用 FILTER 函数应用复杂筛选条件,包括布尔筛选器表达式无法定义的条件。
筛选器修饰符函数
筛选器修饰符函数允许你执行更多操作,而不仅仅是添加筛选器。 它们提供修改筛选器上下文时的其他控件。
功能 | 目的 |
---|---|
REMOVEFILTERS | 从表的一个或多个列或从单个表的所有列中删除所有筛选器或筛选器。 |
ALL 1、ALLEXCEPT、ALLNOBLANKROW | 从一个或多个列中删除筛选器,或者从单个表的所有列中删除筛选器。 |
KEEPFILTERS | 添加筛选器而不删除相同列上的现有筛选器。 |
USERELATIONSHIP | 在相关列之间参与非活动关系,在这种情况下,活动关系将自动变为非活动状态。 |
CROSSFILTER | 修改筛选器方向(从两者到单个或从一个到两者)或禁用关系。 |
1ALL 函数及其变体的行为既充当筛选器修饰符,又充当返回表对象的函数。 如果工具支持 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 Sales | 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 |