我必须创建一个条形图,其中可以包含大量(大约50个)类别(X轴)。我希望将此报告分成多个页面,以便我可以应用分页。我已经找到了答案在这里:条形图中的分页与系列
How can I generate paginated bar chart in jasper report
但上面的答案讨论了单系列柱状图。 以下是我打算创建一个示例报告:
假设我们在X轴约50日,该报告将变大。所以我必须打破这个报告,这样我才能显示每页可配置的数量(比如3)。以下是我的做法:
- 创建一个组,日期字段
- 的创建,其对这个群体的变量。
<?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文件
是的,但这会限制每页图表中的18个条,但是我有一个可变数量的系列。如果我有4个类别,其中5个系列共计20个酒吧,则最后一个类别将被截断。在上面的公式中,我可以将18改为10,但是我的系列是可变的。 – Vaibhav
您可以添加系列和类别变量$ V {REPORT_COUNT} - 1 - (($ V {REPORT_COUNT} - 1)%($ V {Number_of_Series} * $ V {Number_of_Categories})) – Sharad