我有一个请求应该根据两个条件从三个表A,B,C中提取数据,这些表A,B和C位于同一个数据源中。
BIRT 3.1是否支持具有两个以上表的联合数据集?
否则,有没有办法克服这个限制?
答案 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{(?,?,?...)}
问号指的是您将传递给存储过程的参数。