PowerPivot中计算人员单项目最大工时占比的技术问题
解决方法
核心思路
要实现需求,需分三步计算:
- 计算每个人员的有效总工时(排除
type="CNA"的记录) - 找出该人员名下单个项目的最大有效工时(同样排除
type="CNA") - 用最大项目工时除以有效总工时,得到占比
正确的DAX度量值
单项目最大工时占比 = VAR 有效总工时 = CALCULATE( SUM(tb_historico[hours]), tb_historico[type] <> "CNA", ALL(tb_historico[cc_pt2]) -- 确保总工时计算不受当前项目筛选影响 ) VAR 单个项目最大工时 = MAXX( VALUES(tb_historico[cc_pt2]), -- 迭代当前人员的所有项目 CALCULATE( SUM(tb_historico[hours]), tb_historico[type] <> "CNA" ) ) RETURN DIVIDE(单个项目最大工时, 有效总工时, 0) -- 避免除以0的错误
度量值说明
- 有效总工时:通过
CALCULATE过滤type<>"CNA"的记录,同时用ALL(tb_historico[cc_pt2])清除项目维度的筛选,确保计算的是当前人员所有非CNA工时的总和,不会被数据透视表的项目筛选干扰。 - 单个项目最大工时:用
MAXX迭代当前人员的所有项目(VALUES(tb_historico[cc_pt2])),对每个项目计算其非CNA工时总和,再取最大值。 - 返回结果:使用
DIVIDE函数做除法,第三个参数设置为0,避免除数为0时出现错误。
数据透视表使用说明
将name拖到行区域,把这个度量值拖到值区域即可。无论是否筛选type(只要保留非CNA记录),该度量值都能正确计算每个人员的单项目最大工时占比。
之前度量值失效原因
- 带
type<>"CNA"过滤的tmp_prc返回100%,是因为计算总工时未清除项目维度筛选,导致总工时与当前项目工时相等,占比变成100%。 - 不带过滤的
tmp_prc2筛选type后失效,是因为筛选后项目工时的计算范围被限制,总工时的计算未适配筛选后的上下文。
内容的提问来源于stack exchange,提问作者Terrado Carlos Gaspar
相关产品推荐
相关产品推荐

