1

Jasper iReport でグループごとに円グラフを使いたいのですが、グループごとにデータセットを作成する方法がわかりません。

次のようなテーブルがあるとします。

Table users
---------
category - user - status

次に、次のSQLがあります

select * from users order by category

私のディスプレイには、各ユーザーとそのステータスを詳細に示すカテゴリの単純なグループ バンドがあります。理想的には、各カテゴリ グループ ヘッダーに、そのグループ内のすべての個別のステータスとその数を示す円グラフを表示します。iReportでこれを行う方法がわかりません。

事前にすべてのカテゴリを知っていれば、次を使用して各カテゴリのデータセットを作成できます。

select status, count(user) from user where category = <current category> group by status

JRMapCollectionDataSource各グループをリセットし、変数を使用してグループ内の行からデータを取得するを使用してこれを実行しようとしていますが、グループのリセットとインクリメントのパラダイム全体にあまり詳しくありません。

何か助けはありますか?

4

1 に答える 1

4

この問題は、次の手順に従ってプログラミングせずに解決できます。

  1. カテゴリフィールドとユーザーフィールドでデータを並べ替えます( jdbc データソースを扱う場合は、iReportを使用して並べ替えを追加するか、クエリにORDER BY句を追加します)。
  2. 2 つのグループを追加します: 1 番目のグループ -カテゴリフィールド用と 2 番目のグループ -ユーザーフィールド用 ( iReport経由)。:クエリに必ずGROUP BY句を追加する必要はありません。
  3. カテゴリフィールドのグループ ヘッダーバンドに円グラフコンポーネントを追加します。
  4. このpieChartのEvaluationTimeおよびEvaluationGroup プロパティ設定します。

Pie Chartの作成方法を示すための作業サンプルを次に示します。このサンプルでは、​​csvファイルをデータソースとして使用しました。

グラフには、各カテゴリのユーザー数が表示されます。各グループのユーザー数をカウントするために変数usersCountを使用しましたが、組み込み変数を使用することは可能でした。$V{userGroup_COUNT}

ここに私のjrxmlファイルがあります:

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport ...>
    <field name="category" class="java.lang.Integer"/>
    <field name="user" class="java.lang.String"/>
    <field name="status" class="java.lang.String"/>
    <sortField name="category"/>
    <sortField name="user"/>
    <variable name="usersCount" class="java.lang.Integer" resetType="Group" resetGroup="userGroup" calculation="Count">
        <variableExpression><![CDATA[$F{user}]]></variableExpression>
        <initialValueExpression><![CDATA[0]]></initialValueExpression>
    </variable>
    <group name="categoryGroup">
        <groupExpression><![CDATA[$F{category}]]></groupExpression>
        <groupHeader>
            <band height="135">
                <pieChart>
                    <chart evaluationTime="Group" evaluationGroup="categoryGroup">
                        <reportElement x="158" y="0" width="200" height="135"/>
                        <chartTitle/>
                        <chartSubtitle/>
                        <chartLegend/>
                    </chart>
                    <pieDataset>
                        <dataset resetType="Group" resetGroup="categoryGroup" incrementType="Group" incrementGroup="userGroup"/>
                        <keyExpression><![CDATA[$F{user}]]></keyExpression>
                        <valueExpression><![CDATA[$V{usersCount}]]></valueExpression>
                        <labelExpression><![CDATA[String.valueOf($V{usersCount})]]></labelExpression>
                    </pieDataset>
                    <piePlot>
                        <plot/>
                        <itemLabel/>
                    </piePlot>
                </pieChart>
                <textField>
                    <reportElement x="0" y="0" width="100" height="20"/>
                    <textElement/>
                    <textFieldExpression><![CDATA["Category: " + $F{category}]]></textFieldExpression>
                </textField>
            </band>
        </groupHeader>
    </group>
    <group name="userGroup">
        <groupExpression><![CDATA[$F{user}]]></groupExpression>
    </group>
    <title>
        <band height="79" splitType="Stretch"/>
    </title>
</jasperReport>

これが私のcsvファイルです(データファイル - datasource):

category,user,status
1,user1,WORK
1,user1,HOLIDAY
1,user2,SICK
2,user1,WORK
2,user2,WORK
2,user2,HOLIDAY
2,user3,HOLIDAY
2,user4,SICK
3,user1,HOLIDAY
3,user3,HOLIDAY
3,user5,HOLIDAY
4,user1,WORK
4,user1,HOLIDAY
4,user2,SICK
4,user2,WORK
4,user2,SICK
4,user3,HOLIDAY
4,user4,HOLIDAY
4,user5,HOLIDAY

結果は次のようになります ( iReportプレビュー経由):

結果

于 2012-09-24T10:37:14.943 に答える