动态 SQL 查询作为参数

Dynamic SQL queries as parameter

我需要一个用户必须选择 2 个参数的报告。第一个参数包含年份(2017、2016...),第二个包含 ID 进程。根据用户选择的过程,SQL 语句将是一个或另一个。参数 year 是第二个参数 SQL 的 WHERE 子句的一部分。

所以我有这个带有 2 个参数的报告(param_yearIndicador)。查询参数是使用 table 数据源完成的,其中 ID 列包含 SQL 句子,值列包含用户必须 select.

的文本

所以我接下来要做的是 set ${Indicador} 作为我对数据库所做的 JDBC 连接中的 SQL 语句。这是向我报告 SQL 错误

"Failed at query: ${Indicador}.

如有任何建议,我们将不胜感激。提前致谢。

您需要 Pentaho Data Integration 来进行这种动态查询

如果两个查询的 table 结构(输出列)相同,您可以使用 UNION ALL 将它们放在一个大的 SQL 语句中并放入每个查询 "WHERE ${Indicador} = ValueToRunThisQuery".

优化器应该足够聪明,知道未选择的子查询将return零行,甚至运行它都不会。如果一个查询的列数较少,您可以提供一些空列,但填充列的数据类型必须相同。

如果两个查询的输出 table 结构不同,它们应该位于不同的数据源,甚至报告中。

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"

另一种选择是在您的 Master/sub 报告中创建多个数据源,然后使用 PRD 表达式select 适当的数据源Master/sub Report -> Attributes -> query -> name 属性上。

更详细的解释:

  1. 为您需要的每个 SQL 字符串创建一个查询(我的意思是查询作为 PRD 对象,它使用 PRD 数据源)并从参数 [=37= 中移动 SQL 字符串] 到报表设计器查询定义中。
  2. 将参数 table 中的 SQL 字符串替换为相应查询的名称,例如:
  3. 使用您的参数值(应等于 PRD 查询名称)作为 Master/sub Report -> Attributes -> query -> name 属性的值: