一.CALCULATE语法如下:
CALCULATE( <expression>, <filter1>, <filter2>… )
二.前头写明,CALCULATE的运行机制可以归纳如下:
1.CALCULATE 函数基于当前上下文应用第二个参数起( <filter1>, <filter2>…)所有筛选器对(计算字段<expression>)每个单元格使用第一个参数进行计算。
2.每个筛选器可以是对单列或多列的。
3.每列都在 CALCULATE 函数的等效 FILTER 表达式中独立计算。
4.如果 CALCULATE 函数的等效 FILTER 表达式对某列存在筛选,这将覆盖 / 替换当前筛选上下文位于该列的筛选器(例如透视表的筛选)。
5.如果等效 FILTER 表达式返回多列,每一列都有独立的结果。
6.如果某列在不同的等效 FILTER 表达式结果中均有返回,该列的最终筛选结果是交集。
7.在所有等效 FILTER 计算后,这些被筛选的列的交集形成了 CALCULATE 第一个参数计算的上下文。
三.测试前准备工作:
四.开始查看calculate的特性:
all函数清除Name列的筛选,但是Color列的筛选还是存在的
4.png
第二个布尔表达式的过滤条件覆盖了透视表的筛选条件,选出Car
5.png
两个布尔表达式过滤条件的交集
6.png
前面两个布尔表达式过滤条件的等效写法
7.png
Color列的筛选被替换,选出Green,人名和Green共同筛选出结果
8.png
前面等效的公式写法
9.png
利用values函数保持透视表的筛选上下文
10.png
filter和values两个过滤条件筛选结果的交集
11.png
all('Demo')清除整张表的筛选条件,透视表的人名和颜色实际上都被清除覆盖为Green
12.png
filter的第一个参数是整张表,将保持整个透视表的筛选环境
13.png
filter保持整张表的筛选环境,再增加条件,得出筛选结果的交集
14.png
前面公式的等效写法
15.png