table 休息时,如何在 Business Objects Web Intelligence 的 table 中获取 MIN 和 MAX 日期?

How to get MIN and MAX dates in a table in BusinessObject Web Intelligence when table have a break?

我在 webi 中创建了一份报告,其中我的患者数据分为两部分 POST-Test 和 PRE-Test,每个部分都有多个 Drawn DTTM(多个结果)和一个 Dispense Event DTTM.

业务用户不想要所有绘制日期时间或结果,但想要 POST-Test 的最小绘制日期时间和 PRE-Test 的最大绘制日期时间。在所附的图片中,我只想要以黄色突出显示的行而不是其余信息。

我也对 Universe 级别的解决方案持开放态度 - 信息设计工具。

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

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

未处理:如果 "drawn" 日期时间正好等于 "dispensed" 日期时间会发生什么。如果您的数据中不会发生这种情况,那么显然不需要处理它。

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

这可以在报告中很容易地完成,无需修改 SQL 或 universe。

我假设您想要每个患者的 Pre 和 Post,由第一列 (Patient ABO/RH) 标识,这就是我在下面的公式中使用的内容。如果这不正确,则只需将这些引用替换为适当的键即可。

有几种方法可以做到这一点。我在这里提议的只是获取分类为 Post 的行的最小绘制日期和分类为 Pre 的行的最大绘制日期。首先我们创建一个指标来识别满足该条件的行:

=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" 值应用过滤器,然后删除不显示的列。

我找到了解决这种情况的方法。这里是这样的:

我创建了三个变量:

  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)

最后一步:我将第三个变量应用于 table,条件为 select,所有这些都大于 0。

注:

  1. 前期和post休息时间的加入是一种从低到高的数字
  2. 我提供了患者出生日期,因为我们在 DEV 环境中没有患者姓名或 MRN,将在 PROD 中将其替换为患者姓名。