我想将水平条形图拆分为多个页面,因为类别表达式数据集在 200 左右很大,这导致图表的格式不可读。
我想要类似的东西,将类别表达式数据集分布在 15 个块中,以便在 page1 中显示前 15 个类别,依此类推。我想知道,如果它在JasperReports Server中使用iReport Professional 4.5.0可行。
我想将水平条形图拆分为多个页面,因为类别表达式数据集在 200 左右很大,这导致图表的格式不可读。
我想要类似的东西,将类别表达式数据集分布在 15 个块中,以便在 page1 中显示前 15 个类别,依此类推。我想知道,如果它在JasperReports Server中使用iReport Professional 4.5.0可行。
您可以利用报告组来实现这一点。在 iReport 中打开您的报告。报告查询是主要的报告查询,在我的示例中,我将引用两个字段:cat
作为类别和val
作为值。
$V{REPORT_COUNT} - 1 - ( ($V{REPORT_COUNT} - 1) % 15 )
。单击下一步并选择添加组页脚。"Sample"
),单击下一步。$F{cat}
,将值表达式设置为$F{val}
。单击完成。向导关闭,图表现在已在报告中配置。建议 1:选择图表并在 Properties 面板中滚动到Range Axis Max Value Expression,在那里设置图表的最大值。这将确保所有图表都具有相同的比例。在随附的示例中,我将其静态设置为 100,最好通过数据库查询提供最大值。
建议 2:当您运行报告时,您可能会注意到最后一个条形图可能看起来不同,因为 JasperReports/jfreechart 根据类别数缩放条形的宽度。要为条形图设置静态宽度,您需要创建一个图表定制器,将固定宽度设置为单个条形。
我附加了一个示例输出,我在示例数据集上将拆分器值设置为 3。
我还附上了 JRXML 以供进一步参考。与上述描述的不同之处在于,我没有使用静态值,而是定义了一个参数来定义单个条形图中的元素数量。
<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="report5" language="groovy" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="271b22ae-bc2f-4da1-a499-e41a8f4252b2">
<property name="ireport.zoom" value="1.0"/>
<property name="ireport.x" value="0"/>
<property name="ireport.y" value="0"/>
<parameter name="splitBy" class="java.lang.Integer">
<defaultValueExpression><![CDATA[3]]></defaultValueExpression>
</parameter>
<queryString>
<![CDATA[select val, cat from (
select 15 as val, "A" as cat
union select 65 as val, "B" as cat
union select 34 as val, "C" as cat
union select 99 as val, "D" as cat
union select 67 as val, "E" as cat
union select 23 as val, "F" as cat
union select 76 as val, "G" as cat
union select 23 as val, "H" as cat
union select 56 as val, "I" as cat
union select 11 as val, "J" as cat
union select 23 as val, "K" as cat
union select 5 as val, "L" as cat
union select 11 as val, "M" as cat
union select 15 as val, "N" as cat
union select 12 as val, "O" as cat
union select 13 as val, "P" as cat
) tbl group by cat
]]>
</queryString>
<field name="val" class="java.lang.Long"/>
<field name="cat" class="java.lang.String"/>
<group name="splitter">
<groupExpression><![CDATA[$V{REPORT_COUNT} - 1 - ( ($V{REPORT_COUNT} - 1) % $P{splitBy} ) ]]></groupExpression>
<groupFooter>
<band height="154">
<barChart>
<chart>
<reportElement uuid="e046c83e-11c5-4f3a-adfb-a540024400f5" x="0" y="0" width="555" height="154"/>
<chartTitle/>
<chartSubtitle/>
<chartLegend/>
</chart>
<categoryDataset>
<dataset resetType="Group" resetGroup="splitter"/>
<categorySeries>
<seriesExpression><![CDATA["Sample"]]></seriesExpression>
<categoryExpression><![CDATA[$F{cat}]]></categoryExpression>
<valueExpression><![CDATA[$F{val}]]></valueExpression>
</categorySeries>
</categoryDataset>
<barPlot>
<plot/>
<itemLabel/>
<rangeAxisMaxValueExpression><![CDATA[100]]></rangeAxisMaxValueExpression>
</barPlot>
</barChart>
</band>
</groupFooter>
</group>
</jasperReport>
您可以使用 Groups 来添加组并在添加组时添加条件。
$V{REPORT_COUNT} - 1 - ( ($V{REPORT_COUNT} - 1) % 10 )