Cognos Report Studio如何实现取患者最近就诊日期及BP值的逻辑
Cognos Report Studio 患者最近就诊日期及对应BP值实现方案
以下实现逻辑完全基于已发布的metadata包完成,无需编写原生SQL。
核心逻辑前提
先确认两类数据的关联键:患者唯一标识(患者ID)、就诊日期,保证预约记录和体征记录可以精准匹配。所有计算优先复用metadata中已建模好的维度、指标字段,不要自定义绕过模型的逻辑。
步骤1:计算患者维度的最近就诊日期
新建患者粒度的基础查询,添加患者ID、患者基本信息字段后,新增计算项「最近就诊日期」,表达式为:
maximum([预约事实表].[就诊日期] for [患者ID])
注意:就诊日期字段必须取预约/就诊事实表的字段,不能取Vitals体征表的就诊日期,避免因Vitals缺失某次就诊的体征记录,导致计算出的最近日期和实际就诊情况不一致,从根源保证无论体征数据是否存在,都能返回正确的最近就诊日期。
步骤2:关联Vitals表提取对应BP值
将上述基础查询和Vitals体征数据集做左连接(左表为带最近就诊日期的患者基础查询,右表为Vitals数据集),关联条件配置为:
- 基础查询.患者ID = Vitals.患者ID
- 基础查询.最近就诊日期 = Vitals.就诊日期
根据Vitals表的存储结构选择BP值的提取方式:
- 列存储结构(同次就诊为单行,BP、rr、hr、height为同表不同字段):直接提取Vitals表的[BP]字段即可,左连接特性会自动保证无BP记录时返回null,不会丢失对应患者的最近就诊日期。
- 行存储结构(不同体征为不同行,通过体征类型字段区分):不要在全局过滤中加「体征类型=BP」的条件(会过滤掉无BP的就诊记录),而是新增计算项「最近就诊BP」,表达式为:
之后对该计算项按患者ID做最大值聚合,即可拿到对应BP值,同时避免其他体征类型的数据干扰。case when [Vitals].[体征类型] = 'BP' then [Vitals].[体征值] else null end
步骤3:结果去重与校验
如果关联后出现同一患者多条重复记录,是因为同次就诊可能存在多条体征录入记录,只需对查询按患者ID做分组聚合,对BP字段取max/min即可(同次就诊的BP值一致,聚合不会改变结果,仅做去重)。
校验时重点核对三类场景:
- 最近就诊有BP记录的患者,返回日期和BP值与源系统一致
- 最近就诊无BP记录的患者,正常返回最近就诊日期,BP列为空,不会被过滤
- 存在多次就诊记录的患者,不会错误返回历史就诊的BP值
避坑提示:禁止在查询的全局过滤层添加任何和BP相关的筛选条件,否则会直接丢失BP为空的患者记录,不符合需求。
内容的提问来源于stack exchange,提问作者Padmavthi R
相关产品推荐
相关产品推荐

