JasperReports与subDataset的错误

时间:2014-07-07 12:13:44

标签: jasper-reports

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

每当我声明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块之外的某处添加的。这让我感到绝望,因为我遇到了许多碧玉或设计上的不一致。如果主查询需要匹配subDataset,那么这会破坏报告中多元化的目的。在我的情况下,我甚至不需要主报告查询我希望有许多子数据集,每个子​​数据集都有自己的查询。

我使用报告连接它没有改变任何东西,结果仅返回并且仅当主查询匹配subDataset查询以及参数化时。如果4个组件中的任何一个不匹配 - 它将无法生成报告或返回空文档。

我与uuids一起玩,使他们匹配 - 这是零差异。

1 个答案:

答案 0 :(得分:0)

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

您可以尝试类似&#34;选择1作为虚拟&#34;例如,您的查询。

Jaspersoft Studio提供了一个名为&#34; One Empty Record&#34;的数据源。它也可能对您的目的有用。