pentaho cde include / exclude sql查询中的where子句

时间:2016-06-21 08:32:25

标签: pentaho pentaho-cde

我正在使用Pentaho CDE构建一个仪表板,其中一个表将显示来自如下查询的数据:

select * from types where id = ${id}

现在我从url参数中获取id

id = Dashboards.getQueryParameter('id');

如果我不在url中提供id,则表格显示没有,因为id =''与任何内容都不匹配。但我想要做的是,如果我不给id,它将排除where子句并显示查询结果,如

select * from types

如何在pentaho CDE中实现这一目标?

2 个答案:

答案 0 :(得分:1)

您可以使用两个数据源,并在表的Pre Execution阶段选择一个。仪表板组件(表,图表)的数据源由属性dataAccessId表示。

您可以在组件中使用JavaScript代码设置dataAccessId,如下所示:this.chartDefinition.dataAccessId = {datasource name}

1)数据源sql_with_id

select * from types where id = ${id}

2)数据源= sql_no_id

select * from types

表格的Pre Execution代码:

function f() {
   var id = Dashboards.getQueryParameter('id');
   if (id && id !== "") {
      this.chartDefinition.dataAccessId = "sql_with_id";
   } else {
      this.chartDefinition.dataAccessId = "sql_no_id";
   }
} 

答案 1 :(得分:0)

如何创建自定义javascript参数(例如,'where_clause')如下:

id = Dashboards.getQueryParameter('id');
if (id != null)
    where_clause = 'id = ' + id;
else
    where_clause = '1=1';
 return where_clause;

然后构建您的查询:

select * from types where ${where_clause}