我已安排任务表,其中存储计划任务ID,类型,exec_time,end_time等...
我将exec / end time作为时间戳。
对于BI目的,我需要以某种方式计算持续时间(end_time - exec_time)并以hh:mm:ss返回。
exec / end_time的格式为dd / mm / yy hh:mm:ss:miliseconds o' clock。
请帮我解决这个问题。 提前致谢! 史蒂夫
答案 0 :(得分:0)
您可以使用计算字段在Tableau中执行此操作。这可能不如您在DBMS中所做的那样优雅;但它会起作用:
RIGHT("0" + STR(INT(DATEDIFF("second",[Exec Time],[End Time]) / 60)),2)
+ ":" +
RIGHT("0" + STR(INT((DATEDIFF("second",[Exec Time],[End Time]) % 6000) / 60)),2)
+ ":" +
RIGHT("0" + STR(INT((DATEDIFF("second",[Exec Time],[End Time]) % 600))),2)
“持续时间”是我的屏幕截图中的计算字段:
更新 - 根据其他评论 -
为时间衡量:
MAKETIME(
INT(DATEDIFF("second",[Exec Time],[End Time]) / 60),
INT((DATEDIFF("second",[Exec Time],[End Time]) % 6000) / 60),
INT((DATEDIFF("second",[Exec Time],[End Time]) % 600))
)
其他详细信息 - 为您解答后续问题`
如果您要随时间进行任何计算,则应使用date
或numeric
。例如,由于您关注的最小时间单位是秒,因此您可以在计算中使用DATEDIFF("second",[Exec Time],[End Time])
来添加或删除时间(以秒为单位)。
或者,只需使用内置日期函数DATEADD
,DATEDIFF
等。
如果您想以这种格式hh:mm:ss
显示持续时间,那么您需要创建一个字符串,就像我上面所做的那样。原因是因为如果持续时间超过24小时,那么只有time
元素才能恰当地表示它 - 因为整整一天(或更长时间)已经过去了。
在上面(非常顶部)的计算中,我用“0”左键填充小时,分钟和秒钟,但只选择最右边的2个字符。这意味着如果某个值只是一位数,则之前会添加0。如果该值已经是2位数,则不会在结果中更改。因此,1
变为01
,但13
保持13
。
我强烈建议您使用这些解决方案并对其进行测试,以确保您了解它们的工作原理。