1

横棒グラフを複数のページに分割したいと考えています。Category Expressions データセットが 200 前後と巨大であり、グラフが判読できない形式になっているためです。

たとえば、最初の 15 のカテゴリを page1 に表示するために、Category Expression データセットを 15 のブロックに分散する必要があります。iReport Professional 4.5.0を使用してJasperReports Serverで実行できるかどうか疑問に思っていました。

4

2 に答える 2

4

これを実現するために、レポート グループを利用できます。レポートを iReport で開きます。catレポート クエリはメインのレポート クエリです。サンプルでは、​​カテゴリと値の 2 つのフィールドを参照しvalます。

  • レポート インスペクターでレポートを右クリックし、 [レポート グループの追加] を選択します。ウィザードに従って名前を設定し (例: splitter )、Group by the following expressionを選択してを入力し$V{REPORT_COUNT} - 1 - ( ($V{REPORT_COUNT} - 1) % 15 )ます。[次へ] をクリックし、[グループ フッターを追加]を選択します。
  • グラフ要素をパレットからレポート デザイナーのグループ フッター バンドにドラッグ アンド ドロップします。棒グラフを選択し、ウィザードに従います。
    • [メイン レポート データセット]を選択し、[次へ] をクリックします。
    • 系列表現を必要なもの (例: "Sample") に変更し、[次へ] をクリックします。
    • カテゴリ式を$F{cat}、値式を に設定します$F{val}。[完了] をクリックします。ウィザードが閉じ、グラフがレポートで構成されます。
  • チャートを右クリックし、[チャート データ] をクリックします。[データセット] パネルで [リセット タイプ] を[グループ] に設定し、[リセット グループ] としてグループを選択します (例: splitter )。閉じるをクリックします。

推奨事項 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>
于 2013-01-25T11:07:06.487 に答える