【发布时间】:2014-02-23 22:16:43
【问题描述】:
我有一个请求,应该根据两个条件从三个表 A、B、C 中提取数据,这些表 A、B 和 C 位于同一个数据源中。
BIRT 3.1 是否支持包含两个以上表的联合数据集?
否则,有没有办法克服这个限制?
【问题讨论】:
标签: java eclipse eclipse-plugin struts birt
我有一个请求,应该根据两个条件从三个表 A、B、C 中提取数据,这些表 A、B 和 C 位于同一个数据源中。
BIRT 3.1 是否支持包含两个以上表的联合数据集?
否则,有没有办法克服这个限制?
【问题讨论】:
标签: java eclipse eclipse-plugin struts birt
你没有说你的数据源是什么,而是假设它是一个 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'
【讨论】:
除了詹姆斯的回答:
在许多情况下,使用 SQL 连接表是最好的解决方案(如果您使用 BIRT 进行开发,您应该了解 SQL,除非其他人为您准备了数据集和相应的报告项)。
作为替代方案,请记住 BIRT 没有像其他报表设计器(例如 Oracle Reports)那样的“数据模型”,并且您可以通过创建相应的布局结构和数据集参数绑定来链接来自不同数据集的数据.
您没有提及数据的逻辑结构。
如果它是 master-detail-detail(例如,artist-album-title),那么您将使用例如绑定到 DS“艺术家”的列表项,其中包含绑定到 DS“专辑”的列表或表格项反过来又包含一个绑定到 DS“标题”的表。
DS“专辑”需要一个 DS 参数,如“artist_id”或其他参数(您在 SELECT 语句的 WHERE 子句中使用),并且在绑定到 DS“专辑”的列表/表格项目中,您可以使用row["artist_id"] 作为 DS 参数“artist_id”的值。
这与绑定到 DS“标题”的表格项类似。但是,如果主键由 (artist_id、album_id、title_no) 组成,您可能需要从最外面的列表项访问当前艺术家。要访问它,请使用row._outer["artist_id"]。
【讨论】:
这个问题的解决方案是使用存储过程查询,你可以使用任何你想要的 sql 请求设置你的过程,用你的 DBMS 编译它,然后你从 BIRT 使用语法调用它call nameOfYourProceure{(?,?,?...)}
问号是指您将传递给存储过程的参数。
【讨论】: