在BIRT中输入参数后更新数据集查询

时间:2015-01-21 15:26:02

标签: javascript mysql birt

如何在BIRT报告设计中传递参数后更改或更新数据集的查询?

详图:

我的查询看起来像这样:

WHERE ? 

该参数标记可以包含不同的值,在用户输入参数之后,它将如下所示:

WHERE column_name = 1

WHERE column_name = 2

甚至

WHERE column_name IN (1,2)

我为该数据集参数(DSP)创建了一个报告参数(RP),在尝试了几个小时之后,我无法改变它。

我试过了:

  • 在RP和DSP上创建各种javascript表达式
  • 创建一个可以更改第一个RP值并返回上一步的RP
  • 编辑属性绑定,但我无法弄清楚应该如何完成它。 为了说清楚,我正在设计一个报告,而不是将运行时集成到现有的应用程序中。 我希望这很清楚,我仍然在编辑这个问题,所以如果你需要更多信息,请告诉我。

由于

1 个答案:

答案 0 :(得分:3)

假设您使用的是Oracle数据库(其他系统的行为可能不同),您应该知道绑定变量(在JDBC语音中:问号)只能替换标量值,例如:字符串或数字。

但是你想要像数字 list 这样的东西作为输入。 因此,在这种情况下,绑定变量不会帮助您。

实现你想要的最简单的方法可能就是:

在您的查询中,写下:

WHERE column_name in (1) -- $REPLACE_THIS$

请注意,我在查询中使用注释作为标记。 然后,在查询的beforeOpen事件中,修改查询文本,如下所示:

// construct a comma-separated string representation of your list
// based on your report parameter (exercise left to the reader)
// var replacement = my_to_sql_csv(params["my_report_parameter"].value);

// for demonstration use:
var replacement = "1,2";

// modify the `IN` expression inside the SQL
this.queryText = this.queryText.replaceAll("(1) -- $REPLACE_THIS$", "(" + replacement + ")";

那就是它。