本稿の内容を増補改訂したアップデート版が提供されています。詳しくは連載の目次「5分でわかるActiveReports帳票」をご参照ください。
はじめに
ActiveReports for .NET(以下ActiveReports)はVisual Studioと統合された使いやすいレポートデザイナや高機能なレポートビューア、多彩な出力形態をサポートする帳票作成コンポーネントです。前回はActiveReportsの最新版3.0Jを利用した帳票アプリケーション開発の流れを簡単に紹介しましたが、今回はActiveReportsを利用した集計処理機能を中心に紹介していきます。
前回の記事
対象読者
- Visual Basic 2005またはVisual C# 2005を使ってプログラムを作ったことのある方。
- 帳票作成ツールに興味のある方。
必要な環境
- Visual Studio 2005、Visual Studio .NET 2003でプログラムが作れる環境。
本記事のサンプルコードは、C# 2.0/Visual Basic 2005で記述しています。
集計を含む帳票の作成
ActiveReportsが提供する各種の集計機能を利用すると、データソースやSQLの構造を複雑にすることなくデータの総合計やグループごとの小計、ページ数といった集計データを簡単に表示させることができます。
それでは、帳票側でデータを加工して表示する帳票を作成していきましょう。
最終的な完成イメージ
今回作成する帳票は、お店の注文伝票を月ごとに集計した「注文集計表」です。
各月の受注額を注文単位の小計、日単位の小計、月単位の合計3つで集計して表示します。また、月単位に宅配料金、値引料金の合計も表示します。
データの説明
今回使用するデータは、注文が入ると商品を複数まとめて宅配便で送るお店の受注データです。データベースは前回と同じく、ActiveReports 3.0J付属のNwind.mdbを使用し、注文伝票(Orders)、注文伝票明細(Order Details)、商品(Products)の3テーブルにアクセスします。
- 注文伝票テーブル(注文日、注文番号、宅配料金)
- 注文伝票詳細テーブル(注文番号、商品番号、単価、個数、割引率)
- 商品テーブル(商品番号、商品名)
次に、レポート出力するデータを取得するためのSQLを記述します。今回は「注文日」「注文番号」「宅配料金」「商品番号」「商品名」「単価」「数量」「割引額」「注文金額」を取得する、次のようなクエリを設定します(便宜のため、小数点以下の値を含む列はRound関数で丸めています)。
なお、クエリではSUMやCOUNTといった集計関数やGROUP BY句による集計処理は行いません。
SELECT YEAR(Orders.OrderDate) AS OrderYear, MONTH(Orders.OrderDate) AS OrderMonth, Orders.OrderDate, Orders.OrderID, Round(Orders.Freight, 0) As Freight, Products.ProductID, Products.ProductName, Round([Order Details].UnitPrice, 0) As UnitPrice, [Order Details].Quantity, Round(Round([Order Details].UnitPrice,0) * [Quantity] * [Discount], 0) AS DiscountPrice, Round(Round([Order Details].UnitPrice,0) * [Quantity] * (1 - [Discount]), 0) AS Price FROM Orders INNER JOIN (Products INNER JOIN [Order Details] ON Products.ProductID = [Order Details].ProductID) ON Orders.OrderID = [Order Details].OrderID ORDER BY Orders.OrderDate, Orders.OrderID,Products.ProductID ;