我有一个JasperReports模板,我需要计算不同“细节带”的标题。
现在,由于标题可能会有所不同(某些数据集可能为空,然后整个波段未呈现),因此我想使用变量。
内置变量没有套件,因为它们没有“detail_band_count”或其他东西。
此外,在一个细节范围内并不总是标题,可以有1或10个以下细节带,其中2 - 10频段共享在第1频段中声明的相同标题。
然而,我设法以这种方式创建变量;但它只统计页面。
是否有可能在变量访问上调用变量表达式?因此,只要我写$V{headline_COUNT}
?
答案 0 :(得分:2)
我很难看到如何使用变量,您可能需要重新构建报表,找到分组策略,因为您需要将incrementType
设置为其中一个可用值并且您是正确的可以选择“标题行”或类似。
但是,有一种解决方法可用于计算使用参数map $P{REPORT_PARAMETERS_MAP}
使用默认值定义您的计数参数(避免它从null开始)
<parameter name="countReportElement" class="java.lang.Integer" isForPrompting="false">
<defaultValueExpression><![CDATA[0]]></defaultValueExpression>
</parameter>
现在,您想要计算的乐队中的任何文字字段或其他元素,您可以使用假printWhenExpression
,增量此参数
<reportElement x="0" y="262" width="320" height="25" uuid="8fa62997-ffa2-4777-923b-999d372ce09e">
<printWhenExpression><![CDATA[($P{REPORT_PARAMETERS_MAP}.put("countReportElement",((Integer)$P{REPORT_PARAMETERS_MAP}.get("countReportElement"))+1))!=null?true:false]]></printWhenExpression>
</reportElement>
请注意,三元操作将始终评估为true(因为Map.put(K key, V value)将返回上一个对象)并且每次计算元素时,将值加到参数图中。
要显示计数值,您可以直接访问参数图。
<textField>
<reportElement x="57" y="13" width="100" height="20" uuid="7ca30577-0ca9-47c2-91ae-c7002fbbfbf7"/>
<textFieldExpression><![CDATA[$P{REPORT_PARAMETERS_MAP}.get("countReportElement")]]></textFieldExpression>
</textField>
请务必在报告中根据需要设置evaluationTime
。