PBI DAX多条件计算平均工作日:排除空白零值及度量值实现咨询
PBI DAX 平均工作日计算方案
疑问解答
- 不需要必须新增计算列:两种实现方式均可,新增计算列的优势是逻辑透明、方便后续其他计算复用,适合表数据量不大的场景;直接写单个度量值的优势是无需修改模型结构,聚合计算性能更优,更适合超大表场景。
- 可以直接在单个度量值中完成全部计算,无需额外依赖计算列。
方案1:单度量值直接实现(推荐)
直接用DAX迭代函数逐行筛选符合条件的记录,计算时长后求平均,自动排除空值和零值:
平均完成任务工作日 = AVERAGEX( FILTER( '你的表名', '你的表名'[status] = "completed" // 条件a:状态为已完成 && '你的表名'[job state] <> "Cancelled" // 条件b:工作状态非取消 && NOT(ISBLANK('你的表名'[actual finish])) // 排除结束日期为空的记录 && NOT(ISBLANK('你的表名'[actual start])) // 排除开始日期为空的记录 && DATEDIFF('你的表名'[actual start], '你的表名'[actual finish], DAY) > 0 // 排除时长为0/负数的异常值 ), DATEDIFF('你的表名'[actual start], '你的表名'[actual finish], DAY) )
注意:如果你需要计算排除周末/法定节假日的净工作日,把
DATEDIFF替换成NETWORKDAYS函数即可,需要排除法定节假日的话额外配置节假日表作为第三参数即可。
方案2:计算列+度量值实现
如果后续需要复用单任务的工作日时长,可以先建计算列再求平均:
步骤1:新建计算列
单任务工作日 = IF( NOT(ISBLANK('你的表名'[actual start])) && NOT(ISBLANK('你的表名'[actual finish])), DATEDIFF('你的表名'[actual start], '你的表名'[actual finish], DAY), BLANK() )
步骤2:新建度量值求平均
平均完成任务工作日 = CALCULATE( AVERAGE('你的表名'[单任务工作日]), '你的表名'[status] = "completed", '你的表名'[job state] <> "Cancelled", '你的表名'[单任务工作日] > 0 )
补充说明
两个方案默认已经排除了空白值、零值以及负数异常值,符合计算要求。如果实际业务中同一天开始结束也算有效时长,把判断条件里的>0改成>=0即可。
内容的提问来源于stack exchange,提问作者Cookie
相关产品推荐
相关产品推荐

