レポートの処理時間を短縮するための最も重要な方法は、データベースから返されるデータ量を制限することです。そのために重要なツールがレコード選択式です。
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 番目の式では、データベース サーバが独自のデータを処理する場合に使用可能な能力と最適化機能を活用できます。
レコード選択の要求を設定する際には、処理速度に関して考慮する点がいくつかあります。
全般
たとえば、ToText( ) を使用して数値型データベース フィールドを文字列型データベース フィールドに変換することは避けます。
SQL データベース