【问题标题】:Need help in creating parameterized query using Pentaho CDE在使用 Pentaho CDE 创建参数化查询时需要帮助
【发布时间】: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 是否过时且已弃用?

标签: dashboard pentaho


【解决方案1】:

正如 PDPI 所说,您应该使用“%${employer}%”,即双引号而不是单引号。那么它应该可以工作。

【讨论】:

  • 是的,但他特别说没有,这很奇怪。
  • @Codek,非常感谢您的建议。我将尝试使用双引号而不是单引号并返回。希望它会奏效。
【解决方案2】:

我使用 CDF 和动作序列文件解决了类似的问题。在我看来,您正试图在 Javascript 中对查询进行参数化。在这种情况下,组件对象有一个 parameters 字段,它接受一个参数数组。像这样使用;

parameters : [ [ "REGION", "region" ], [ "DISTRICT", "district" ],
                [ "SUB_DISTRICT", "subDistrict" ] ]

此外,还有一个侦听器字段,用于在参数更改时刷新您的组件。有关详细信息,请参阅 Pentaho 解决方案中的 CDF 参考。

【讨论】:

    猜你喜欢
    • 2014-08-14
    • 1970-01-01
    • 2012-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-30
    • 1970-01-01
    相关资源
    最近更新 更多