0

いくつかのレポートがあり、それぞれにいくつかのテーブルが含まれています。

tableA、tableB、tableC の 3 つのテーブルがあるとします。次の Oracle 関数を使用して、結果セットをフィルタリングし、レポート パラメータも渡したいと考えています。

AND function(tableB.field1, tableB.field2, tableB.field3, {?report_parameter}) = 'S'

注意すべき事実:

  • Oracle 関数は、Crystal Reports の SQL 式や SQL コマンドでのみ使用できます。
  • SQL 式にレポート パラメーターを含めることはできません (そのため、オプションではありません)。
  • Crystal Reports では、レポート テーブルを SQL コマンドに置き換えることができますが、複数のテーブルを単一の SQL コマンドに置き換えることはできません。
  • すべてのレポートを最初から作り直す必要はありません。
  • Crystal はレポートの実行時に単一のクエリでテーブルと SQL コマンドを変換しないため、高レベルのパフォーマンスに影響するため、単一のテーブルを SQL コマンドに置き換えたくありません。
  • この Oracle 関数は、他のテーブルからデータを選択するため、レポート カスタム関数で書き換えることはできません。
  • {?report_parameter} は、アプリケーションだけが知っている情報です。レポートをユーザーにエクスポートする前に、アプリケーションによって入力されます。

これを回避するにはどうすればよいですか?

4

1 に答える 1

0

関数にテーブルとパラメーターが必要な理由が正確にわからないため、あいまいでテストされていないオプションしか提供できません。どのオプションも理想的ではありません。

  • Oracle 関数を「カスタム関数」(CF) として書き直します。レコード選択式で CF を参照します。フィルターが適用される WhileReadingRecords (つまり、関数はデータベースに送信されません)
  • 1 つのパラメーターを受け取り、レコード セットを返すストアド プロシージャとして関数を書き直します (パラメーターは Crystal Reports によって認識されます)。他のテーブルをストアド プロシージャに結合します。ストアド プロシージャは、Crystal Reports のデータ ニーズをサポートする方法で記述する必要があります (ゲージ チャートの値としてパラメータを持つストアド プロシージャの結果を使用 - asp.net アプリケーションの Crystal レポート) 。
于 2012-10-09T12:44:39.073 に答える