用DAX将HH:MM:SS时间类型格式数据转换成秒

之前一片blog介绍了如何用DAX将以秒为单位的数字转换成分钟,小时,和天数显示的时间。这种显示方式的好处是数据可读性高,但是存在的问题是如果要对当前时间类型数据进行求和或者其他数学运算,似乎就不是很方便了。

因此如果原始时间数据是以HH:MM:SS形式存储,可以创建一个度量值(Measure),然后利用下面表达式将其换算成以秒为单位的数据,之后再进行计算。

Seconds_Measure = 
VAR time_value = SELECTEDVALUE('Second'[Time])
RETURN time_value*86400

这里写图片描述

这个表达式有两部分组成,第一部分是一个自定义变量timevalue ,使用SELECTEDVALUE函数去获取’Second’[Time]列值。目的是利用可视化表单中的筛选上下文条件,返回Time列中的每一行值然后传递给RETURN部分函数使用。

表达式中的第二部使用获取到的时间去乘以86400,即1天=86400秒,来获得。由于在DAX语言中,日期时间在内部实际上是以小数的形式进行存储。其中,日期是整数部分,而小时,分钟和秒则会被换成小数。例如1天1小时1分1秒换算成小数就变为1.042373。
如下图所示,当将时间类型转换成小数类型后,就能发现,原始数据值变成了小数形式,也就证明了日期时间其实和小数是可以相互转换的。
这里写图片描述
因此只要将以小时:分钟:秒这种时间类型数据去乘86400,即可换算成秒。非常简单。

但是运用上面计算方法的前提是数据HH:MM:SS所在列必须是时间类型,即HH的范围是0到24直接的整数,MM是0到60,SS是0到60。但是有一些情况下,一些数据表中的小时数会超过24小时,例如某某机器运行了25小时1分1秒,即25:01:01。如果列中含有这种类型的数据,Power BI则不允许将该列转换为时间类型,因此也就无法使用上面公式将其转换成秒。
这里写图片描述

要解决该问题,就需要对HH:MM:SS进行拆分,将拆分出来的数值分别换算成秒,再相加即可。参考公式如下:

ToSecond = 
VAR hh = PATHITEM(SUBSTITUTE('Second_O1D'[Time],":","|"),1)*3600
VAR mm = PATHITEM(SUBSTITUTE('Second_O1D'[Time],":","|"),2)*60
VAR ss = PATHITEM(SUBSTITUTE('Second_O1D'[Time],":","|"),3)
RETURN hh+mm+ss

这里面利用PATHITEM和SUBSTITUTE分别提取了原始列中小时,分钟和秒的数值。想要了解拆分详解参考之前的blog。之后再分别将小时和分钟转换为秒再求和即可获得。
这里写图片描述

猜你喜欢

转载自blog.csdn.net/jessica_seiya/article/details/81363063