私はJRレポートに取り組んでおり、 iReportを使用してそれらを生成しています。
このタスクの解決策を探しています。詳細バンドには 6 つのレコードが必要です。たとえば、クエリはデータベースから 3 つのレコードをフェッチし、詳細バンドには 3 つの行がありますが、残りの 3 つの行を空白行として出力したいと考えています。
どうすればiReportでできますか?
私はJRレポートに取り組んでおり、 iReportを使用してそれらを生成しています。
このタスクの解決策を探しています。詳細バンドには 6 つのレコードが必要です。たとえば、クエリはデータベースから 3 つのレコードをフェッチし、詳細バンドには 3 つの行がありますが、残りの 3 つの行を空白行として出力したいと考えています。
どうすればiReportでできますか?
これを行うために私が考えることができる最善の方法は、クエリが6行(または行のセット数)を返すようにすることです。そうすれば、ジャスパーが異常なことをする必要はありません。
これは、Oracle 10 以降でこれを行う方法の例です。これを行うには、より良い方法があると確信しています。
with gen_6
-- creates a table of 6 rows (generate series)
as (SELECT LEVEL as row_num
FROM dual
CONNECT BY LEVEL <= 6),
Your_Query as
-- your query here <BR>
(select SYSDATE, ROWNUM as row_num from dual where rownum <=6)<BR>
select *
from gen_6 left join your_query using (row_num)
order by row_num
ご参考までに
これを機能させるために、「フィールド」row_num をレポートに追加する必要さえありません。
クエリの結果を 6 に制限し、通常どおりフィールドを詳細バンドに配置します。
次に、サマリーに 3 行のフィールドを作成します。
1 | || || || |
2 | || || || |
3 | || || || |
最初のPrint When Expression
行のすべてのフィールドの
new Boolean($V{REPORT_COUNT}.intValue() == 3 || $V{REPORT_COUNT}.intValue() == 4 || $V{REPORT_COUNT}.intValue() == 5)
2 行目のPrint When Expression
すべてのフィールドの
new Boolean($V{REPORT_COUNT}.intValue() == 3 || $V{REPORT_COUNT}.intValue() == 4)
3 行目のPrint When Expression
すべてのフィールドの
new Boolean($V{REPORT_COUNT}.intValue() == 3)
フィールドの最初の行の位置は、フィールドが詳細セクションの一部であるかのように見えるように、集計バンドの一番上にある必要があります。
最も簡単な方法: データ ソースからレコード数を複製するか、必要な数をハードコードするために、詳細バンドに N テキストフィールドを含めるだけです。
例:
Detail Band
----------------
| FIELD_X
| FIELD_X
----------------
この場合、DB から 3 つのレコードを受け取り、6 つの値を出力します。
別のオプション: 必要なルールを使用して 2 つのサブレポートを作成し、それを詳細ページに含めます。
例:
Detail Band
----------------
| SUBREPORT_1
| SUBREPORT_2
----------------
この場合、DB から 3 つのレコードを受け取り、各サブレポートに 3 つの値を出力するため、2 番目のサブレポートでは行を空白のままにするか、その他のルールにすることができます。
ビジネス例: このアプローチは、特定のクレジットまたはデビットに異なるアカウントを割り当てる必要がある金融インターフェイスに使用できます。