首页 > 解决方案 > 如何从 sap bo webi 列中的下一行中减去第一行

问题描述

Column1:[pz] line_index 类型:number = RowIndex() + 1

第 2 列:Inc. 输入文本 * 每个事件编号都是唯一的

第三栏:审核时间类型:日期和时间

例子:

[pz] row_index 29 审核时间:1/8/2019 08:08:06

减去:

[pz] row_index 26 审核时间:1/8/2019 08:02:27

返回结果。

我需要他占据每个位置(每个位置 2 个),并从头开始返回结果。

标签: sapbusiness-intelligencehanabusiness-objects

解决方案


我很难理解您的要求,但我会试一试,也许这会激发您获得所需东西的想法。

我从这个论坛帖子中改编了这个答案。值得注意的是,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 语句中,这样如果你的第一行的差异是空白的,因为没有前一行可以比较。

我不清楚这是否是你所追求的。从其他评论看来,您可能希望找到每行的审核日期时间与第一个审核日期时间之间的差异。为此,我创建了一个名为First Audit Datetime的变量,如下所示...

=Min([Audit Datetime]) In Block

“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])

这是所有三分钟经过的变量的样子......

在此处输入图像描述

如果这不是您想要的,请提供源值表和预期结果。给出价值和预期结果的书面描述是有帮助的,但还不够。


推荐阅读