Crystal Reports  

データベース サーバーへのレコード選択のプッシュ ダウン

レポートの処理時間を短縮するための最も重要な方法は、データベースから返されるデータ量を制限することです。そのために重要なツールがレコード選択式です。

Crystal Reports に付属する SQL データ ソース用のドライバを使用すると、レコード選択をデータベース サーバーに "プッシュ ダウン" できます。SQL データ ソースに基づいてレポートにレコード選択式を指定すると、その式は Crystal Reports によって分析され、SQL クエリーが生成されて、そのΣΘΛ クエリーがデータベース サーバーに送られます。レコード選択は次の 2 段階に分かれます。

データベース サーバーは、通常、ワークステーションよりも処理速度が速いため、サーバーで処理できるレコード選択式を第 1 段階で指定すると効果的です。そのように指定すると、第 2 段階でのローカル コンピュータのレコード選択が最小限に抑えられます。サーバーにプッシュ ダウンできるレコード選択の種類は次のとおりです。

レコード選択のプッシュ ダウンの例

この例では、データベース サーバにプッシュ ダウンできるレコード選択式を記述することの利点について説明します。

Xtreme サンプル データベースの Orders テーブルには 2,192 のレコードがあり、そのうちの 181 レコードは 2001 年以前の受注日付を持っています。これらのレコードだけを対象としてレポートを作成する必要があるとします。一方、次のレコード選択式を使用できるとします。

Year ({Orders.Order Date}) < 2001

生成された SQL クエリーは、2,192 のレコードすべてを Crystal Reports に送り、次に、このレコード選択式がレコードの数を 181 まで絞ります。これを確認するには、[データベース]メニューの[SQL クエリーの表示]をクリックし、SQL クエリーに WHERE 句がないことに注目してください。これは、Crystal Reports が WHERE 句の中に Year()関数をプッシュ ダウンできないからです。

一方、次のレコード選択式は同じレポートを生成します。

{Orders.Order Date} < #Jan 1, 2001#

この 2 番目の式は、データベース サーバーで実行できるのでプッシュ ダウンされます。生成された SQL クエリーは、181 レコードだけを Crystal Reports に送るので、次に Crystal Reports がレコード選択式を評価するときには、除去する必要があるレコードは既にありません。[データベース]メニューの[SQL クエリーの表示]をクリックし、結果の SQL クエリーに WHERE 句がないことを確認してください。

この例で示しているように、レコード選択式を強化するとレポートの処理速度が向上します。この場合、どちらの式でも同じレポートが生成されますが、2 番目の式では、データベース サーバが独自のデータを処理する場合に使用可能な能力と最適化機能を活用できます。

レコード選択の処理速度に関するヒント

レコード選択の要求を設定する際には、処理速度に関して考慮する点がいくつかあります。

全般

SQL データベース

参照

基本的なレコード選択 | SQL 式