2017-03-01 143 views
1

我需要一個報告,用戶必須選擇2個參數。第一個參數包含年份(2017,2016 ...),第二個參數包含ID過程。根據用戶選擇的過程,SQL語句將是一個或另一個。參數year是第二個參數中包含的SQL的WHERE子句的一部分。動態SQL查詢作爲參數

所以我有這個報告2參數(param_year,Indicador)。查詢參數是使用表數據源完成的,其中IDs列包含SQL語句,而Values列包含用戶必須選擇的文本。

Setting the parameter

所以我在做什麼其次是set ${Indicador}如JDBC連接,我已經做了到數據庫的SQL語句。這是報告我一個SQL錯誤

在查詢「失敗:$ {Indicador}

Setting the parameter as the SQL statement

任何建議,將不勝感激謝謝提前

回答

0

另一種選擇是在您的主/子報表中創建多個數據源,然後使用上Master/sub Report -> Attributes -> query -> name屬性珠三角表達選擇合適的數據源。

更詳細的解釋:

  1. 創建查詢(我的意思是查詢作爲珠三角對象,使用珠三角數據源),你需要每一個SQL字符串,從參數表中移動的SQL字符串導入報表設計器查詢定義。 parameter table
  2. 用你的參數值(應等於珠三角查詢名稱)的值Master/sub Report -> Attributes -> query -> name屬性: query name expression
  3. 與相應的查詢的名稱,例如替換你的參數表中的SQL字符串
+0

我並沒有太大的錯誤。它完美的作品。非常感謝你!!! – Mascu

0

需要。 Pentaho數據集成做這種動態查詢

0

如果兩個查詢的表結構(輸出列)是一樣的,你可以把它們放在一起,用UNION ALL放到一個大的SQL語句中,並把每個查詢放在「WHERE $ {Indicador} = ValueToRunThisQuery」中。

優化器應該足夠聰明,知道未選定的子查詢將返回零行,甚至不運行它。如果一個查詢的列數較少,則可以提供一些空列,但數據類型必須與填充列的數據類型相同。

如果兩個查詢之間的輸出表結構不同,它們應該位於不同的數據源中,甚至報告中。

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"