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

BIRT技术问题:如何将同一数据集不同行的数据插入单个动态文本?

按指定顺序调用数据集生成动态文本

要按固定顺序(父亲→母亲→孩子)生成目标文本,核心是按角色精准定位对应的数据行,再拼接你已经掌握的单个人信息格式。以下是具体实现方式:

直接拼接写法

如果使用支持Groovy表达式的报表工具(如JasperReports),可以直接通过数据集的find方法按角色查找行,再取出字段值:

Genetic relationship between 
<VALUE-OF>dataSet.find{it["role"] == "Father"}["title"]</VALUE-OF>&nbsp;<VALUE-OF>dataSet.find{it["role"] == "Father"}["firstname"]</VALUE-OF>&nbsp;<VALUE-OF>dataSet.find{it["role"] == "Father"}["surname"]</VALUE-OF>, 
<VALUE-OF>dataSet.find{it["role"] == "Mother"}["title"]</VALUE-OF>&nbsp;<VALUE-OF>dataSet.find{it["role"] == "Mother"}["firstname"]</VALUE-OF>&nbsp;<VALUE-OF>dataSet.find{it["role"] == "Mother"}["surname"]</VALUE-OF> and 
<VALUE-OF>dataSet.find{it["role"] == "Child"}["title"]</VALUE-OF>&nbsp;<VALUE-OF>dataSet.find{it["role"] == "Child"}["firstname"]</VALUE-OF>&nbsp;<VALUE-OF>dataSet.find{it["role"] == "Child"}["surname"]</VALUE-OF> is...

注:把代码中的dataSet替换成你实际使用的数据集名称。

简洁写法(定义变量复用)

如果觉得重复代码太多,可以先定义变量存储各角色的数据行,再引用字段:

<VALUE-OF>def father = dataSet.find{it["role"] == "Father"}</VALUE-OF>
<VALUE-OF>def mother = dataSet.find{it["role"] == "Mother"}</VALUE-OF>
<VALUE-OF>def child = dataSet.find{it["role"] == "Child"}</VALUE-OF>

Genetic relationship between 
<VALUE-OF>father["title"]</VALUE-OF>&nbsp;<VALUE-OF>father["firstname"]</VALUE-OF>&nbsp;<VALUE-OF>father["surname"]</VALUE-OF>, 
<VALUE-OF>mother["title"]</VALUE-OF>&nbsp;<VALUE-OF>mother["firstname"]</VALUE-OF>&nbsp;<VALUE-OF>mother["surname"]</VALUE-OF> and 
<VALUE-OF>child["title"]</VALUE-OF>&nbsp;<VALUE-OF>child["firstname"]</VALUE-OF>&nbsp;<VALUE-OF>child["surname"]</VALUE-OF> is...

替代方案(无Groovy支持时)

如果你的工具不支持Groovy表达式,可以给三个角色分别创建筛选后的子数据集(比如筛选条件为role = 'Father'),然后直接引用对应子数据集的字段值,写法和单个人的格式一致,只是分别引用不同子数据集的字段即可。

内容的提问来源于stack exchange,提问作者Khongthon P.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 13:03:27