ActiveReports for.Netレポート開発のクロスレポート
16314 ワード
【IT 168技術文書】
クロス・レポートは一般的なレポート・タイプであり、開発も煩わしいレポートです.ActiveReportでは、クロス・レポートに十分な柔軟性を提供し、複雑なビジネス・ロジックに対応できます.前のエッセイで主従表を示した後、このエッセイではクロスレポートの作成方法を簡単に紹介します.クロス・レポートの一般的なアプリケーションの1つは、売上高を表示するレポートとして使用されます.たとえば、複数のチェーン店の1年以内の毎月の売上高を表示し、月を列として表示することがよくあります.各店は1行で表示されます.
店名
1月
2月
3月
……………
AC
500
200
10000
……………
BC
511
85245
4545
……………
しかし、データベース内のストレージは、次のような方法で使用されることが多い.
Sales
Month
Shop
12312
1
AB
243423
2
AB
323232
3
AB
1231312
1
BC
1232
2
BC
これにより、表示前にデータを処理し、売上高と月を列に変換する必要があります.データを取得する際にsqlを使用してこれらの操作を行うことができます.ここでは、activeReportでの使用を示すために、変換をレポートに入れて作成します.例を簡略化するために、最初の四半期の毎月の売上高だけを表示します.
1. データの取得:
SelectSales,Month,Shop from CrossReport Order by Shopのようなsqlを使用してデータを直接取得し、合計や変換処理を行わない.
2. 変換:
最終的に表示するレコードを表す簡単なオブジェクトを定義します.
同時に、変換後のデータを保存するためにSaleのセットsalesを定義します.表には各店舗で複数のレコードが対応しているため、複数のレコードを1つにまとめるために、以下の変換動作を行います.
3. 表示:データベースから取り出したレコードを変換し、レポートに表示するフォーマットにします.次に、Salesコレクションのデータをレポートに表示します.前のエッセイで説明した方法に従って、インタフェースにコントロールを配置し、そのFiledNameフィールドを設定してレポートのDataInitializeイベントにFiledセットを設定し、データを取り出します.
最後のレコードが表示されたかどうかを示すタグを設定します.
FetchDataイベントにSalesコレクションのデータを表示します.
上記の手順に従って、主要なコードはすべて完了しました.もちろん、フォームに表示し、Viewerを追加して、ロードされたレポートを指定します.
表示の効果に不満がある場合は、レポートにオンラインボックスを付けて表に表示することができます.まとめ:例のコードは重複しているが,変換の過程を説明するために最適化されていない,また,コードにArrayListが用いられ,箱詰め,解体の動作が現れるため,性能に最適化の余地があることも分かる.表データから表示用データへの変換はSqlで行うことができますが、ビジネスロジックが複雑な場合、Sqlは力不足に見えます.例えば、毎月のデータを表示し、収入、支出もあります.税金、割引、損失、賃貸料、前年同期との比較など予測できないビジネスロジックを加えると、SQLをコードに書くと、デバッグが問題になり、ストレージプロセスに書くと、パッケージを破壊しました.したがって,コードでの変換作業は複雑であるが,柔軟な利点がある.
クロス・レポートは一般的なレポート・タイプであり、開発も煩わしいレポートです.ActiveReportでは、クロス・レポートに十分な柔軟性を提供し、複雑なビジネス・ロジックに対応できます.前のエッセイで主従表を示した後、このエッセイではクロスレポートの作成方法を簡単に紹介します.クロス・レポートの一般的なアプリケーションの1つは、売上高を表示するレポートとして使用されます.たとえば、複数のチェーン店の1年以内の毎月の売上高を表示し、月を列として表示することがよくあります.各店は1行で表示されます.
店名
1月
2月
3月
……………
AC
500
200
10000
……………
BC
511
85245
4545
……………
しかし、データベース内のストレージは、次のような方法で使用されることが多い.
Sales
Month
Shop
12312
1
AB
243423
2
AB
323232
3
AB
1231312
1
BC
1232
2
BC
これにより、表示前にデータを処理し、売上高と月を列に変換する必要があります.データを取得する際にsqlを使用してこれらの操作を行うことができます.ここでは、activeReportでの使用を示すために、変換をレポートに入れて作成します.例を簡略化するために、最初の四半期の毎月の売上高だけを表示します.
1. データの取得:
SelectSales,Month,Shop from CrossReport Order by Shopのようなsqlを使用してデータを直接取得し、合計や変換処理を行わない.
2. 変換:
最終的に表示するレコードを表す簡単なオブジェクトを定義します.
public
class
Sale {
public
decimal
money1;
//
public
decimal
money2;
//
public
decimal
money3;
//
public
string
shopname; }
同時に、変換後のデータを保存するためにSaleのセットsalesを定義します.表には各店舗で複数のレコードが対応しているため、複数のレコードを1つにまとめるために、以下の変換動作を行います.
//
,
ArrayList shopname
=
new
ArrayList();
while
(dr.Read()) {
if
(
!
shopname.Contains(dr.GetString(
2
)))
//
{ Sale s
=
new
Sale (); s.shopname
=
dr.GetString(
2
);
//
shopname.Add(s.shopname);
if
(dr.GetInt32(
1
)
==
1
)
//
{ s.money1
=
dr.GetDecimal(
0
); }
else
if
(dr.GetInt32(
1
)
==
2
)
//
{ s.money2
=
dr.GetDecimal(
0
); }
else
if
(dr.GetInt32(
1
)
==
3
)
//
{ s.money3
=
dr.GetDecimal(
0
); } sales.Add(s); }
else
//
{ Sale s
=
(Sale)sale [sales.Count
-
1
];
if
(dr.GetInt32(
1
)
==
1
) { s.money1
=
dr.GetDecimal(
0
); }
else
if
(dr.GetInt32(
1
)
==
2
) { s.money2
=
dr.GetDecimal(
0
); }
else
if
(dr.GetInt32(
1
)
==
3
) { s.money3
=
dr.GetDecimal(
0
); } } }
3. 表示:データベースから取り出したレコードを変換し、レポートに表示するフォーマットにします.次に、Salesコレクションのデータをレポートに表示します.前のエッセイで説明した方法に従って、インタフェースにコントロールを配置し、そのFiledNameフィールドを設定してレポートのDataInitializeイベントにFiledセットを設定し、データを取り出します.
this
.Fields.Add(
"
money1
"
);
this
.Fields.Add(
"
money2
"
);
this
.Fields.Add(
"
money3
"
);
this
.Fields.Add(
"
shopname
"
);
this
.GetReportData();
//
最後のレコードが表示されたかどうかを示すタグを設定します.
int
index
=
0
;
FetchDataイベントにSalesコレクションのデータを表示します.
if
(index
==
sales.Count )
//
,
{ eArgs.EOF
=
true
;
return
; }
else
{ eArgs.EOF
=
false
; } Sale s
=
(Sale)sales[index];
this
.Fields[
"
shopname
"
].Value
=
s.shopname;
this
.Fields[
"
money1
"
].Value
=
s.money1;
this
.Fields[
"
money2
"
].Value
=
s.money2;
this
.Fields[
"
money3
"
].Value
=
s.money3; index
+=
1
;
上記の手順に従って、主要なコードはすべて完了しました.もちろん、フォームに表示し、Viewerを追加して、ロードされたレポートを指定します.
ActiveReports1 rpt
=
new
ActiveReports1(); rpt.Run();
this
.viewer1.Document
=
rpt.Document;
表示の効果に不満がある場合は、レポートにオンラインボックスを付けて表に表示することができます.まとめ:例のコードは重複しているが,変換の過程を説明するために最適化されていない,また,コードにArrayListが用いられ,箱詰め,解体の動作が現れるため,性能に最適化の余地があることも分かる.表データから表示用データへの変換はSqlで行うことができますが、ビジネスロジックが複雑な場合、Sqlは力不足に見えます.例えば、毎月のデータを表示し、収入、支出もあります.税金、割引、損失、賃貸料、前年同期との比較など予測できないビジネスロジックを加えると、SQLをコードに書くと、デバッグが問題になり、ストレージプロセスに書くと、パッケージを破壊しました.したがって,コードでの変換作業は複雑であるが,柔軟な利点がある.