【发布时间】:2011-12-09 20:54:39
【问题描述】:
我正在使用 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 完全相同。
我尝试将 where 子句更改为 where employer_name like '%${employer}%',但它不起作用。
编辑 1
根据 pdpi 的建议,我尝试在 ${employer} 周围使用双引号而不是单引号,但现在我收到 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
请帮助我形成这个查询。
编辑 2
我的问题现在解决了。感谢 Pentaho 论坛上的this 问题。
我将 where 子句修改如下,现在它可以工作了:
where employer_name like '%' + ${employer} + '%'
【问题讨论】:
-
您好,您使用的是 CDA 查询还是旧版查询?如果您想匹配雇主名称中任何地方的雇主,您绝对应该使用“%${employer}%”。那个变种怎么不起作用?没有结果,结果一样吗?如果您没有得到任何结果,您是否能够查看 firebug 的网络面板并检查是否有任何请求失败,或者查询是否只返回任何内容。 (免责声明:我是 CDE 首席开发人员)
-
@pdpi,非常感谢您的建议。我将尝试使用双引号而不是单引号并返回。希望它会奏效。
-
@pdpi,我在哪里可以获得有关 CDE 查询参数的更多信息?实际上,我无法找到 Pentaho 社区版的适当文档或教程。那里的书很少,但这些书是指企业版。
-
从您的最后一次编辑中,我了解到您正在使用旧版查询。您没有找到任何文档,因为这些文档已被弃用。出于安全和性能原因,我强烈建议您安装 CDA 并使用它查询您的数据。您可以出现在 IRC(irc.freenode.net 的频道 ##pentaho)上,我们可以提供帮助。
-
@pdpi,我已经下载了 CDE(社区仪表板编辑器)并使用它。 CDE 是否过时且已弃用?