2013-07-31 106 views
0

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

How can I generate paginated bar chart in jasper report

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

Report

假设我们在X轴约50日,该报告将变大。所以我必须打破这个报告,这样我才能显示每页可配置的数量(比如3)。以下是我的做法:

  1. 创建一个组,日期字段
  2. 的创建,其对这个群体的变量。

    <?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> 
    

    这产生:1 - - - (($ V {变量1} 1)%3)

以下是JRXML文件

  • 与groupExpression $ V {变量1}创建另一组每页一个类别。在这种情况下应该采取什么正确的方法?

  • 回答

    0

    上述报告按预期工作,如果我defi ne在分组之后的yearGroup。我不确定团队的排序如何。

    0

    这可以使用报告组来完成,我刚才做了,

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

    是的,但这会限制每页图表中的18个条,但是我有一个可变数量的系列。如果我有4个类别,其中5个系列共计20个酒吧,则最后一个类别将被截断。在上面的公式中,我可以将18改为10,但是我的系列是可变的。 – Vaibhav

    +0

    您可以添加系列和类别变量$ V {REPORT_COUNT} - 1 - (($ V {REPORT_COUNT} - 1)%($ V {Number_of_Series} * $ V {Number_of_Categories})) – Sharad