Power BI矩阵视觉对象中按钻取层级计算临时工占总数百分比的DAX公式求助
Power BI矩阵视觉对象中按钻取层级计算临时工占总数百分比的DAX公式求助
嘿,我完全懂你现在的困扰——想让矩阵在不同钻取层级(周、月、季、年)下都能正确计算临时工占当前层级总人数的百分比,之前用ALLSELECTED写的公式报错了对吧?
先帮你拆解下原公式的问题:DIVIDE([HeadCount],CALCULATE(ALLSELECTED(HeadCount[HeadCount]))) 里,ALLSELECTED(HeadCount[HeadCount]) 返回的是一列选定的数值,不是总和,而且CALCULATE里没有聚合逻辑,DAX根本不知道该怎么计算,报错是必然的。
接下来给你两个可行的解决方案,根据你的数据结构选就行:
方案1:如果矩阵行包含员工类型(比如Temps和正式工)
先创建一个总人数的基础度量值(还没的话先搞这个):
Total HeadCount = SUM(HeadCount[HeadCount])
然后写临时工占比的度量值:
Temp % = DIVIDE( [Total HeadCount], -- 当前行的人数(比如Temps的人数) CALCULATE( [Total HeadCount], ALLSELECTED(HeadCount[EmployeeType]) -- 移除当前员工类型的筛选,得到当前钻取层级的总人数 ) )
这个公式的逻辑很清晰:用当前行的人数(比如临时工),除以当前钻取层级(比如某一周/某一月)下的所有员工总人数,ALLSELECTED会保留你当前钻取的日期层级筛选,同时去掉员工类型的筛选,正好匹配你的需求。
方案2:如果你的[HeadCount]已经是专门筛选临时工的度量值
那可以简化成这样:
Temp % = DIVIDE( [HeadCount], -- 临时工的人数 CALCULATE( SUM(HeadCount[HeadCount]), -- 总人数 ALLSELECTED(HeadCount[ISOWeekNumber], HeadCount[Month], HeadCount[Quarter], HeadCount[Year]) -- 这里替换成你矩阵里用来钻取的所有日期层级列,比如ISO周、月、季、年这些列 ) )
这里的ALLSELECTED是用来保留当前钻取的日期层级筛选,确保分母是当前层级的总人数,而不是整个数据集的总数。
额外小提示
- 用
DIVIDE而不是直接用/的好处是,它会自动处理除以0的情况,不会弹出烦人的错误提示。 - 如果你的日期用的是Power BI自动生成的日期层级,那把
ALLSELECTED里的列换成ALLSELECTED('Date'[Date])或者对应的层级列(比如'Date'[ISO Week])就行。
备注:内容来源于stack exchange,提问作者Darren Bartrup-Cook
相关产品推荐
相关产品推荐

