如何使用DAX计算起止时间的总时长(小时数)?
解决DAX计算时长(小时数)的问题
你原公式的核心问题
- 误用聚合函数
SUM:SUM('Data'[Finish Date])和SUM('Data'[Start Date])是对整个列的日期值求和,得到的是固定的全局聚合结果,所以整列返回值完全相同。 - 日期运算逻辑错误:DAX中日期时间以数值存储(1代表1天),你直接对聚合后的日期值做减法、乘24再减12,得到的数值会被自动识别为日期(比如数值2对应1900/1/2),所以显示成日期格式。
正确的解决方案
1. 计算每行的单条记录时长(小时)
如果要给每行单独计算开始到结束的小时数,创建计算列,直接针对行上下文的日期计算:
- 取整的整数小时:
总时长(小时) = DATEDIFF('Data'[Start Date], 'Data'[Finish Date], HOUR)
- 带小数的精确小时(比如30分钟=0.5小时):
总时长(小时) = (VALUE('Data'[Finish Date]) - VALUE('Data'[Start Date])) * 24
2. 计算整个表的总时长汇总(所有记录时长之和)
如果要统计所有行的总时长,创建度量值(适合报表中使用):
- 基于DATEDIFF的汇总:
总时长汇总(小时) = SUMX('Data', DATEDIFF('Data'[Start Date], 'Data'[Finish Date], HOUR))
- 基于数值运算的精确汇总:
总时长汇总(小时) = SUMX('Data', (VALUE('Data'[Finish Date]) - VALUE('Data'[Start Date])) * 24)
内容的提问来源于stack exchange,提问作者Cheries
相关产品推荐
相关产品推荐

