iReport,如何打印不同表的字段

发布于 2024-12-23 02:55:51 字数 123 浏览 3 评论 0原文

我的报告中需要多个查询,因此我添加了一个新数据集。 问题是我无法在报告中使用新数据集的字段,错误是:字段不存在。

那么,如何在报告中进行多个查询(以打印不同表的字段)而不为每个字段创建子报告?

谢谢。

I need multiple queries in my report so i added a new dataset.
The problem is i can't use fields of new dataset in my report, the error is: field does not exists.

So, how can i have multiple query in my report(to print fields of different table) without create a subreport for each field?

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

蓝戈者 2024-12-30 02:55:51

不幸的是,这不是 iReport 的工作方式。您需要将所有数据放入一个数据集中才能并排使用这些字段。请参阅 @GenericJon 关于使用 datasetRun 的详细答案,其中您的字段用作输入参数来定义另一个数据集。

如果您确实想要,可以使用参数来传递数据集运行中的输出字段。这输出数据集 1 > 字段 1 / 数据集 2 > 字段 2。

<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 之外进行尽可能多的数学计算和整理,即如果您的数据源是数据库,则使用存储过程。

Unfortunately this isn't how iReport works. You need to get all your data into one dataset to use the fields side by side. See @GenericJon's detailed answer on using a datasetRun where your fields are used as input parameters to define another dataset.

If you really want the parameters can be used to pass a field for output in a datasetRun. This outputs 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>

I would go further to suggest you do as much of the math and collating outside of iReport too, i.e. use stored procedures if your data source is a database.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文