1

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

所以我有这个带有 2 个参数 ( param_year, Indicador) 的报告。查询参数使用表数据源完成,其中 IDs 列包含 SQL 语句,Values 列包含用户必须选择的文本。

设置参数

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

“查询失败:${Indicador}。

将参数设置为 SQL 语句

任何建议将不胜感激。提前致谢。

4

3 回答 3

1

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

更详细的解释:

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

你需要 Pentaho 数据集成来做这种动态查询

于 2017-03-01T12:38:11.233 回答
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"
于 2017-03-01T13:43:27.670 回答