Pentaho параметризованный источник данных
Я пытаюсь построить какой-либо параметризованный источник данных (SQL-запрос через jndi). запрос моего источника данных:
SELECT ${param_interval}(dim_date.date), count(docs_fact.id) as docs_count
FROM rel_docs_dates
left join docs_fact on rel_docs_dates.doc_id = docs_fact.id
left join dim_date on rel_docs_dates.date_id = dim_date.id
Parametr ${param_interval}
может получить два значения: MONTH
а также DAY
и, как я проверил, он получил правильные значения. Но когда я пытаюсь сделать предварительный просмотр моей панели, я получаю предупреждение "компонент обработки ошибок".
Обратите внимание, что этот запрос (см. Ниже) работает нормально.
SELECT MONTH(dim_date.date), count(docs_fact.id) as docs_count, ${param_interval} as tmp_fiel
FROM rel_docs_dates
left join docs_fact on rel_docs_dates.doc_id = docs_fact.id
left join dim_date on rel_docs_dates.date_id = dim_date.id
Может кто-нибудь сказать мне, где ошибка? Или (может быть) этот способ использования параметров в источнике данных не поддерживается?
1 ответ
Наконец я нашел решение. это не то, что я хотел бы иметь, но это работает, и это самое главное.
я переписываю свой запрос с ограничением 'case' и, что важно, я изменил тип моего параметра со строки на числовой (строка не работает:(). Теперь мой запрос выглядит так:
SELECT
case ${param_interval}
when 1 then MONTH(dim_date.date)
when 2 then DAY(dim_date.date)
end
,count(docs_fact.id) as fact_count
FROM rel_docs_dates
left join docs_fact on rel_docs_dates.doc_id = docs_fact.id
left join dim_date on rel_docs_dates.date_id = dim_date.id
where dim_date.date > LAST_DAY(DATE_SUB(CURDATE(), INTERVAL ${param_period} MONTH))
AND dim_date.date < LAST_DAY(DATE_SUB(CURDATE(), INTERVAL 0 MONTH))
group by
case ${param_interval}
when 1 then MONTH(dim_date.date)
when 2 then DAY(dim_date.date)
end
order by YEAR(dim_date.date), MONTH(dim_date.date)
может быть, это поможет кому-то еще.