レポートの処理時間を短縮するための最も重要な方法は、データベースから返されるデータ量を制限することです。そのために重要なツールがレコード選択式です。
Crystal Reports は、レコード選択式を分析し、その結果から SQL クエリーを生成します。この SQL クエリーはデータベースによって処理され、結果のレコードが Crystal Reports に返されます。Crystal Reports は、データベースから取得したレコードのそれぞれに対してローカルでレコード選択式を評価し、レポート作成に使用するレコードセットを計算します。
不要なレコードは、まず SQL クエリーを使ってデータベースで除去され、次にレコード選択式を使って Crystal Reports で除去される、というように 2 段階で除去されます。処理速度の点で見ると、最初の段階でできるだけ多くのレコードを除去する必要があります。レコード選択式を効率的に組み立てることで、レポート処理の負荷の多くをデータベース サーバーに移すことができます。これにより、不必要なレコードが Crystal Reports に返される前に除去されます。一般に、これを“レコード選択をデータベース サーバーにプッシュダウンする”と言います。
表示するデータの指定を求めてくるパラメータ フィールドを作成できます。これにより、レポートを開くたびにすべてのレポートのデータが表示されなくなります。データベース サーバーから転送されるデータの量を削減するには、これらのパラメータ フィールドをレコード選択式に取り込みます。
通常、パラメータ フィールドは、ユーザーとの対話な機能を提供し、ユーザーはパラメータのプロンプトに応答することで表示するデータを指定できます。ただし、パラメータ フィールドをレコード選択式に取り込むことで、対話機能の提供だけではなく、データ転送量を削減してパフォーマンスを向上できます。
選択エキスパートまたはレコード選択式エディタを使用して、レコード選択式へパラメータ フィールドを追加できます。レコード選択式エディタを使用すれば、他のフィールドと同様にパラメータ フィールドを処理できます。「式へのパラメータの組み込み」を参照してください。
最適化されたレポートの処理速度を維持するには、レコード選択式内で式(Crystal 構文または Basic 構文のどちらも)を使用しないでください。その代わりに、元の式を同等の SQL 式フィールドで置き換えて、SQL 式フィールドをレコード選択式に取り込みます。これにより、レコード選択がサーバーにプッシュ ダウンされる機会が大幅に増えます。
さらに、式フィールド(Crystal 構文またはBasic 構文のどちらも)の並べ替え、グループ化または総計は行わないでください。その代わりに、元の式フィールドを同等の SQL 式フィールドで置き換え、その後 SQL 式フィールドで並べ替え、グループ化、集計を行います。この場合も、処理がサーバー上で実行される機会が大幅に増えます。
また、データベースがケース ロジックをサポートしていて、レポートが If-Then-Else 式の計算を集計する必要がある場合は、式を SQL 式フィールドで置き換えます。このような場合、SQL 式フィールドにより、Crystal Reports はサーバー上でレポートのグループ化を行えるようになります。「SQL 式」を参照してください。