联合数据集限于BIRT中的两个表

时间:2014-02-23 22:16:44

标签: java eclipse eclipse-plugin struts birt

我有一个请求应该根据两个条件从三个表A,B,C中提取数据,这些表A,B和C位于同一个数据源中。

BIRT 3.1是否支持具有两个以上表的联合数据集?

否则,有没有办法克服这个限制?

3 个答案:

答案 0 :(得分:2)

您没有说明您的数据源是什么,但假设它是一个SQL数据库。您可以在SQl中执行类似的操作。如果数据位于不同的数据源中,则只需要进行BIRT连接。

select TableA.Field
, TableB.OtherField
, TableC.SomeOtherField


 from dbo.TableA

  left join dbo.TableB 
       on TableA.Same = TableB.Same

  left join dbo.TableC 
       on TableA.Same = TableC.Same

   where TableA.Important = 'Something'

答案 1 :(得分:1)

除了詹姆斯的回答:

在许多情况下,使用SQL加入表是最好的解决方案(如果您使用BIRT进行开发,则应该知道SQL,除非有人为您准备了数据集和相应的报表项。)

作为替代方案,请记住,BIRT没有像其他报表设计器(例如Oracle Reports)那样的“数据模型”,并且您通过创建相应的布局结构来链接来自不同数据集的数据,并使用数据集参数绑定

您没有提及数据的逻辑结构。

如果是主要细节 - 详细信息(例如,艺术家 - 专辑 - 标题),那么您将使用绑定到DS“艺术家”的列表项,其中包含绑定到DS“专辑”的列表或表项。反过来包含一个绑定到DS“title”的表。

DS“相册”需要DS参数,例如“artist_id”或其他(您在SELECT语句的WHERE子句中使用),并且在绑定到DS“album”的列表/表项中,您将使用row["artist_id"]作为DS参数“artist_id”的值。

这与绑定到DS“title”的表项类似。但是,如果主键由(artist_id,album_id,title_no)组成,则可能需要从最外面的列表项访问当前艺术家。要访问此内容,请使用row._outer["artist_id"]

答案 2 :(得分:0)

此问题的解决方案是使用存储过程查询,使用您想要的任何sql请求设置程序,使用DBMS编译它,然后使用语法从BIRT调用它  call nameOfYourProceure{(?,?,?...)}
 问号指的是您将传递给存储过程的参数。