DAX计算hh:mm:ss格式时间差显示异常的技术求助
问题:DAX计算时间差并按hh:mm:ss格式显示异常
我尝试计算开始时间与结束时间的差值,并以hh:mm:ss格式展示结果,但计算结果无法正常工作。使用的DAX代码如下:
TimeDiff = VAR FirstDateStart = MINX ( unit_task_timestamps, unit_task_timestamps[NEW] ) VAR LastDateEnd = MAXX ( unit_task_timestamps, unit_task_timestamps[TASK_STATUS_ENROUTE] ) RETURN FORMAT ( LastDateEnd - FirstDateStart, "hh:mm:ss" )
结果截图:
原因分析与修复方案
DAX中两个日期时间相减返回的是天数的小数形式(例如1.5代表1天12小时),直接用FORMAT函数的"hh:mm:ss"格式时,只会提取小数部分对应的0-23小时,若时间差超过24小时,小时数会被截断,导致结果错误。
方案1:区分天数的完整时间差显示
以下代码会拆分天数、小时、分钟、秒,拼接成更直观的格式:
TimeDiff = VAR FirstDateStart = MINX(unit_task_timestamps, unit_task_timestamps[NEW]) VAR LastDateEnd = MAXX(unit_task_timestamps, unit_task_timestamps[TASK_STATUS_ENROUTE]) VAR TimeSpan = LastDateEnd - FirstDateStart VAR Days = INT(TimeSpan) VAR Hours = INT((TimeSpan - Days) * 24) VAR Minutes = INT((TimeSpan - Days - Hours/24) * 1440) VAR Seconds = ROUND((TimeSpan - Days - Hours/24 - Minutes/1440) * 86400, 0) RETURN IF( Days > 0, Days & "天 " & FORMAT(Hours, "00") & ":" & FORMAT(Minutes, "00") & ":" & FORMAT(Seconds, "00"), FORMAT(Hours, "00") & ":" & FORMAT(Minutes, "00") & ":" & FORMAT(Seconds, "00") )
方案2:仅显示总小时数(不区分天数)
如果不需要单独展示天数,直接计算总小时数并格式化:
TimeDiff = VAR FirstDateStart = MINX(unit_task_timestamps, unit_task_timestamps[NEW]) VAR LastDateEnd = MAXX(unit_task_timestamps, unit_task_timestamps[TASK_STATUS_ENROUTE]) VAR TotalHours = (LastDateEnd - FirstDateStart) * 24 VAR Hours = INT(TotalHours) VAR Minutes = INT((TotalHours - Hours) * 60) VAR Seconds = ROUND((TotalHours - Hours - Minutes/60) * 3600, 0) RETURN FORMAT(Hours, "00") & ":" & FORMAT(Minutes, "00") & ":" & FORMAT(Seconds, "00")
内容的提问来源于stack exchange,提问作者roninn75
相关产品推荐
相关产品推荐

