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}