我正在使用Pentaho CDE开发一个仪表板。我创建了一个查询来从数据库中获取组织名称。 以下查询完美的作品对我来说:需要使用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,那么查询将返回具有与IBM完全相同的employer_name的行。
我试过将where子句改为where employer_name like '%${employer}%'
,但它不起作用。
编辑1
按照由PDPI的建议,我试图用双引号代替单引号周围$ {}雇主,但现在我得到Parent exception: Invalid parameter index 1.
例外。以下是堆栈跟踪的一部分:
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
请帮我组成这个查询。
EDIT 2
我的问题是现在解决了。感谢Pentaho论坛上的this问题。
我修改我的where子句如下,现在它的工作:
where employer_name like '%' + ${employer} + '%'
嘿那里, 您使用的是CDA查询还是Legacy? 如果您想在employer_name中的任何地方匹配雇主,您绝对应该使用“%$ {雇主}%”。这个变体怎么不起作用?没有结果,相同的结果?如果你没有得到任何结果,你能看看萤火虫的网络面板,并检查是否有任何请求失败,或查询是否只是没有返回。 (免责声明:我是CDE首席开发人员) – pdpi
@pdpi,非常感谢您的建议。我会尝试使用双引号而不是单引号并返回。希望它能起作用。 – Shekhar
@pdpi,我可以从哪里获得有关CDE查询参数的更多信息?其实我无法找到Pentaho社区版的适当文档或教程。很少有书,但这些书是指企业版。 – Shekhar