条形图中的分页与系列

时间:2013-07-31 18:59:03

标签: jasper-reports bar-chart

我必须创建一个条形图,其中可以有大量(大约50个)类别(X轴)。我希望将此报告拆分为多个页面,以便我可以应用分页。我在这里找到了答案:

How can I generate paginated bar chart in jasper report

但上面的答案讨论了单个系列的条形图。 以下是我打算创建的示例报告:

Report

假设我们在X轴上有大约50个日期,报告将变大。所以我必须打破这个报告,以便我每页显示一个可配置的数量(比方说3)类别。以下是我的方法:

  1. 创建一组日期字段
  2. 创建一个对此组进行计数的变量。
  3. 使用groupExpression $ V {variable1}创建另一个组 - 1 - (($ V {variable1} - 1)%3)
  4. 以下是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="paginationBar3d" language="groovy" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="a9331cff-3045-47b5-8399-17a89e2ac39c">
        <property name="ireport.zoom" value="1.0"/>
        <property name="ireport.x" value="0"/>
        <property name="ireport.y" value="0"/>
        <queryString>
            <![CDATA[select a.year_built, aty.description, count(*) as count
            from aircraft a, aircraft_types aty
            where a.aircraft_type_id = aty.aircraft_type_id
            group by year_built, description order by a.year_built;]]>
        </queryString>
        <field name="year_built" class="java.sql.Date">
            <fieldDescription><![CDATA[]]></fieldDescription>
        </field>
        <field name="description" class="java.lang.String">
            <fieldDescription><![CDATA[]]></fieldDescription>
        </field>
        <field name="count" class="java.lang.Long"/>
        <variable name="variable1" class="java.lang.Integer" incrementType="Group" incrementGroup="yearGroup" calculation="Count">
            <variableExpression><![CDATA[Boolean.TRUE]]></variableExpression>
        </variable>
        <group name="yearGroup">
            <groupExpression><![CDATA[$F{year_built}]]></groupExpression>
        </group>
        <group name="splitter">
            <groupExpression><![CDATA[$V{variable1} - 1 - ( ($V{variable1} - 1) % 3)]]></groupExpression>
            <groupFooter>
                <band height="802">
                    <bar3DChart>
                        <chart>
                            <reportElement uuid="7114e305-2cfb-4757-b034-b0a12dd412d9" x="0" y="0" width="555" height="802"/>
                            <chartTitle/>
                            <chartSubtitle/>
                            <chartLegend/>
                        </chart>
                        <categoryDataset>
                            <dataset resetType="Group" resetGroup="splitter"/>
                            <categorySeries>
                                <seriesExpression><![CDATA[$F{description}]]></seriesExpression>
                                <categoryExpression><![CDATA[$F{year_built}]]></categoryExpression>
                                <valueExpression><![CDATA[$F{count}]]></valueExpression>
                            </categorySeries>
                        </categoryDataset>
                        <bar3DPlot>
                            <plot/>
                            <itemLabel/>
                            <categoryAxisFormat>
                                <axisFormat/>
                            </categoryAxisFormat>
                            <valueAxisFormat>
                                <axisFormat/>
                            </valueAxisFormat>
                        </bar3DPlot>
                    </bar3DChart>
                </band>
            </groupFooter>
        </group>
    </jasperReport>
    

    这会在每页生成一个类别。在这种情况下,正确的方法应该是什么?

2 个答案:

答案 0 :(得分:0)

这可以使用Reports Group完成,我之前已经完成了,

你可以尝试这个链接: - Split a chart in to multiple pages

只需替换

               $V{REPORT_COUNT} - 1 - ( ($V{REPORT_COUNT} - 1) % 3 ) 

               $V{REPORT_COUNT} - 1 - ( ($V{REPORT_COUNT} - 1) % 18 )

答案 1 :(得分:0)

如果我在拆分器后定义yearGroup,则上述报告按预期工作。我不确定团体的排序是否重要。