#dashboard #pentaho
#Информационная панель #pentaho
Вопрос:
Я разрабатываю одну панель мониторинга с использованием Pentaho CDE. Я создал один запрос для извлечения названий организаций из базы данных. Следующий запрос отлично работает для меня :
select top 5
employer_name,count(emp_id) as emp_count
from employment_details
where employer_name=${employer}
group by employer_name
order by emp_count desc
Я хочу изменить предложение where так, чтобы вместо использования =
я хотел использовать like
предложение. Итак, я изменил запрос следующим образом :
select top 5
employer_name,count(emp_id) as emp_count
from employment_details
where employer_name like ${employer}
group by employer_name
order by emp_count desc
но это не дает мне надлежащих результатов. Например, если значение ${employer}
равно IBM, то запрос возвращает строки, имеющие employer_name точно так же, как IBM.
Я попытался изменить предложение where на where employer_name like '%${employer}%'
, но оно не работает.
РЕДАКТИРОВАТЬ 1
Согласно предложениям pdpi, я попытался использовать двойные кавычки вместо одинарных вокруг $ {employer}, но теперь я получаю Parent exception: Invalid parameter index 1.
исключение. Ниже приведена некоторая часть stacktrace :
pt.webdetails.cda.dataaccess.QueryException: Found an unhandled exception:
at pt.webdetails.cda.dataaccess.SimpleDataAccess.queryDataSource(SimpleDataAccess.java:299)
at pt.webdetails.cda.dataaccess.AbstractDataAccess.doQuery(AbstractDataAccess.java:312)
at pt.webdetails.cda.CdaEngine.doQuery(CdaEngine.java:51)
at pt.webdetails.cda.CdaContentGenerator.doQuery(CdaContentGenerator.java:299)
at pt.webdetails.cda.CdaContentGenerator.createContent(CdaContentGenerator.java:139)
at org.pentaho.platform.web.servlet.GenericServlet.doGet(GenericServlet.java:261)
at org.pentaho.platform.web.servlet.GenericServlet.doPost(GenericServlet.java:80)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.j
ava:290)
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:861)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProto
col.java:579)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1584)
at java.lang.Thread.run(Thread.java:619)
Caused by: pt.webdetails.cda.dataaccess.QueryException: ReportDataFactoryException : Failed at query
: select top 5
emp.employer_name,count(emp.rinx_id) as candidate_count
from tbl_cand_employment_details emp
where emp.employer_name like "%${employer}%"
group by emp.employer_name
order by candidate_count desc; Parent exception: Invalid parameter index 1.
at pt.webdetails.cda.dataaccess.PREDataAccess.performRawQuery(PREDataAccess.java:116)
at pt.webdetails.cda.dataaccess.SimpleDataAccess.queryDataSource(SimpleDataAccess.java:288)
... 68 more
Пожалуйста, помогите мне в формировании этого запроса.
РЕДАКТИРОВАТЬ 2
Теперь моя проблема решена. Благодаря этому вопросу на форуме Pentaho.
Я изменил свое предложение where следующим образом, и теперь оно работает :
where employer_name like '%' ${employer} '%'
Комментарии:
1. Привет, вы используете запросы CDA или устаревшие? Вам определенно следует использовать «%${employer}%», если вы хотите сопоставить employer в любом месте employer_name. Почему этот вариант не работает? Результатов нет, те же результаты? Если вы не получаете никаких результатов, не могли бы вы посмотреть на сетевую панель firebug и проверить, не выполняется ли какой-либо из запросов, или запрос просто ничего не возвращает. (отказот ответственности: Я ведущий разработчик CDE)
2. @pdpi, большое спасибо за предложения. Я попытаюсь использовать двойные кавычки вместо одинарных кавычек и вернусь. Надеюсь, это сработает.
3. @pdpi, где я могу получить больше информации о параметрах запроса CDE? На самом деле я не могу найти надлежащую документацию или учебные пособия для Pentaho Community edition. Существует несколько книг, но эти книги относятся к Enterprise edition.
4. Из вашей последней правки я понял, что вы используете устаревшие запросы. Вы не находите никакой документации, потому что они устарели. Я серьезно рекомендую вам установить CDA и запрашивать свои данные с его помощью — как по соображениям безопасности, так и по соображениям производительности. Вы можете отображаться в IRC (канал ## pentaho на irc.freenode.net ) и мы можем помочь с этим.
5. @pdpi, я загрузил CDE (редактор панели мониторинга сообщества) и использую то же самое. Является ли CDE старым и устаревшим?
Ответ №1:
Как говорит PDPI, вы должны использовать «%$ {employer}%», т. Е. Двойные кавычки, а не одинарные кавычки. Тогда это должно сработать.
Комментарии:
1. Да, но он специально сказал, что это не так, что странно.
2. @Codek, большое спасибо за предложения. Я попытаюсь использовать двойные кавычки вместо одинарных кавычек и вернусь. Надеюсь, это сработает.
Ответ №2:
Я решил аналогичную проблему, используя CDF и файлы последовательности действий. Мне кажется, что вы пытаетесь параметризовать запрос в Javascript. В этом случае у объекта component есть поле parameters, которое принимает массив параметров. Используется примерно так;
parameters : [ [ "REGION", "region" ], [ "DISTRICT", "district" ],
[ "SUB_DISTRICT", "subDistrict" ] ]
Кроме того, существует поле прослушивателя, которое используется для обновления вашего компонента при изменении параметра. Смотрите ссылку CDF внутри вашего решения Pentaho для получения более подробной информации.