2017-03-01 35 views
1

ユーザが2つのパラメータを選択する必要があるレポートが必要です。最初のパラメータには年(2017,2016 ...)が含まれ、2番目のパラメータにはIDプロセスが含まれます。ユーザーが選択するプロセスに応じて、SQLステートメントは1つまたは別のステートメントになります。パラメータyearは、2番目のパラメータに含まれるSQLのWHERE句の一部です。パラメータとしての動的SQLクエリ

私は2つのパラメータ(param_year,Indicador)でこのレポートを持っています。クエリパラメータは、テーブルデータソースを使用して実行されます.ID列にはSQL文が含まれ、値列にはユーザーが選択する必要があるテキストが含まれます。

Setting the parameter

は、だから私は、次のやっている私は、データベースに行っていることをJDBC接続でのSQLステートメントとしてset ${Indicador}にあります。 。。これは、SQLエラー

は、「クエリで失敗した私に報告している:。$ {Indicador}

Setting the parameter as the SQL statement

任意の提案が理解されるであろう事前に感謝をあなたが必要とする

答えて

0

別のオプションは、Master/sub Report -> Attributes -> query -> name属性にPRD表現を使用して、適切なデータソースを選択し、です。

より詳細な説明:

  1. あなたが必要とするすべてのSQL文字列のために(私はPRDデータソースを使用していますPRDオブジェクトとしてクエリを意味する)クエリを作成し、パラメータテーブルからSQL文字列を移動しますレポートデザイナーのクエリ定義に追加します。
  2. 例えば、対応するクエリの名前を使用して、パラメータテーブル内のSQL文字列を置き換えます。 query name expression
  3. parameter table
  4. Master/sub Report -> Attributes -> query -> name属性の値として(PRDクエリ名と同じであるべきである)あなたのパラメータの値を使用します
+0

私は間違っていませんでした。それは完全に動作します。どうもありがとうございました!!! – Mascu

0

この種の動的クエリを行うためのPentahoデータ統合

0

両方のクエリのテーブル構造(出力列) UNION ALLを持つ1つの大きなSQL文にまとめて、各クエリ "WHERE $ {Indicador} = ValueToRunThisQuery"に入れることができます。

オプティマイザは、選択されていないサブクエリがゼロ行を返し、実行しないことを知るには十分にスマートであるべきです。 1つのクエリの列数が少ない場合でも、空の列のデータ型が同じである必要がある場合は、いくつかのNULL列を指定できます。

出力テーブル構造が2つのクエリ間で異なる場合、それらは異なるデータソースまたはレポートに存在する必要があります。 があなたのマスター/サブレポートでを複数のデータソースを作成するには

SELECT ID, BLA, BLA, BLA, ONLY_IN_A 
FROM TABLE A 
WHERE ${Indicador} = "S010" 
UNION ALL 
SELECT ID, BLA, BLA, BLA, NULL 
FROM TABLE B 
WHERE ${Indicador} = "S020"