2016-04-20 45 views
1

使用DB2以下查詢:如何使用birt報告發送多個變量?

select * from table where num in ('1a2334','1a43432','1a34243','1b34325','1b4545') 

現在,每當我得到的數據報告我得到的行像是從用戶:

1a23344 
1a43432 
1a34243 
1b34325 
1b45454 

然後我用記事本+ +更換RF','因此它變成

'1a2334','1a43432','1a34243','1b34325','1b4545' 

什麼是我的opti用於創建一個報告,接受普通用戶輸入足夠簡單的報告?

這個特定的用戶有一個帶有多列的Excel工作表,我只使用第一列(上面提到的例子是第一列的行)。

@Simulant提供了一個很好的解決方案,但我需要這個從excel文件中獲取值(最好通過複製粘貼)。我注意到他/她的解決方案使用靜態值,所以我認爲我需要動態值。 爲了記錄我使用腳本以下錯誤:

Error evaluating Javascript expression. Script engine error: TypeError: Cannot call method "replace" of null (/report/data-sets/script-data-set[@id="12"]/method[@name="beforeOpen"]#3) Script source: /report/data-sets/script-data-set[@id="12"]/method[@name="beforeOpen"], line: 0, text: __bm_beforeOpen(). (Element ID:1) Error.ScriptEvaluationError (1 time(s)) detail : org.eclipse.birt.report.engine.api.EngineException: There are errors evaluating script "var parameters = params["multiSelectParameter"].value; var replacesPart = "'" + parameters.join("', '") + "'"; this.queryText = this.queryText.replace("replaceMe", replacesPart);":

回答

2

創建一個多選擇參數報表。創建一個列表框參數並允許多個值。您可以添加靜態值或選擇dynamic並顯示另一個查詢的結果。

enter image description here

寫您的查詢如下的SQL語句:

select * from table where num in (replaceMe); 

選擇您的數據集,並選擇script選項卡。輸入beforeOpen以下腳本。這取代了佔位符replaceMe在你的SQL語句與封閉的單引號',並用逗號,分開你的多重選擇參數的串連值,你需要它:

var parameters = params["multiSelectParameter"].value; 
var replacesPart = "'" + parameters.join("', '") + "'"; 
this.queryText = this.queryText.replace("replaceMe", replacesPart); 
+0

這看起來是一個很好的解決方案,但它不會像我預期的那樣工作,用戶將擁有一個包含值的列表(我以前沒有,也不應該更新所有內容)。我需要一些東西,這樣用戶就可以選擇一個excel行並將其複製粘貼到此報告中,而無需我的幫助。 – davejal