【问题标题】:JasperReports bug with subDatasetJasperReports 与 subDataset 的错误
【发布时间】:2014-07-21 13:34:17
【问题描述】:

我遇到了一个非常有问题的行为,它完全违背了使用子数据集的目的。

每当我声明 subDataSet 时:

<subDataset name="dataset1" uuid="b8a31d7f-9906-4db0-ac81-155091b1817a">
        <parameter name="Parameter3" class="java.lang.String">
            <defaultValueExpression><![CDATA["SELECT country, count(*) AS number_of_sites FROM sites GROUP BY country ORDER BY number_of_sites DESC LIMIT 5"]]></defaultValueExpression>
        </parameter>
        <queryString>
            <![CDATA[$P{Parameter3}]]>
        </queryString>
        <field name="country" class="java.lang.String"/>
        <field name="number_of_sites" class="java.lang.Long"/>
</subDataset>

并在 barChart 中使用它(或者确切地说是堆叠的 BarChart,但没关系):

           <categoryDataset>
                <dataset>
                    <datasetRun subDataset="dataset1" uuid="0a388bb3-2e57-4880-9b48-27e0a2afd415"/>
                </dataset>
                <categorySeries>
                    <seriesExpression><![CDATA[$F{country}]]></seriesExpression>
                    <categoryExpression><![CDATA[$F{country}]]></categoryExpression>
                    <valueExpression><![CDATA[$F{number_of_sites}]]></valueExpression>
                    <labelExpression><![CDATA[$F{number_of_sites}.toString()]]></labelExpression>
                </categorySeries>
            </categoryDataset>

结果我得到一个空文档,我 100% 确定报告适配器工作正常。因此,为了运行它并获得结果,出于某种原因,我需要另外包含重复的条目:

<parameter name="Parameter3" class="java.lang.String">
                <defaultValueExpression><![CDATA["SELECT country, count(*) AS number_of_sites FROM sites GROUP BY country ORDER BY number_of_sites DESC LIMIT 5"]]></defaultValueExpression>
 </parameter>
<queryString>
    <![CDATA[$P{Parameter3}]]>
</queryString>

这是在 JRXML 的 subDataSet 块之外的某个地方添加的。这再次让我感到绝望,因为我遇到了如此多的 jasper 错误或设计不一致。如果主查询需要匹配子数据集,那么这会破坏在报表中进行多查询的目的。就我而言,我什至不需要主报告查询,我希望有许多子数据集,每个子​​数据集都有自己的查询。

我使用了报告连接,它不会改变任何东西,只有当主查询与子数据集查询以及参数化匹配时才会返回结果。如果 4 个组件中的任何一个不匹配 - 它要么无法生成报告,要么返回空文档。

我使用 uuid 使它们匹配 - 这使差异为零。

【问题讨论】:

  • 如果您使用“select 1”之类的内容作为主数据集的查询,它会起作用吗?如果您没有对主数据集的查询,我相信 Jasper Reports 环境不会为您的主报告创建任何波段。
  • 你是对的,把这个作为答案发布,我会接受的。

标签: jasper-reports


【解决方案1】:

如果您没有对主数据集的查询,我相信 Jasper Reports 环境不会为您的主报告创建任何波段。

例如,您可以为查询尝试“选择 1 作为虚拟对象”。

Jaspersoft Studio 提供了一个名为“一个空记录”的数据源作为选项。它也可能对您的目的有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-01
    • 1970-01-01
    • 2015-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多