如何在PowerPivot中按层级实现正确的工时占比计算
PowerPivot工时占比分层计算解决方案
核心问题
在全局→项目→任务→工时记录的多层级数据模型中,planned_hours在任务及以上层级默认求和,导致工时占比计算错误,需针对不同层级动态调整计算逻辑。
解决方案:DAX度量值实现
基础度量值定义
- 实际耗时总和:
Total Time Spent = SUM('工时记录表'[time_spent]) - 任务级计划工时(取任务唯一计划值,避免多条工时记录重复求和):
Task Planned Hours = MAX('工时记录表'[planned_hours])
- 实际耗时总和:
分层占比核心度量值
利用ISINSCOPE识别当前上下文层级,结合DIVIDE处理除法逻辑:Hour Ratio = SWITCH( TRUE(), -- 工时记录层级:单条记录实际耗时/计划工时 ISINSCOPE('工时记录表'[工时记录ID]), DIVIDE('工时记录表'[time_spent], '工时记录表'[planned_hours], 0), -- 任务层级:任务实际总耗时/任务计划工时 ISINSCOPE('工时记录表'[任务ID]), DIVIDE([Total Time Spent], [Task Planned Hours], 0), -- 项目/全局层级:所有子任务实际总耗时之和 / 所有子任务计划工时之和 DIVIDE( SUMX(VALUES('工时记录表'[任务ID]), [Total Time Spent]), SUMX(VALUES('工时记录表'[任务ID]), [Task Planned Hours]), 0 ) )
关键说明
ISINSCOPE用于判断当前所处数据层级,确保不同层级执行对应计算逻辑Task Planned Hours使用MAX而非SUM,因为每个任务的计划工时是唯一值,避免多条工时记录重复求和DIVIDE函数第三个参数设为0,防止除数为0时出现计算错误- 请根据实际表名、列名(如
工时记录表、工时记录ID等)替换为你的模型对应名称
内容的提问来源于stack exchange,提问作者Arnaud448
相关产品推荐
相关产品推荐

