我很难理解您的要求,但我会试一试,也许这会激发您获得所需的想法。
我从forum post 改编了这个答案。值得注意的是,4.2 SP5 具有一些时间戳差异功能。在此之前,使用此定义创建一个名为 Minutes Elapsed from Previous 的变量...
=If (Not(IsNull(Previous([Audit Datetime])));
(
(
(
ToNumber( Substr( FormatDate( [Audit Datetime] ;"HH:mm:ss" ) ; 1 ; 2 ) ) * 60 * 60 +
ToNumber( Substr( FormatDate( [Audit Datetime] ;"HH:mm:ss" ) ; 4 ; 2 ) ) * 60 +
ToNumber( Substr( FormatDate( [Audit Datetime] ;"HH:mm:ss" ) ; 7 ; 2 ) )
)
-
(
ToNumber( Substr( FormatDate( Previous([Audit Datetime]) ; "HH:mm:ss" ) ; 1 ;2 ) ) * 60 * 60 +
ToNumber( Substr( FormatDate( Previous([Audit Datetime]) ; "HH:mm:ss" ) ; 4 ; 2) ) * 60 +
ToNumber( Substr( FormatDate( Previous([Audit Datetime]) ; "HH:mm:ss" ) ; 7 ; 2) )
)
)
) / 60 +
( DaysBetween( Previous([Audit Datetime]) ; [Audit Datetime] ) * 24 * 60 ))
基本上你将 Audit Datetime 的时间部分转换为秒,减去转换为秒的 Previous([Audit Datetime]) 的时间部分,将其转换回分钟,如果一整天过去了,则增加一天的分钟数。我将它全部包装在一个 if 语句中,这样如果你的第一行的差异是空白的,因为没有前一行可以比较。
我不清楚这是否是你所追求的。从其他 cmets 看来,您可能希望找到每行的审核日期时间与第一个审核日期时间之间的差异。为此,我创建了一个名为 First Audit Datetime 的变量,如下所示...
=Min([Audit Datetime]) In Block
“块内”部分很重要,以便您获得整个表的最短审核日期时间。然后您可以像这样创建一个名为 Minutes Elapsed from Start 的变量...
=If (Not(IsNull(Previous([Audit Datetime])));
(
(
(
ToNumber( Substr( FormatDate( [Audit Datetime] ;"HH:mm:ss" ) ; 1 ; 2 ) ) * 60 * 60 +
ToNumber( Substr( FormatDate( [Audit Datetime] ;"HH:mm:ss" ) ; 4 ; 2 ) ) * 60 +
ToNumber( Substr( FormatDate( [Audit Datetime] ;"HH:mm:ss" ) ; 7 ; 2 ) )
)
-
(
ToNumber( Substr( FormatDate( [First Audit Datetime] ; "HH:mm:ss" ) ; 1 ;2 ) ) * 60 * 60 +
ToNumber( Substr( FormatDate( [First Audit Datetime] ; "HH:mm:ss" ) ; 4 ; 2) ) * 60 +
ToNumber( Substr( FormatDate( [First Audit Datetime] ; "HH:mm:ss" ) ; 7 ; 2) )
)
)
) / 60 +
( DaysBetween( [First Audit Datetime] ; [Audit Datetime] ) * 24 * 60 ))
您还可以创建一个 Minutes Elapsed Running Sum 变量,该变量使用 Minutes Elapsed from Previous 来获得与 Minutes Elapsed from Start 相同的结果无需创建 First Audit Datetime 变量...
=RunningSum([Minutes Elapsed from Previous])
这是所有三分钟经过的变量的样子...
如果这不是您想要的,请提供源值表和预期结果。提供价值和预期结果的书面描述是有帮助的,但还不够。