1

对于我正在创建的报告,我从报告参数中提取某些信息。假设我的 user1d 是 145,我所有想要的信息都以列表顺序显示在我的表单中,因为我使用表格和网格作为我的表单结构。我有四个信息部分(在表格标题的网格中)订单、付款和付款历史记录,它们是表格中的字段。而不是一个接一个地列出所有信息。我想根据它的用户 ID 对我的结果进行分组/链接,包括其各自的订单、付款和付款历史记录,然后按顺序排列以下用户 ID 及其各自的属性。

例如:用户:145 145 订单 145 付款 145 付款历史

用户:146 146 订单 146 付款 146 付款历史

等等....

重要的是我的表格遵循这种结构。这可以在Birt做吗?如果是这样,我的问题与我如何提取信息有关吗?我需要为每个部分单独查询吗?还是我没有使用 BIRT 内置的分组方法?如果有人有 BIRT 的经验并且做过我想做的事情,我将非常感谢你的帮助!

先感谢您!

4

1 回答 1

0

这可以通过一个包含所有数据的查询以及单独的查询(每个部分一个)来实现。

但可能每个部分的列差异很大,所以第二种方法通常更好,所以我只给你第二种方法的想法。

我猜您的 USER 查询中有一个 USER_ID 列或其他任何内容,并且您想使用此列来限制其他每个部分中的数据。

为简单起见,我假设您的数据集称为 USER、ORDERS、PAYMENTS 等。

思路如下:

对于布局,使用以下构造(项目类型和“名称”,您应该始终为容器项目定义名称作为最佳实践):

List "List_USER"
  Detail
    Grid "Grid_USER"
       -- shows a USER records columns in its cells.
    Table "Table_ORDERS"
    Table "Table_PAYMENTS"
    Table "Table_PAYMENT_HISTORY" (*)

“List_USER”绑定到数据集 USER。

“Grid_USER”未绑定,它从“List_USER”继承绑定。

“Table_ORDERS”绑定到数据集 ORDERS。

“Table_PAYMENTS”绑定到数据集 PAYMENTS。

“Table_PAYMENT_HISTORY”绑定到数据集 PAYMENT_HISTORY。

最后三个表和它们的数据集(例如细节)需要特殊处理,我将在“Table_ORDERS”中展示这个。

数据集(例如 ORDERS)需要一个数据集参数 param_USER_ID。

SQL 查询需要一个在 WHERE 子句中使用的绑定变量(使用语法 ? 或 :USER_ID,如果您在 Oracle 上),通常看起来像

SELECT ORDERS.ORDER_ID
     , ORDERS.ORDER_DATE -- and so on
FROM   ORDERS
WHERE  ORDERS.USER_ID = ?

-- 在 Oracle 上,您可能希望使用 WHERE ORRDERS.USER_ID = :P_USER_ID,这将允许在 Oracle SQL*Developer 中测试您的查询。

请注意,SQL 中的数据集参数和绑定变量出现是按位置映射的,第一个数据集参数对应于第一个 ? 等等。

在“Table_ORDERS”“Binding”选项卡中,打开“Data Set Parameter Binding...”对话框并将值 row["USER_ID"] 分配给数据集参数 param_USER_ID。

请注意,您可以从编辑对话框中的“可用列绑定”中进行选择。另请注意,“确定”只是关闭该对话框。要实际选择一个列绑定,您需要双击,例如,双击 USER_ID 会将文本 row["USER_ID"] 复制到表达式文本中。

于 2020-06-25T06:51:23.430 回答