2016-04-20 46 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