横棒グラフを複数のページに分割したいと考えています。Category Expressions データセットが 200 前後と巨大であり、グラフが判読できない形式になっているためです。
たとえば、最初の 15 のカテゴリを page1 に表示するために、Category Expression データセットを 15 のブロックに分散する必要があります。iReport Professional 4.5.0を使用してJasperReports Serverで実行できるかどうか疑問に思っていました。
横棒グラフを複数のページに分割したいと考えています。Category Expressions データセットが 200 前後と巨大であり、グラフが判読できない形式になっているためです。
たとえば、最初の 15 のカテゴリを page1 に表示するために、Category Expression データセットを 15 のブロックに分散する必要があります。iReport Professional 4.5.0を使用してJasperReports Serverで実行できるかどうか疑問に思っていました。
これを実現するために、レポート グループを利用できます。レポートを iReport で開きます。cat
レポート クエリはメインのレポート クエリです。サンプルでは、カテゴリと値の 2 つのフィールドを参照しval
ます。
$V{REPORT_COUNT} - 1 - ( ($V{REPORT_COUNT} - 1) % 15 )
ます。[次へ] をクリックし、[グループ フッターを追加]を選択します。"Sample"
) に変更し、[次へ] をクリックします。$F{cat}
、値式を に設定します$F{val}
。[完了] をクリックします。ウィザードが閉じ、グラフがレポートで構成されます。推奨事項 1 : チャートを選択し、[プロパティ] パネルでRange Axis Max Value Expressionまでスクロールし、そこでチャートの最大値を設定します。これにより、すべてのグラフが同じ縮尺になります。添付のサンプルでは静的に 100 に設定していますが、データベース クエリを介して最大値を指定することもできます。
推奨事項 2 : レポートを実行すると、JasperReports/jfreechart がカテゴリの数に応じて棒の幅を調整するため、最後の棒グラフが異なって見える場合があることに気付く場合があります。棒グラフの幅を静的にするには、単一の棒に固定幅を設定するチャート カスタマイザーを作成する必要があります。
サンプル データセットでスプリッタ値を 3 に設定したサンプル出力を添付しました。
さらに参照するために、JRXML も添付します。上記の説明との違いは、静的な値を使用する代わりに、1 つの棒グラフの要素数を定義するパラメーターを定義したことです。
<?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="report5" language="groovy" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="271b22ae-bc2f-4da1-a499-e41a8f4252b2">
<property name="ireport.zoom" value="1.0"/>
<property name="ireport.x" value="0"/>
<property name="ireport.y" value="0"/>
<parameter name="splitBy" class="java.lang.Integer">
<defaultValueExpression><![CDATA[3]]></defaultValueExpression>
</parameter>
<queryString>
<![CDATA[select val, cat from (
select 15 as val, "A" as cat
union select 65 as val, "B" as cat
union select 34 as val, "C" as cat
union select 99 as val, "D" as cat
union select 67 as val, "E" as cat
union select 23 as val, "F" as cat
union select 76 as val, "G" as cat
union select 23 as val, "H" as cat
union select 56 as val, "I" as cat
union select 11 as val, "J" as cat
union select 23 as val, "K" as cat
union select 5 as val, "L" as cat
union select 11 as val, "M" as cat
union select 15 as val, "N" as cat
union select 12 as val, "O" as cat
union select 13 as val, "P" as cat
) tbl group by cat
]]>
</queryString>
<field name="val" class="java.lang.Long"/>
<field name="cat" class="java.lang.String"/>
<group name="splitter">
<groupExpression><![CDATA[$V{REPORT_COUNT} - 1 - ( ($V{REPORT_COUNT} - 1) % $P{splitBy} ) ]]></groupExpression>
<groupFooter>
<band height="154">
<barChart>
<chart>
<reportElement uuid="e046c83e-11c5-4f3a-adfb-a540024400f5" x="0" y="0" width="555" height="154"/>
<chartTitle/>
<chartSubtitle/>
<chartLegend/>
</chart>
<categoryDataset>
<dataset resetType="Group" resetGroup="splitter"/>
<categorySeries>
<seriesExpression><![CDATA["Sample"]]></seriesExpression>
<categoryExpression><![CDATA[$F{cat}]]></categoryExpression>
<valueExpression><![CDATA[$F{val}]]></valueExpression>
</categorySeries>
</categoryDataset>
<barPlot>
<plot/>
<itemLabel/>
<rangeAxisMaxValueExpression><![CDATA[100]]></rangeAxisMaxValueExpression>
</barPlot>
</barChart>
</band>
</groupFooter>
</group>
</jasperReport>