2013-07-31 390 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