我目前正在尝试制作一个使用表格的报告,以便为用户轻松排序。我已经探索了很多问题和文档,但我仍然在使用在JasperSoft Studio中构建报告的正确方法。我让它以一种方式工作,但它非常慢,我确信这不是正确的方法。这或多或少是我现在正在做的事情:
<subDataset name="Dataset1" uuid="6926ab77-6601-4046-a16e-ff19290b3c00">
<parameter name="param" class="java.lang.Integer"/>
<queryString>
<![CDATA[select
fields
from table
where column = ($P{param})]]>
</queryString>
<!-- fields -->
<field name="field" class="java.lang.String"/>
</subDataset>
<parameter name="param" class="java.lang.Integer"/>
<queryString>
<![CDATA[select
fields
from table]]>
</queryString>
<summary>
<band height="66">
<componentElement>
<jr:table xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd">
<datasetRun subDataset="Dataset1" uuid="933a99f0-f34a-457e-9b90-f641f54fe213">
<datasetParameter name="param">
<datasetParameterExpression><![CDATA[$P{param}]]></datasetParameterExpression>
</datasetParameter>
<connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
</datasetRun>
<jr:column width="100" uuid="ad2b846b-732a-4b83-aec0-959f19ce2972">
<jr:columnHeader style="Table_CH" height="30">
<staticText>
<reportElement x="0" y="0" width="100" height="30" uuid="84616414-4739-471e-b853-7a537e72c959"/>
<text><![CDATA[columnHeader]]></text>
</staticText>
</jr:columnHeader>
<jr:detailCell style="Table_TD" height="30">
<textField>
<reportElement x="0" y="0" width="100" height="30" uuid="bafa83be-5223-4f44-88dd-249256c22a72"/>
<textFieldExpression><![CDATA[$F{field}]]></textFieldExpression>
</textField>
</jr:detailCell>
</jr:column>
</jr:table>
</componentElement>
</band>
</summary>
是否真的有必要运行两次查询?如果我尝试删除任一查询并解决它,该表永远不会收到任何数据。这个问题看起来很简单,必须要有一些方法。
答案 0 :(得分:1)
我没有看到使用subDataset和查询参数的方式存在问题。
您的问题确实是您正在运行SQL查询两次。 为了防止您需要将主数据集的查询设为空:
<queryString>
<![CDATA[]]>
</queryString>
然后从报告的属性中设置以下内容:
无数据类型时:所有部分无详细信息
这会强制渲染你的所有乐队,除了详细的乐队,因为我假设你没有乐队。