多个查询在一个碧玉文件

直到现在,我一直被碧玉报告所束缚。
我只能在每个文档中写一个数据查询。
当我需要编写另一个查询时,我必须创build一个子报表,传递所需的参数等等。

但我绝对不相信这是做这件事的好方法。

那么还有另外一种方法可以在单个Jasper文档中激发多个数据查询吗?

可以使用subDatasetdatasetRun从单个报表中执行多个查询。 这种行为就像将一个或多个子报表embedded到单个报表文件中一样。

像这样定义一个子数据集:

 <subDataset name="dataset1"> <parameter name="someParam" class="java.lang.String"/> <queryString><![CDATA[SELECT column1, column2 FROM table1 WHERE column1=$P!{someParam}]]></queryString> <field name="column1" class="java.lang.String"/> <field name="column2" class="java.lang.String"/> </subDataset> 

子数据集可以像报告一样具有参数,字段,variables和组。 每个子数据集可以拥有自己的查询,并且报告可以拥有任意数量的子数据集。

要使用子数据集,您需要定义一个数据datasetRun 。 这只能在特定元素内完成:图表,交叉表,表格和列表。 我们将使用一个列表,因为它与另一个细节乐队几乎完全相同。

这段代码定义了一个使用我们子数据的列表:

 <componentElement> <reportElement x="0" y="0" width="100" height="40"/> <jr:list xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd"> <datasetRun subDataset="dataset1"> <datasetParameter name="someParam"><datasetParameterExpression><![CDATA["some value for column 1"]]></datasetParameterExpression></datasetParameter> </datasetRun> <jr:listContents height="40"> <textField> <reportElement x="0" y="0" width="100" height="20"/> <textElement/> <textFieldExpression class="java.lang.String"><![CDATA[$F{column1}]]></textFieldExpression> </textField> <textField> <reportElement x="0" y="20" width="100" height="20"/> <textElement/> <textFieldExpression class="java.lang.String"><![CDATA[$F{column2}]]></textFieldExpression> </textField> </jr:listContents> </jr:list> </componentElement> 

一些说明:

  • jr:listContents元素类似于一个细节带元素。 你几乎可以放置任何其他元素。

  • datasetRun元素非常像一个子报表元素。 它可以有一个dataSourceExpressionconnectionExpression里面,这将改变数据的来源。 如果这些都不存在,则使用报表数据源。

  • 许多datasetRun都可以使用相同的子数据集,因此您可以使用不同的参数多次运行查询。