Pentaho CDE включить / исключить, где предложение в запросе SQL

Я строю Dashboard, используя Pentaho CDE, в котором таблица будет отображать данные из запроса, подобного этому:

select * from types where id = ${id}

Теперь я получаю идентификатор из параметра URL, как это

id = Dashboards.getQueryParameter('id');

Если я не даю идентификатор в URL, таблица ничего не показывает, так как id='' ничего не соответствует. Но что я хочу сделать, так это то, что если я не дам id, это исключит предложение where и покажет результат запроса, например

select * from types

Как этого добиться в Пентахо CDE?

2 ответа

Решение

Вы можете использовать два источника данных и выбрать один во время Pre Execution фаза стола. Источник данных компонента панели мониторинга (таблица, диаграмма) представлен свойством dataAccessId,

Вы можете установить dataAccessId используя код JavaScript внутри компонента, как это: 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";
   }
} 

Как насчет создания пользовательского параметра 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}
Другие вопросы по тегам