【问题标题】:Joining grouped tables加入分组表
【发布时间】:2012-11-07 16:31:28
【问题描述】:

我有两个不同的脚本数据集,我从中提取数据并进行聚合(在同一个键上)。我想要做的是一行一行地显示来自两个来源的聚合数据。数据来自脚本数据源 (POJO)。

下面给出了一个简化示例,其中一个订单包含许多组件,每个组件以不同的报价为不同的客户提供。然后当每个订单以不同的价格以不同的手数(或填充)填写时。我希望能够生成每个订单的摘要,其中包含已订购和已完成的总数量,以及加权平均报价和已完成价格。

订单组件表

Order ID, Customer Num, Qty, Quoted Px 
Ord01,Cust01,3,100
Ord01,Cust02,3,102 
Ord02,Cust01,5,200 
Ord02,Cust03,5,204

然后是订单履行表

OrderID,FillId,Qty,CostPx 
Ord01,F01,4,100 
Ord01,F02,2,106 
Ord02,F03,2,200
Ord02,F04,8,210'

我想显示如下内容:

Order ID, Order Qty, Fill Qty, Avg Order Px, Avg Fill Px
Ord01, 6, 6, 101, 102
Ord02, 10, 10, 202, 208

我尝试过使用子报表,这似乎可以让我得到结果,但格式很糟糕。子表标题重复,因此每个订单都有自己的标题。

【问题讨论】:

  • 您的底层数据源是什么——关系数据库、XML 文件……?
  • 它是一个脚本数据源,来自 Java 服务器。
  • 是的,您在最初的问题中说过 - 基础数据源是什么?
  • @MarkBannister - 你必须比我担心的更具体一点。正如我之前所说,数据是作为 POJO 列表从 Java 组件中获取的(两个数据集的每个数据集都有不同的对象)。我正在使用脚本数据集将字段提取到数据源中。

标签: birt


【解决方案1】:

您可能希望基于“订单 ID”列上的完全外连接在两个脚本数据集之间创建一个 BIRT 连接数据集,然后在报表中使用此连接数据集。它应该满足您的需求。

【讨论】:

  • 您所描述的完整外连接将为我提供 OrderComponents 和 Fills 的叉积以获取订单 ID。 IE。我会得到 Order01 的四行,并且总数不会正确加起来。
  • 嗯,你是对的。虽然我已经通过检查 onFetch 事件中的值来管理这样的事情,但我已经通过检查 onFetch 事件中的值:如果“key”orderId+customerId 自上一行以来没有更改,则将前两个字段设置为 0。很高兴您可以解决您的问题问题!
【解决方案2】:

我通过以下guide 或多或少地解决了我的问题。

所以我创建了一个链接到我的第一个数据源的列表。然后,我在订单 ID 上添加了一个组,以便每个订单都有一个列表行。在组标题中,我添加了一个 2x1 网格,我在网格的一侧放置了一个订单组件表,在另一侧放置了一个填充表。我必须为这两个添加过滤器,以便它们只包含正确 OrderId 的数据。然后我按 OrderId 对表进行分组,添加了我的聚合字段。

剩下的就是设置可见性。所以我将表详细信息的可见性设置为 false。为了只显示一次表头(而不是每个订单一次),我在 List 中添加了一个 Running Count 聚合,并在此聚合大于 1 时将可见性设置为不可见。

最后实际上很容易,但我花了很长时间才弄清楚如何去做。

【讨论】:

  • 你应该接受这个答案,所以这个问题不会因为没有答案而出现。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-06-15
  • 2019-07-27
  • 2012-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多