加入 PowerBI自己学 知识星球 可以:下载源文件,边学边练;遇到问题,提问交流,有问必答。
基本概念
筛选
对放在筛选器、切片器、视觉对象的行或列中的维度字段值进行选择就是筛选,筛选会对当前上下文中的视觉对象里的计算产生影响。
直接筛选
表的任意一列直接用于筛选,这个表就叫做被直接筛选了;某列直接用于筛选,这个列就叫做被直接筛选了,同表的其它列不叫直接筛选。
交叉筛选
由相关表的任意列筛选通过关系传递过来的对某表或某列的筛选,后者就叫做被间接筛选了;或者相同表的其他列筛选传递过来的对某列的筛选,后者就叫做被间接筛选了。直接筛选和间接筛选统称为交叉筛选。
筛选判断函数
1 ISCROSSFILTERED(<表名或列名>),判断参数表的任意列或者参数列是否被交叉筛选。参数可以是表或列。
2 ISFILTERED(<表名或列名>),判断参数表的任意列或者参数列是否被直接筛选。参数可以是表或列。
3 HASONEVALUE(<列名>),判断参数列是否只返回唯一值,支持交叉筛选。等价于:COUNTROWS(VALUES(<列名>)) = 1。参数只能是列。
4 HASONEFILTER(<列名>),判断参数列是否只返回唯一值,且该列被直接筛选。等价于:COUNTROWS(FILTERS(<列名>)) = 1。参数只能是列。
5 ISINSCOPE(<列名>),判断参数列是否被直接筛选,且该列必须位于层次结构的级别中。参数只能是列。
区别举例
模型
1 区别ISCROSSFILTERED和ISFILTERED
度量值
Sales = SUM('销售表'[销售数量])
Sales_Iscrossfiltered = IF(ISCROSSFILTERED('产品表'[产品]),[Sales],BLANK())
Sales_Isfiltered = IF(ISFILTERED('产品表'[产品]),[Sales],BLANK())
如果筛选品类表的品类-蔬菜,这个属于对产品表产品的间接筛选,所以,ISCROSSFILTERED的总计行仍然有值,ISFILTERED的总计行的返回空。
如果筛选产品表的产品,两者返回的结果相同。
2 区别HASONEVALUE,HASONEFILTER,ISINSCOPE
度量值
Sales_Hasonevalue = IF(HASONEVALUE('产品表'[产品]),[Sales],BLANK())
Sales_Hasonefilter = IF(HASONEFILTER('产品表'[产品]),[Sales],BLANK())
Sales_Isinscope = IF(ISINSCOPE('产品表'[产品]),[Sales],BLANK())
如果筛选品类表的品类-蔬菜,这个属于对产品表产品的间接筛选,而且因为蔬菜品类下仅有一个产品,所以,HASONEVALUE的总计行仍然有值,HASONEFILTER和ISINSCOPE的总计行返回空。
如果筛选产品表的产品-橘子,这个属于对产品表产品的直接筛选,选择了单一值,所以,HASONEVALUE和HASONEFILTER的总计行仍然有值,ISINSCOPE的总计行返回空。
应用举例
1 ISCROSSFILTERED和ISFILTERED不区分单选和复选,通常用于判断是否调用了筛选这个动作,就会用到条件判断+ISFILTERED,返回指定的值。比如:某个度量值仅到品类层面,如果对产品的切片器进行了筛选,这个度量值需要返回空。
Sales_For品类 = IF(ISFILTERED('产品表'[产品]),"仅显示品类销量",[Sales])
筛选品类,正常显示。
筛选产品,返回指定值。
2 在矩阵或表视觉对象中,总计不受行和列的筛选,矩阵的行小计或列小计的字段不出现在层次结构的下一级别上,利用这种特点,在度量值中配上条件判断+ISINSCOPE,就可以给总计、行小计或列小计设置单独的计算公式。比如:在品类和产品销量占比表中,品类行显示品类在总体的占比,产品行显示在品类中的占比。
%Sales =
SWITCH(TRUE(),
ISINSCOPE('产品表'[产品]),
DIVIDE([Sales], CALCULATE([Sales], ALLSELECTED('产品表'[产品]))),
ISINSCOPE('品类表'[品类]),
DIVIDE([Sales], CALCULATE([Sales], ALLSELECTED('品类表'[品类]))),
DIVIDE([Sales], CALCULATE([Sales], ALLSELECTED('产品表'[产品])))
)
3 在卡片图中,没有字段用于行、列、层级结构,相当于表或矩阵总计,如果需要上下文某字段只有单一值的时候,不管该字段是否被直接筛选,才返回结果,可以在度量值中配上条件判断+HASONEVALUE;
如果需要上下文中字段被直接筛选了且只有单一值的时候才返回结果,可以在度量值中配上条件判断+HASONEFILTER。
拓展
筛选函数还会有其他的应用场景,在度量值的计算过程中,可以根据视觉对象特点和所需筛选状态的严格程度,选择合适的筛选判断函数。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。