【发布时间】: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