pentaho cde在sql查询中包含/排除where子句

Posted

技术标签:

【中文标题】pentaho cde在sql查询中包含/排除where子句【英文标题】:pentaho cde include/exclude where clause in sql query 【发布时间】:2016-06-21 08:32:24 【问题描述】:

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

select * from types where id = $id

现在我像这样从 url 参数中获取 id

id = Dashboards.getQueryParameter('id');

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

select * from types

如何在 pentaho CDE 中实现这一点?

【问题讨论】:

你可以使用存储过程来处理这个问题。 【参考方案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";
   
 

【讨论】:

我不使用图表,只使用表格,您知道如何动态更改表格数据源吗? Table Component 也有 Pre Execution 阶段,就像所有 CDE 组件一样。它可以在组件的Advanced Properties 选项卡中找到。 我知道但我没有找到任何dataAccessId dataAccessId 是一个表的属性,代表 CDE 的Datasource 如果您使用 FireBug 插件,可以检查仪表板的 DOM 并搜索代表 Datasource 的属性名称:FireBug > DOM > Dashboards > components > component["Object type=Table"] > chartDefinition > dataAccessId【参考方案2】:

创建一个自定义的 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

【讨论】:

嗯,它不那样工作,它显示错误的查询。

以上是关于pentaho cde在sql查询中包含/排除where子句的主要内容,如果未能解决你的问题,请参考以下文章

带数字参数的 Pentaho CDE SQL 查询

Pentaho CDE - 如何从 SQL 查询 JDBC 构建图表

Pentaho CDE 图表

SQL case 语句不适用于多参数 pentaho cde

如何有条件地在 Mongoose 的查询中包含/排除字段?

Pentaho 6:CDE 和 OLAP 选择器向导