jasper reports - Pagination in bar chart with series -
i have create bar chart can have large amount (around 50) of categories (x axis). wish split report multiple pages can apply pagination. have found answer here:
how can generate paginated bar chart in jasper report
but above answer discusses bar chart single series. following sample report intend create:
assuming have around 50 dates in x axis, report become large. have break report such showing configurable amount (say 3) of categories per page. following approach:
- create group of date field
- create variable counts group.
- create group groupexpression $v{variable1} - 1 - ( ($v{variable1} - 1) % 3 )
following jrxml file:
<?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(*) count aircraft a, aircraft_types aty a.aircraft_type_id = aty.aircraft_type_id group year_built, description order 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>
this generates single category per page. should correct approach in scenario?
this can done using reports group, have done earlier ,
you can try link :- split chart in multiple pages
and replace
$v{report_count} - 1 - ( ($v{report_count} - 1) % 3 )
with
$v{report_count} - 1 - ( ($v{report_count} - 1) % 18 )
Comments
Post a Comment