【问题标题】:Pagination in bar chart with series带系列的条形图中的分页
【发布时间】:2013-08-04 12:16:54
【问题描述】:

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

How can I generate paginated bar chart in jasper report

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

假设我们在 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>

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

【问题讨论】:

    标签: jasper-reports bar-chart


    【解决方案1】:

    这可以使用报告组来完成,我之前做过,

    你可以试试这个链接:- 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 )
    

    【讨论】:

    • 是的,但这将限制每页图表中的 18 个条形图,但我有可变数量的系列。如果我有 4 个类别和 5 个系列,总共 20 条,最后一个类别将被截断。我可以在上面的等式中将 18 更改为 10,但我的系列是可变的。
    • 您可以为系列和类别添加变量 $V{REPORT_COUNT} - 1 - ( ($V{REPORT_COUNT} - 1) % ($V{Number_of_Series} * $V{Number_of_Categories}) )
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2019-04-13
      • 1970-01-01
      • 2019-04-30
      • 2016-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-24
      相关资源
      最近更新 更多