0

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

如何在碧玉报告中生成分页条形图

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

报告

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

  1. 创建一组日期字段
  2. 创建一个计算该组的变量。
  3. 使用 groupExpression $V{variable1} - 1 - ( ($V{variable1} - 1) % 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="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>

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

4

2 回答 2

0

这可以使用 Reports Group 来完成,我之前做过,

您可以尝试此链接:- 将图表拆分为多个页面

只需更换

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

               $V{REPORT_COUNT} - 1 - ( ($V{REPORT_COUNT} - 1) % 18 )
于 2013-08-01T04:26:24.443 回答
0

如果我在拆分器之后定义 yearGroup,则上述报告按预期工作。我不确定组的顺序有多重要。

于 2013-08-04T04:16:54.870 回答