在BIRT中,联合数据集限制为两个表



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

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

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

您没有说明数据源是什么,而是假设它是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'

除了James的答案:

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

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

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

如果它是主详细信息(例如,艺术家专辑标题),那么您将使用例如绑定到DS"艺术家"的列表项,包含绑定到DS的列表或表项"专辑",而该列表或表项目又包含绑定到DS-"标题"的表。

DS"album"需要一个DS参数,如"artist_id"或其他任何参数(在SELECT语句的WHERE子句中使用),在绑定到DS"alb簿"的列表/表项中,您将使用row["artist_id"]作为DS参数"artist_id"的值。

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

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

最新更新