Jasper reports 如何在JasperReports服务器中将图表拆分为多个页面(如交叉选项卡)?

Jasper reports 如何在JasperReports服务器中将图表拆分为多个页面(如交叉选项卡)?,jasper-reports,jasperserver,Jasper Reports,Jasperserver,我想将一个水平条形图拆分为多个页面,因为Category Expressions数据集大约有200个,这导致图表的格式不可读 我想让分类表达式数据集以15块的形式分布, 在第1页中显示前15个类别,依此类推。我想知道,在JasperReports服务器上使用iReport Professional 4.5.0是否可行。您可以利用报表组来实现这一点。在iReport中打开您的报告。报告查询是主要的报告查询,在我的示例中,我将引用两个字段:catas category和valas value 在报

我想将一个水平条形图拆分为多个页面,因为Category Expressions数据集大约有200个,这导致图表的格式不可读

我想让分类表达式数据集以15块的形式分布,
在第1页中显示前15个类别,依此类推。我想知道,在JasperReports服务器上使用iReport Professional 4.5.0是否可行。

您可以利用报表组来实现这一点。在iReport中打开您的报告。报告查询是主要的报告查询,在我的示例中,我将引用两个字段:
cat
as category和
val
as value

  • 在报告检查器中,右键单击报告并选择“添加报告组”。按照向导操作,设置名称(例如拆分器)并通过以下表达式选择Group,然后输入
    $V{REPORT\u COUNT}-1-($V{REPORT\u COUNT}-1)%15)
    。单击下一步并选择添加组页脚
  • 将图表元素从调色板拖放到组页脚栏上的报表设计器中。选择条形图,按照向导操作:
    • 选择主报告数据集,单击下一步
    • 将序列表达式更改为您需要的表达式(例如,
      “示例”
      ),单击下一步
    • 将类别表达式设置为
      $F{cat}
      ,将值表达式设置为
      $F{val}
      。单击Finish。向导关闭,图表现在已在报告中配置
  • 右键单击图表,单击图表数据。在“数据集”面板“将重置类型设置为组”中,选择“将组重置为组”(例如拆分器)。单击关闭
建议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>

您可以利用报告组来实现这一点。在iReport中打开您的报告。报告查询是主要的报告查询,在我的示例中,我将引用两个字段:
cat
as category和
val
as value

  • 在报告检查器中,右键单击报告并选择“添加报告组”。按照向导操作,设置名称(例如拆分器)并通过以下表达式选择Group,然后输入
    $V{REPORT\u COUNT}-1-($V{REPORT\u COUNT}-1)%15)
    。单击下一步并选择添加组页脚
  • 将图表元素从调色板拖放到组页脚栏上的报表设计器中。选择条形图,按照向导操作:
    • 选择主报告数据集,单击下一步
    • 将序列表达式更改为您需要的表达式(例如,
      “示例”
      ),单击下一步
    • 将类别表达式设置为
      $F{cat}
      ,将值表达式设置为
      $F{val}
      。单击Finish。向导关闭,图表现在已在报告中配置
  • 右键单击图表,单击图表数据。在“数据集”面板“将重置类型设置为组”中,选择“将组重置为组”(例如拆分器)。单击关闭
建议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>