2017-08-09 86 views
0

我正忙于在Business Objects 4.2 webi报告中计算我的头脑,这是我和一位同事试图创建的。业务对象:查找并显示第二个日期时间戳

该报表与我们的服务管理系统中的ChangeLog相关,并查看已关闭的票据已打开的次数&。

在我们的数据提供者查询中,对于每张票据,有多个行从Universe返回,其中对象[Change Log(s)Event Details]中的文本字符串的开头是'状态已更改为打开'或'状态更改为已关闭“。名为[Change Log(s)Event Date And Time]的对象包含日志事件的日期时间戳记。

期望的报表结构是一个表格,其中的字段为[公司名称],[事件编号],[第一次关闭],[第二次关闭],以及稍后添加的更多字段。事情是这样的:

Company Name | Incident No | 1st Closure  | 2nd Closure  | 
------------------------------------------------------------------------- 
A N Other Plc | FLT| 18/04/2017 11:11:08 | 21/04/2017 10:30:05 | 

[公司名称]和[事件否]是宇宙中的对象,所以我们在报告中刚刚提到的这些对象直接。

[1st Closure]正在使用计算返回Min([Change Log(s)Event Date And Time])事件的正常工作。

[第二次关闭]是我们卡住的地方!我已经阅读了关于在报表计算中应用上下文的主题的一些文章,但似乎无法完全正确。 我觉得我们正在接近下面的计算,但它目前正在返回#MULTIVALUE错误。 “格式表”对话框中的“避免重复行聚合”选项当前处于禁用状态,以防事件发生。

=[Change Log(s) Event Date And Time] Where((Left([Change Log(s) Event 
Details];20)="Status set to Closed") And Rank([Change Log(s) Event Date And 
Time];Bottom)=2) 

任何人都可以帮助解决方案吗?

回答

0

可能有某种方法可以在查询或报告中执行此操作。但是,如果你有超过宇宙的控制,你可以创建一个派生表看起来是这样的......

SELECT a1.CompanyName, a1.IncidentNo, a1.FirstClosure, b1.SecondClosure 
FROM 
    (
     SELECT CompanyName, IncidentNo, MIN(dtLastChangeLogDateTimeAttempt) AS 'FirstClosure' 
     FROM ChangeLog 
     GROUP BY CompanyName, IncidentNo 
    ) a1 
LEFT JOIN 
    (
     SELECT b.CompanyName, b.IncidentNo, MIN(a.dtLastChangeLogDateTimeAttempt) AS 'SecondClosure' 
     FROM ChangeLog a 
      INNER JOIN 
      (
       SELECT CompanyName, IncidentNo, MIN(dtLastChangeLogDateTimeAttempt) AS 'FirstClosure' 
       FROM ChangeLog 
       GROUP BY CompanyName, IncidentNo 
      ) b ON a.CompanyName = b.CompanyName AND a.IncidentNo AND b.IncidentNo AND a.dtLastChangeLogDateTimeAttempt > b.FirstClosure 
     GROUP BY b.CompanyName, b.IncidentNo 
    ) b1 ON a1.CompanyName = b1.CompanyName AND a1.IncidentNo AND b1.IncidentNo 

诺埃尔