动态 SQL 查询作为参数
Dynamic SQL queries as parameter
我需要一个用户必须选择 2 个参数的报告。第一个参数包含年份(2017、2016...),第二个包含 ID 进程。根据用户选择的过程,SQL 语句将是一个或另一个。参数 year 是第二个参数 SQL 的 WHERE 子句的一部分。
所以我有这个带有 2 个参数的报告(param_year
、Indicador
)。查询参数是使用 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
属性上。
更详细的解释:
- 为您需要的每个 SQL 字符串创建一个查询(我的意思是查询作为 PRD 对象,它使用 PRD 数据源)并从参数 [=37= 中移动 SQL 字符串] 到报表设计器查询定义中。
- 将参数 table 中的 SQL 字符串替换为相应查询的名称,例如:
- 使用您的参数值(应等于 PRD 查询名称)作为
Master/sub Report -> Attributes -> query -> name
属性的值:
我需要一个用户必须选择 2 个参数的报告。第一个参数包含年份(2017、2016...),第二个包含 ID 进程。根据用户选择的过程,SQL 语句将是一个或另一个。参数 year 是第二个参数 SQL 的 WHERE 子句的一部分。
所以我有这个带有 2 个参数的报告(param_year
、Indicador
)。查询参数是使用 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
属性上。
更详细的解释:
- 为您需要的每个 SQL 字符串创建一个查询(我的意思是查询作为 PRD 对象,它使用 PRD 数据源)并从参数 [=37= 中移动 SQL 字符串] 到报表设计器查询定义中。
- 将参数 table 中的 SQL 字符串替换为相应查询的名称,例如:
- 使用您的参数值(应等于 PRD 查询名称)作为
Master/sub Report -> Attributes -> query -> name
属性的值: