我想将水平条形图分成多个页面,因为类别表达式数据集大约为200,这导致图形格式不可读。
我希望类似表达式数据集以15块为单位进行分配, 至于在page1中显示前15个类别,依此类推。我想知道,如果使用 iReport Professional 4.5.0 在 JasperReports Server 中可行。
答案 0 :(得分:3)
您可以使用报告组来实现此目的。在iReport中打开报告。报告查询是主报告查询,在我的示例中,我将引用两个字段:cat
作为类别,val
作为值。
$V{REPORT_COUNT} - 1 - ( ($V{REPORT_COUNT} - 1) % 15 )
。单击下一步,然后选择添加组页脚。"Sample"
),单击“下一步”。 $F{cat}
,将值表达式设置为$F{val}
。单击完成。向导关闭,现在在报告中配置了图表。建议1 :选择图表并在“属性”面板中滚动到范围轴最大值表达式,在那里设置图表的最大值。这将确保所有图表具有相同的比例。在附带的示例中,我将其静态设置为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>
答案 1 :(得分:1)
您可以使用群组来添加群组,并在添加群组时添加条件。
$V{REPORT_COUNT} - 1 - ( ($V{REPORT_COUNT} - 1) % 10 )