(三) 判断维度筛选
1. Allselected
根据选择筛选的维度进行计算(忽略未选择的维度),不会生成事实表。
A. 语法
ALLSELECTED ( [TableNameOrColumnName] )
参数描述TableNameOrColumnName表或者列名
B. 返回
表
C. 注意事项
- 带参数时可以作为表达式用
- 不带参数时只能用于Calculate和CalculateTable中
D. 作用
只针对被筛选的维度进行计算。
E. 案例
![3d9b80189f43e487999589425ff21cc8.png](https://i-blog.csdnimg.cn/blog_migrate/ff0b1cd957eeeaa85890962fcbad80fd.jpeg)
平均成绩Allselect:=Calculate(Average('表1'[成绩]),AllSelected())平均成绩Allselect_教师:=Calculate(Average('表1'[成绩]),AllSelected('表1'[教课老师]))平均成绩Allselect_学科:=Calculate(Average('表1'[成绩]),AllSelected('表1'[学科]))平均成绩Allselect_filter教师:=Calculate(Average('表1'[成绩]),Filter( AllSelected('表1'[教课老师]), '表1'[教课老师]="张老师" || '表1'[教课老师]="王老师" || '表1'[教课老师]="陈老师"))
看看这3个函数的差异及效果。
- 我们先来看 平均成绩AllSelect这个度量。
平均成绩Allselect:=Calculate(Average('表1'[成绩]),AllSelected())
![956005cb85d77ce4a69fa77856502dc7.png](https://i-blog.csdnimg.cn/blog_migrate/efa0ca3313df8fe99f6861353b306f74.jpeg)
解释:
因为AllSelect只涉及选择筛选器的计算,平均成绩AllSelect,未使用参数,在未选择筛选的时候效果和AllSelect('表1')一样,实际上的效果是把字段置于透视表中的筛选位置。而且因为默认已选择任何全部的筛选条件,此时的效果和单独放入一个平均成绩一样。
![cf82b234e87b8a2b4c21829427ae2f20.png](https://i-blog.csdnimg.cn/blog_migrate/3cc4b40c69a8a9c07a817bf41f317dbb.jpeg)
此时的度量计算的结果就是数学的平均成绩。如果我们想知道数学和英语的这两门课的综合平均分呢?则在切片器中选择数学和英语即可。
![edf6a114a1140177b70fb16109e67ca7.png](https://i-blog.csdnimg.cn/blog_migrate/190010c62d134a9333c43baaf2280342.jpeg)
相当于(数学汇总70+英语汇总66.67)/2=68.33。
- 接下来我们来看下后面二个度量 平均成绩Allselect_教师和 平均成绩Allselect_学科。
平均成绩Allselect_教师:=Calculate(Average('表1'[成绩]),AllSelected('表1'[教课老师]))平均成绩Allselect_学科:=Calculate(Average('表1'[成绩]),AllSelected('表1'[学科]))
这个度量只不过在使用AllSelect的时候,添加了列的参数。我们来看下和之前函数的差异。这里我们看下一共选择了2个含维度的AllSelect度量(学科和老师)。
![93717bc2f5922ca9774c777629628f2b.png](https://i-blog.csdnimg.cn/blog_migrate/70a2dc57318771229b4cac5740b47e8e.jpeg)
解释:我们理解只针对筛选器选则的内容产生的效果进行计算。AllSelect()代表所有产生的筛选都要进行计算。怎么去判断所产生的筛选呢?我们只需要看透视表所显示出来的字段信息即可。
被选择的维度有:学科(数学,英语);姓名(全部),教课老师(王老师,张老师,陈老师)
![5d828892cddf24683c6c1749e424690e.png](https://i-blog.csdnimg.cn/blog_migrate/5d89df66845e5c000139e7fe559232b9.jpeg)
解释:
被选择的维度有:学科(数学,英语根据实际切片来定),教课老师(全部),姓名(全部)
![19c3790a334b4d1ae9711911cbbf3d66.png](https://i-blog.csdnimg.cn/blog_migrate/9fdfd5d2e5ce2775f2e5bff782a862d5.jpeg)
解释:外部筛选的学科存在,平均成绩AllSelect_学科是不对学科进行筛选,因为AllSelect代表了全部选择。所以学科的维度就不会再做筛选。
被选中的维度有:教课老师(根据行列实际情况筛选),学科(全部),姓名(根据行列实际情况筛选)
从上面的实例中我们大致了解了其构成的原因。那我们把姓名这个字段同时放进来,并同时选择了李四和王五:
![5052b9529db83b2e33dcafb0e4e140a1.png](https://i-blog.csdnimg.cn/blog_migrate/4f8c8db5822cee8d99c5ca4a66bab06f.jpeg)
解释:这个是AllSelect(),所有被选择的都需要进行筛选计算。
被筛选的维度:姓名(李四,王五),学科(数学,英语),教课老师(王老师,陈老师)。
![87c53dfab4f3e2490bddcb44cef17a58.png](https://i-blog.csdnimg.cn/blog_migrate/0ae7a588cf1dd7ed31f32ad152489c80.jpeg)
![d61db0d9f3da5a8b5364c3f49c911509.png](https://i-blog.csdnimg.cn/blog_migrate/1187c74e7a8ff8163f2ea4410c7ed76a.jpeg)
这样我们看到,因为是AllSelected('表1'[教课老师]),所以教师是被全部选择。同理AllSelected('表1'[学科]),学科相当于全部选择没有被筛选。
- 最后我们来看下平均成绩Allselect_filter教师这个度量
平均成绩Allselect_filter教师:=Calculate(Average('表1'[成绩]),Filter( AllSelected('表1'[教课老师]), '表1'[教课老师]="张老师" || '表1'[教课老师]="王老师" || '表1'[教课老师]="陈老师"))
解释:
我们看,因为通过Filter首先把教课老师给过滤掉了李老师,而李老师对应着张三和李四的语文课。
![598fc4c39a875ad9ae9dbbfb09a48930.png](https://i-blog.csdnimg.cn/blog_migrate/8169afa7e07b83db89749fefc455cea1.jpeg)
所以被过滤掉的,就会用空值显示。而最后的总计求的平均值也是根据显示的数据来进行计算。
![3643b6dc66e148e3c843975da12283d6.png](https://i-blog.csdnimg.cn/blog_migrate/9c9babd4afa73979259cf60b6f2a7c8e.jpeg)
AllSelect和All筛选器函数的差异
我们在来看个案例:
All产品名称求和:=Calculate(Sum('表4'[销售额]),All('表4'[销售额])AllSelect产品名称求和:= Calculate(Sum('表4'[销售额]),AllSelect('表4'[销售额])
![96fc62afe5710ee4f18439eb9c66def0.png](https://i-blog.csdnimg.cn/blog_migrate/af3b60124e73484e019cb7fb51856901.jpeg)
解释:AllSelect(维度)只计算被选择的维度产品,而All(维度)则会计算全部被选中产品所属的维度所属的全部产品。
![4b78678135709d1c97aae6993a0c594f.gif](https://i-blog.csdnimg.cn/blog_migrate/1f11e6fa8d78694ccddd34052368a551.gif)
请点个赞,转发分享给更多的人。