将数据从一个数据集传递到与 BIRT 报告布局不相关的另一数据集

问题描述 投票:0回答:1

firstDataSet 有一个简单的查询,它返回应在 secondaryDataSet 的 where 子句中传递的数据。布局中有 2 个表(与每个数据集绑定),彼此独立。以下是我所做的步骤,

第一个数据集

  1. 声明了一个变量-variable1,默认值为0
  2. Open 方法中定义的 SQL 查询。
  3. Fetch 方法中定义的列。
  4. 第一个数据集的 onFetch 方法声明为 - vars["variable1"] = row["column1"]

第二个数据集

  1. 在 beforeOpen 中定义了以下行 - sqlText = this.sqlText.replace ("newclause", Formatter.format(vars["variable1"],"#" ));
  2. Open 方法中定义的 SQL 查询 - select column2 from table1 where newclause
  3. 已定义获取方法。

两个数据集中定义的 SQL 查询都在执行,但是 beforeOpen 中定义的替换不起作用。请注意,我无法将数据集合并到布局中的 1 个表中(这可以工作,但不符合要求)

birt
1个回答
0
投票

我猜你的意思是主从报告,在某些工具中也称为子报告。 例如,从示例数据库中获取两个表 PRODUCTLINES 和 PRODUCTS。 您想要显示一种按产品线分组的“产品目录”。 对于每个产品线,您希望显示该产品线的描述和图像,然后列出该产品线的产品,依此类推。

至少有 3 种不同的方法可以实现此目的,但与您所描述的相对应的一种方法如下。

您需要两个数据集,一个用于产品线,一个用于产品。 相应地命名它们。

第二个可能看起来像这样:

select * from PRODUCTS where PRODUCTLINE = ?

注意问号。这称为绑定变量。

向此查询添加一个数据集参数(输入,字符串类型),其目的是在执行查询时为绑定变量提供具体值。给它一个有用的名称,例如

param_PRODUCTLINE

如果有多个绑定变量:您需要的数据集参数与 SQL 中的问号一样多。

在您的布局中,使用列表项并将其绑定到产品线。 将“产品系列”和“描述”列拖到列表的详细信息区域中。

接下来,将数据集“products”拖到详细信息区域。 这将创建一个表项。 相应地命名它,然后打开表属性中的“绑定”选项卡。单击“参数绑定”按钮。 在这里,编辑数据集参数

param_PRODUCTLINE
的绑定,然后在表达式编辑器中输入
row["PRODUCTLINE"]
(您也可以在可用列绑定列表中双击它)。

这样,对于每个 PRODUCTLINE 记录,其 PRODUCTLINE 列的值将被分配给绑定变量 param_PRODUCTLINE。

出于安全原因(避免 SQL 注入!)和性能原因,您应该始终更喜欢绑定变量,而不是在运行时操作 SQL 查询文本。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.