代码之家  ›  专栏  ›  技术社区  ›  Ahmed

当表有中断时,如何在BusinessObject Web Intelligence中获取表中的最小和最大日期?

  •  1
  • Ahmed  · 技术社区  · 7 年前

    我在webi中创建了一个报告,其中有患者数据,分为测试后和;测试前,每个部分都有多个绘制的DTTM(多个结果)和一个分发事件DTTM。

    业务用户不需要所有绘制的日期时间或结果,但需要用于后测试的最小绘制日期时间和用于预测试的最大绘制日期时间。在附上的图片中,我只想这一行是黄色突出显示,而不是其余的信息。

    enter image description here

    我也对宇宙级的解决方案持开放态度——信息设计工具。

    环境:Web Intelligence 4.1 SP 8、IDT 4.1和;数据库Oracle

    3 回复  |  直到 7 年前
        1
  •  2
  •   mathguy    7 年前

    看来你需要这样的东西。注意WITH子句,我在其中创建了一些模拟输入-不完全是您的输入,但本质上类似。请注意,计算是针对每个患者id分别进行的;在输入中,我只模拟了一名患者,但在所有情况下都是一样的。在对基础数据的一次传递中,我对两个组(前和后)使用条件分析最小值和最大值-最小值和最大值内的案例表达式将其分离为两个组。然后在外部查询中,我只为每个患者选择两行。查看输出并与输入进行比较,然后根据实际的表名和列名进行调整。

    未处理:如果“绘制”日期时间正好等于“分发”日期时间,会发生什么情况。如果这不能在您的数据中发生,那么显然,它不需要处理。

    with
         inputs ( patient_id, dta, drawndttm, dispdttm ) as (
           select 1001, 'xhg', date '2017-03-23', date '2017-04-15' from dual union all
           select 1001, 'abc', date '2017-03-30', date '2017-04-15' from dual union all
           select 1001, 'xhg', date '2017-03-31', date '2017-04-15' from dual union all
           select 1001, 'zz3', date '2017-04-22', date '2017-04-15' from dual union all
           select 1001, 'ab3', date '2017-04-28', date '2017-04-15' from dual
         )
    -- End of SIMULATED inputs (for testing only, not part of the solution).
    -- SQL query begins BELOW THIS LINE. Use your actual table and column names.
    select    patient_id, dta, drawndttm, dispdttm, 
              case when drawndttm < dispdttm then 'PRE' else 'POST' end as classif
    from      (
                select patient_id, dta, drawndttm, dispdttm,
                       max( case when drawndttm < dispdttm then drawndttm end ) 
                            over (partition by patient_id) as max_pre,
                       min( case when drawndttm > dispdttm then drawndttm end ) 
                            over (partition by patient_id) as min_post
                from   inputs
              )
    where    drawndttm in (max_pre, min_post)
    order by patient_id, drawndttm     --   if needed
    ;
    
    PATIENT_ID DTA DRAWNDTTM DISPDTTM  CLASSIF
    ---------- --- --------- --------- -------
          1001 xhg 31-Mar-17 15-Apr-17 PRE 
          1001 zz3 22-Apr-17 15-Apr-17 POST
    
        2
  •  2
  •   Joe    7 年前

    Patient ABO/RH ),这就是我在下面的公式中使用的。如果这不正确,那么只需用适当的键替换这些引用。

    =If ([Drawn date] =  Min([Drawn date]) In ([Patient ABO/RN])  Where ([PrePost] = "POST") ) 
     Or ([Drawn date] =  Max([Drawn date]) In ([Patient ABO/RN])  Where ([PrePost] = "PRE")  )
     Then "Y" Else "N"
    

    把这个放到你的报告块中,你的两个黄色行都应该得到一个“Y”,其余的都是“N”。然后,您可以在块上仅为“Y”值应用过滤器,然后删除不显示的列。

        3
  •  1
  •   halfer KingofBliss    7 年前

    我创建了三个变量:

    1. Max Accession: =Max([Accession]) Where ([Variables].[Pre/Post] = "PRE") In ([Patient Birth Date])

    2. Min Accession: =Min([Accession]) Where ([Variables].[Pre/Post] = "POST") In ([Patient Birth Date])

    3. Accession Min/Max= If ([Accession]=[Min accession])Then 1 ElseIf ([Accession] = [Max accession]) Then 2 Else 0 (最小值取1,最大值取2,其余值取0)

    最后一步:我将第三个变量应用到表中,条件是选择所有大于0的变量。

    注:

    1. 我给出了患者的出生日期,因为我们在开发环境中没有患者姓名或MRN,将在PROD中用患者姓名替换。