2013-07-31 3 views
0

Мне нужно создать гистограмму, которая может иметь большое количество (около 50) категорий (X Axis). Я хочу разбить этот отчет на несколько страниц, чтобы я мог применять разбиение на страницы. Я нашел ответ здесь:Разбивка на гистограмме серии

How can I generate paginated bar chart in jasper report

Но выше ответ обсуждает гистограмму с одной серии. Ниже приведен пример отчета, который я намерен создать:

Report

Предположим, что мы имеем около 50 дат в оси X, отчет будет большим. Поэтому я должен разорвать этот отчет таким образом, что я показываю настраиваемую сумму (скажем, 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> 

Это создает одна категория на страницу. Каким должен быть правильный подход в этом сценарии?

ответ

0

Приведенный выше отчет работает, если предполагается, 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

Смежные вопросы