【问题标题】:how to subtract the first line from the next in column sap bo webi如何从 sap bo webi 列中的下一行中减去第一行
【发布时间】:2019-12-30 11:24:46
【问题描述】:

Column1: [pz] line_index 类型:数字 = 行索引 () + 1

第 2 栏:公司。 输入文字 * 每个事件编号都是唯一的

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

例子:

[pz] 行索引 29 审核时间: 1/8/2019 08:08:06

减法:

[pz] 行索引 26 审核时间: 2019 年 1 月 8 日 08:02:27

返回结果。

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

【问题讨论】:

  • 那么您是否在寻找每行与第一行相比的分钟差异?
  • 不,我们分别计算每条记录之间的差异

标签: sap business-intelligence hana business-objects


【解决方案1】:

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

我从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])

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

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

【讨论】:

  • 是的,我知道,我用过。但是,我想开发它以使其引用我,例如:索引 1,时间:上午 8:00 索引 2,时间:上午 8:20 索引 3,时间:上午 9:00 目标:计算差异他们每个人分别:时间从:索引 2 - 索引 1 = 20 分钟索引 3 - 索引 2 = 40 分钟现在:计算我从索引 1 到索引 3
  • 使用 Previous 函数,您可以指定偏移量以跳过多个记录。您还可以考虑使用 RelativeValue 函数。
  • 您能帮我创建一个示例公式吗?索引:row_index,对于每一行审核日期:我需要计算的状态更改时间:反应时间,正如我上面写的。
  • 我会试试的。请用完整的数据样本和预期结果编辑您的问题?
  • 不,我们分别计算每条记录之间的差异
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-24
相关资源
最近更新 更多