サブレポートでカウントしているアイテムの総計を作成する必要があります。そのためには、反復ごとにその変数の値を別の変数に追加するか、その値で「インクリメント」する必要があると思います。サブレポートはグループごとに呼び出され、そのグループの合計を取得します。データベースの列/フィールドではなく、変数値を追加する必要があります。
returnValue
から整数subReport
を受け取りました。これは、それ自体がサブレポートの行数です。そのsubReport
は、メインのSQLクエリからのさまざまな結果(それぞれがGROUPに対して)に対して複数回呼び出されるため、総計を取得したいと思います。すべての結果を合計したいのですが、null
の値を取得しています。 subReport
に新しいreturnValue
として操作を追加し、操作としてSum
を選択しようとしましたが、null
も生成されました。
<variable name="itemCount" class="Java.lang.Integer" resetType="None"/>
<variable name="grandCount"
class="Java.lang.Integer"
incrementType="Group"
incrementGroup="ITEM_BUNDLE">
<variableExpression><![CDATA[$V{itemCount}]]></variableExpression>
</variable>
...
<returnValue subreportVariable="countItems" toVariable="itemCount"/>
属性を追加calculation="Sum"
からvariable name="grandCount"
または、grandCount
をパラメータとしてサブレポートに渡します
<subreportParameter name="grandCount">
<subreportParameterExpression><![CDATA[$P{grandCount}]]></subreportParameterExpression>
</subreportParameter>
サブレポートで変数を宣言しますcountItemsパラメータのinitialValueを使用しますgrantCount
<variable name="countItems" .... >
<variableExpression><![CDATA[$P{itemCount} + $P{grandCount}]]></variableExpression>
<initialValueExpression><![CDATA[$P{grandCount}]]></initialValueExpression>
</variable>
そして戻る
<returnValue subreportVariable="countItems" toVariable="grandCount" calculation="Sum"/>
バンド(グループ)がサブレポートのバンド(グループ)と等しい場合にのみ、変数(totalSumと名付けました)をインクリメントしようとする場合があります。このためには、現在のバンド(グループ)を提供するためにレポートにフィールドが必要になります。
<variable name="totalSum"
class="Java.lang.Integer"
resetType="Report"
incrementType="Group"
incrementGroup="ITEM_BUNDLE"
calculation="Nothing">
<variableExpression>
<![CDATA[new Boolean($F{reportPart}.equals("The_band_with_the_subreport")).booleanValue() ? $V{returnValue} : $V{totalSum}]]>
</variableExpression>
<initialValueExpression>
<![CDATA[new Integer(0)]]>
</initialValueExpression>
</variable>
これが機能するかどうかはわかりません。テストするためのコンテキストがありません。ただし、3つの変数を使用して2番目のソリューション-を試すこともできます。たとえば、サブレポートから返された値(たとえば、returnValue)を変数に保持し、別の2つの変数を使用して合計を保持します。1つはサブレポートが呼び出されるまで(たとえば、partialSum)と、returnValueとpartialSumの間の合計を格納する2番目。それをtotalSumと呼びましょう。次に、totalSumに対して次のようなものがあります。
<variable name="totalSum"
class="Java.lang.Integer"
resetType="Report"
incrementType="Group"
incrementGroup="ITEM_BUNDLE"
calculation="Nothing">
<variableExpression>
<![CDATA[$V{returnValue} + $V{partialSum}]]>
</variableExpression>
<initialValueExpression>
<![CDATA[new Integer(0)]]>
</initialValueExpression>
</variable>
PartialSumの場合、次のようになります。
<variable name="partialSum"
class="Java.lang.Integer"
resetType="Report"
calculation="Sum"
incrementType="None">
<variableExpression>
<![CDATA[new Boolean($F{reportPart}.equals("The_band_with_the_subreport")).booleanValue() ? $V{returnValue} : new Integer(0)]]>
</variableExpression>
<initialValueExpression>
<![CDATA[new Integer(0)]]>
</initialValueExpression>
</variable>
これが少し役立つことを願っています。使用するレポートで、iRportからこれらすべての設定を直接行う方が簡単です。
私はiReportを使用しているので、JRXMLでそれを書く方法を正確に理解していません。 iReportで、クラスタイプが「整数」、計算タイプが「システム」の新しい変数を作成します。ここでは、計算タイプが重要です。
変数式では、$ V {grandCount} = $ V {grandCount} + $ V {itemCount}のようなものが必要になります
注:JasperReportsはバンドごとにレンダリングするため、サブレポートバンドの前のバンドでgrandCount変数を使用することはできません。
手遅れではないことを願っています