Мне нужно создать гистограмму, которая может иметь большое количество (около 50) категорий (X Axis). Я хочу разбить этот отчет на несколько страниц, чтобы я мог применять разбиение на страницы. Я нашел ответ здесь:Разбивка на гистограмме серии
How can I generate paginated bar chart in jasper report
Но выше ответ обсуждает гистограмму с одной серии. Ниже приведен пример отчета, который я намерен создать:
Предположим, что мы имеем около 50 дат в оси X, отчет будет большим. Поэтому я должен разорвать этот отчет таким образом, что я показываю настраиваемую сумму (скажем, 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>
Это создает одна категория на страницу. Каким должен быть правильный подход в этом сценарии?
Да, но это ограничит 18 баров в диаграмме на странице, но у меня есть переменное количество серий. Если у меня есть 4 категории с 5 рядами, составляющими в общей сложности 20 баров, последняя категория будет усечена. Я могу изменить 18 до 10 в приведенном выше уравнении, но моя серия является переменной. – Vaibhav
Вы можете добавить переменные для серий и категорий $ V {REPORT_COUNT} - 1 - (($ V {REPORT_COUNT} - 1)% ($ V {Number_of_Series} * $ V {Number_of_Categories})) – Sharad