calculate-见解 5

数据源:
file
关系视图:
file
先来个基础度量值:

数量 的总和:=SUM([数量])

接下来我在产品表里添加一个计算列:

=CALCULATE([数量 的总和],FILTER(ALL('表2'[产品]),'表2'[产品]="A"))

结果图:
file
为什么是这个结果前面基本已经讲过了,内部筛选器和外部筛选器存在相同的列,所以内部列覆盖了外部列
在这里ALL('表2'[产品])仅仅是表的意思,没有其他的概念,
继续改造计算列:

=CALCULATE(CALCULATE([数量 的总和],FILTER(ALL('表2'[产品]),'表2'[产品]="A")))

结果图:
file
细心的读者可能发现没有如何变化,是的,但是内部概念发生了变化,
第一个calculate只有一个外部筛选器,内部没有筛选器,第二个calculate 有二个筛选器,一个是第一个calculate传递过来外部产品筛选器,第二个筛选器是第二个calculate自带的内部筛选器FILTER(ALL('表2'[产品]),'表2'[产品]="A"),由于第一个calculate的筛选器具有优先计算的权限,先计算了内部筛选器FILTER(ALL('表2'[产品]),'表2'[产品]="A")的all('表2'[列]),结果被all给拒绝了筛选,所以最后还是一个筛选器,计算了第一参数[数量 的总和],
总结all(表[列])在这里有二个功能,一个是忽略外部筛选器,一个是表功能,这些细微的变化常常被初学者忽略了,让我们用values测试一下,

=CALCULATE([数量 的总和],FILTER(VALUES('表2'[产品]),'表2'[产品]="A"))

结果图:
file
继续改造计算列:

=CALCULATE(CALCULATE([数量 的总和],FILTER(VALUES('表2'[产品]),'表2'[产品]="A")))

file
第一步凸显了values表现出接受筛选功能,第二步表现表功能,这是一个发现,至少颠覆了我的认识观!
all(列)和values(列)同时叠加了二个功能,我很是兴奋不已.