【发布时间】:2011-12-28 15:28:46
【问题描述】:
我的报告中需要多个查询,因此我添加了一个新数据集。 问题是我不能在我的报告中使用新数据集的字段,错误是:字段不存在。
那么,如何在我的报表中进行多个查询(打印不同表的字段)而不为每个字段创建子报表?
谢谢。
【问题讨论】:
-
你可以看到@GenericJon 回答this question
标签: dataset jasper-reports ireport
我的报告中需要多个查询,因此我添加了一个新数据集。 问题是我不能在我的报告中使用新数据集的字段,错误是:字段不存在。
那么,如何在我的报表中进行多个查询(打印不同表的字段)而不为每个字段创建子报表?
谢谢。
【问题讨论】:
标签: dataset jasper-reports ireport
不幸的是,这不是 iReport 的工作方式。您需要将所有数据放入一个数据集中才能并排使用这些字段。请参阅@GenericJon 关于使用datasetRun 的详细答案,其中您的字段用作输入参数来定义另一个数据集。
如果你真的想要这些参数可以用来传递一个字段以在 datasetRun 中输出。这将输出 Dataset1>Field1 / Dataset2>Field2。
<subDataset name="TotalUsers">
<parameter name="Users" class="java.lang.Integer" isForPrompting="false"/>
<parameter name="Date" class="java.util.Date" isForPrompting="false"/>
<queryString language="SQL">
<![CDATA[CALL GetTotalUsersAtDate($P{Date})]]>
</queryString>
<field name="TotalUsers" class="java.lang.Long"/>
</subDataset>
...
<componentElement>
<reportElement x="0" y="78" width="555" height="16"/>
<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" printOrder="Vertical">
<datasetRun subDataset="TotalUsers">
<parametersMapExpression><![CDATA[$P{REPORT_PARAMETERS_MAP}]]></parametersMapExpression>
<datasetParameter name="Users">
<datasetParameterExpression><![CDATA[$F{MusicSubscribers}]]></datasetParameterExpression>
</datasetParameter>
<connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
</datasetRun>
<jr:listContents height="16" width="555">
<textField pattern="#,##0.00 %" isBlankWhenNull="true">
<reportElement style="table_TD" x="475" y="0" width="80" height="16"/>
<textElement/>
<textFieldExpression><![CDATA[$P{Users}.doubleValue()/$F{TotalUsers}.doubleValue()]]></textFieldExpression>
</textField>
<staticText>
<reportElement style="table_TD" x="0" y="0" width="475" height="16"/>
<textElement textAlignment="Left" markup="none"/>
<text><![CDATA[Proportion of total users]]></text>
</staticText>
</jr:listContents>
</jr:list>
</componentElement>
我会进一步建议您在 iReport 之外进行尽可能多的数学计算和整理,即,如果您的数据源是数据库,则使用存储过程。
【讨论】: