You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在BIRT Report中实现同一患者重复字段仅首行显示的报表?

BIRT报表实现同一患者字段首行显示、后续留空的步骤

前提说明

你已基于给定SQL构建了Data Cube并获取医疗数据,当前报表中同一患者的No(row_num)、Date(INVOICE_DATE)、Patient Id(EMPLOYEE_ID)等字段每行重复显示,以下是实现目标格式的具体操作步骤:

1. 为SQL添加患者分组内的行号标识

先修改原SQL,新增一个用于标记同一患者下首行/后续行的字段,确保能区分同一患者的第一条记录:

SELECT  ROW_NUMBER() OVER() AS row_num,
        -- 新增:按患者唯一标识分区,生成组内行号
        ROW_NUMBER() OVER(PARTITION BY v.EMPLOYEE_ID, v.PATIENTNAME_AR ORDER BY v.INVOICE_DATE) AS patient_row_num,
        v.INVOICE_DATE,
        v.EMPLOYEE_ID,
        v.PATIENTNAME_AR,
        v.USER_LABEl, 
        v.OFFICE_ID,
        v.ITEM_NAME,
        v.ITEM_QTYSOLD  
FROM 
(
-- 原子查询内容保持不变
SELECT i.INVOICE_DATE,
       i.EMPLOYEE_ID,
       dc.PATIENTNAME_AR,
       us.USER_LABEl, 
       dc.OFFICE_ID,
       ii.ITEM_NAME,
       ii.ITEM_QTYSOLD
FROM ECLINIC_KNG.DOCTOR_CONSULT dc 
INNER JOIN ECLINIC_KNG.INVOICE i 
    ON(dc.CONSULT_ID=i.INV_CONSULT_ID)
INNER JOIN ECLINIC_KNG.INVOICE_ITEM ii
    on(i.INVOICE_ID=ii.ITEM_INVOICE_ID)
INNER JOIN ECLINIC_KNG.USER_SETUP us
    ON(dc.DOCTORS_ID=us.USER_ID)
WHERE 
    (i.INVOICE_DATE BETWEEN ? AND ?)
AND
 i.employee_id IN 
(
    Select employee_id 
    from ECLINIC_KNG.invoice
    WHERE employee_id <>'' AND length(ltrim(employee_id,' +-.0123456789')) = 0
    AND length(EMPLOYEE_ID)<6
    AND to_NUMBER(employee_id)< 50000
)
ORDER BY
    i.INVOICE_DATE ASC
)AS v;

新增的patient_row_num会给同一患者的第一条记录标记为1,后续记录依次递增。

2. 在报表设计中设置字段显示规则

打开BIRT报表设计器,找到用于展示数据的组件(数据透视表/列表),对需要首行显示的字段做如下设置:

  • 选中目标字段对应的单元格(比如row_num、INVOICE_DATE、EMPLOYEE_ID的单元格)
  • 右键选择编辑表达式,输入以下逻辑(替换为对应字段名):
    if (row["patient_row_num"] == 1) {
        return row["INVOICE_DATE"]; // 替换为当前编辑的字段名,比如row["EMPLOYEE_ID"]
    } else {
        return "";
    }
    
  • 也可以通过属性面板的「可见性」设置:选择「基于表达式」,输入row["patient_row_num"] != 1,但这种方式会隐藏单元格,可能导致布局错位,更推荐返回空字符串的方式。

3. 调整Data Cube的分组与排序规则

如果使用数据透视表展示:

  • 进入Data Cube编辑器,在「维度」中添加患者唯一标识(比如EMPLOYEE_ID)作为分组维度,将其拖到透视表的「行」区域
  • 确保透视表的排序规则为:先按患者标识排序,再按INVOICE_DATE排序,保证同一患者的记录集中显示
  • 对需要首行显示的维度字段,重复步骤2的表达式设置

4. 预览验证

保存报表设计后点击预览,检查同一患者的目标字段是否仅在首行显示,后续行留空。如果数据排列混乱,检查分组维度、排序规则是否正确,或调整patient_row_num的分区字段(比如业务上需按CONSULT_ID区分患者的不同就诊记录,就把CONSULT_ID加入PARTITION BY子句)。


内容的提问来源于stack exchange,提问作者Luke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 12:59:13