Power BI如何通过DAX基于分钟级数据计算每小时平均收入
Power BI 计算作业每小时平均收入的DAX方案
首先明确统计逻辑:按小时维度统计的平均收入本质是加权小时产出,即统计范围内的总收入除以总耗时(折算为小时单位),不要直接对单作业的小时收入取算术平均,否则会因为时长权重差异导致结果失真。
先给你用提供的样例数据做校验,写完公式可以直接对照结果:
- 样例总耗时:12+24+38+82 = 156分钟 = 2.6小时
- 样例总收入:450+600+950+1800 = 3800欧元
- 正确的全局平均每小时收入:3800 / 2.6 ≈ 1461.54欧元/小时
前置确认
假设你的作业明细存储在名为作业事实表的表中,包含以下两个核心字段:
作业耗时(分钟):数值类型,记录单作业的耗时,单位为分钟作业收入(欧元):数值类型,记录单作业对应的创收金额
如果你后续需要按自然小时(比如作业完成时间所在的0点、1点……23点)分组统计,表中还需要有作业完成时间的日期时间类型字段。
核心DAX度量值
直接新建以下度量值即可,度量值会自动适配你报表上的所有筛选、切片、维度下钻:
每小时平均收入 = DIVIDE( SUM(作业事实表[作业收入(欧元)]), DIVIDE(SUM(作业事实表[作业耗时(分钟)]), 60), BLANK() )
公式说明:
- 第一参数为分子:计算当前筛选上下文下的所有作业总收入
- 第二参数为分母:把当前筛选上下文下的总耗时从分钟折算为小时
- 第三参数为容错值:当前筛选范围无作业数据时返回空值,不会显示报错乱码
常见错误避坑
- 不要写逐行计算单作业小时收入再取平均的逻辑,比如以下写法是错的:
// 错误写法:算术平均未考虑时长权重,样例数据计算结果为1641.75欧元,和真实值偏差超过12% 错误的平均收入 = AVERAGEX(作业事实表, DIVIDE(作业事实表[作业收入(欧元)], DIVIDE(作业事实表[作业耗时(分钟)],60))) - 如果你的耗时字段存储的是
时间/日期类型而非分钟数值,把分母替换为SUMX(作业事实表, HOUR(作业事实表[作业耗时]) + MINUTE(作业事实表[作业耗时])/60 + SECOND(作业事实表[作业耗时])/3600)即可 - 要做按自然小时维度的统计时,直接把作业完成时间字段拖到报表轴,展开到“小时”层级即可,度量值会自动计算每个自然小时对应的小时平均收入,不需要额外修改公式。
内容的提问来源于stack exchange,提问作者Bas073
相关产品推荐
相关产品推荐

