今天给大家分享下DAX函数中的ALL家族函数,学会了这个函数可以灵活的计算各种占比,废话不多讲,开说:
本文逻辑是按照先说函数语法再结合实例举例,再做的过程中会引入三个函数的使用
首先说all函数,这个用法比较简单,就是清除任何筛选器,返回一张没有筛选的表,一般是求占总计百分比
语法:all(表)或all(列)
返回:一张没有筛选的表,不作用于任何筛选器
注意事项:all函数如果引用同一张表的不同列时,写法all(表1列1,表1列2);如果引用不同表的列时,写法all(表1列1),all(表2列1),同样引用不同表时,写法all(表1),all(表2),用逗号“,”连接多条件清除筛选
案例:是模拟了一张各省各城市门店销售量的一张表
需求:城市和省份占总计占比
函数编写:
销售量=sum('销售数据'[数量])
all总计 = CALCULATE([销售量],ALL('地域表'))
all总计占比 = DIVIDE([销售量],[all总计])
逻辑讲解:
销售量很好理解,受此表行上下文影响,是每个城市(省份)的销售量
all总计中calculate条件中的all表是清除所有筛选器条件,也就是说不受此表筛选条件的影响,返回的是地域表整张表,结合calculate计算出总计销售量,然后用divide安全除法求占比
如果想要求城市占省份的占比呢,这就需要用到allexcept函数
allexcept函数使用
语法:allexcept(筛选表,筛选表中的列1,筛选表中的列2,..)
except:除...之外,除了指定的某列之外
返回:一张表筛选过的表,保留筛选列,其他筛选均删除,意思就是除了筛选列受筛选影响,其他都不受影响
需求:城市占省份的占比
函数编写:
销售量=sum('销售数据'[数量])
allexcept省份 = CALCULATE([销售量],ALLEXCEPT('地域表','地域表'[省份]))
allexcept城市占省份占比 = DIVIDE([销售量],[allexcept省份])
逻辑讲解:
allexcept省份度量值的筛选列是省份,意思就是除了省份可以按照筛选条件进行计算销售量外其他筛选均删除,所以直接均显示了省份的销售量,再根据sum求得的销售量,得出城市占省份占比
相信大家都看到了allexcept求得的城市占省份占比中省份占比是100%,如果想让省份按照筛选的省份总计显示的百分比呢,这就需要使用allselected函数
allselected函数使用
语法:allselected(表)或者allselected(列)
引用大佬总结是:清除内筛选器,保留外筛选器,效果是返回满足外侧筛选的所有行。内外侧筛选器通常由矩阵层级和切片器担任。
用处:直观占比,筛选哪些子类,子类占比是按筛选分类100%计算占比
需求:让内筛选省份按外筛选的省份总计显示百分比
函数编写:
销售量=sum('销售数据'[数量])
allselected筛选统计 = CALCULATE([销售量],ALLSELECTED('地域表'))
allselected筛选分类占总计 = DIVIDE([销售量],[allselected筛选统计])
逻辑讲解:内筛选省份是矩阵表中的,外筛选省份是切片器中自选的,矩阵表中的省份占三个省份湖北,吉林,江苏的销售量总计,内筛选器原本是所有省份每个城市的数据,使用了allselected函数后只剩切片器筛选的省份数据,内筛选销售量除以外筛选销售量得出占比
还记得
allexcept城市占省份占比 = DIVIDE([销售量],CALCULATE([销售量],ALLEXCEPT('地域表','地域表'[省份])))吧,学了allselected函数的话,还可以灵活使用,等同于
allexcept城市占省份占比2 = DIVIDE([销售量],CALCULATE([销售量],ALLSELECTED('地域表'[城市])))
all系列函数理解起来还是有些困难的,需要结合上下文理解,必须得通过不断得练习和思考,才能真正掌握,今天得分享就结束了,我是Sugargl,喜欢的话可以关注我,欢迎指正,88😊