2011-10-18 40 views
1

我正在使用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} + '%' 
+1

嘿那裏, 您使用的是CDA查詢還是Legacy? 如果您想在employer_name中的任何地方匹配僱主,您絕對應該使用「%$ {僱主}%」。這個變體怎麼不起作用?沒有結果,相同的結果?如果你沒有得到任何結果,你能看看螢火蟲的網絡面板,並檢查是否有任何請求失敗,或查詢是否只是沒有返回。 (免責聲明:我是CDE首席開發人員) – pdpi

+0

@pdpi,非常感謝您的建議。我會嘗試使用雙引號而不是單引號並返回。希望它能起作用。 – Shekhar

+0

@pdpi,我可以從哪裏獲得有關CDE查詢參數的更多信息?其實我無法找到Pentaho社區版的適當文檔或教程。很少有書,但這些書是指企業版。 – Shekhar

回答

1

正如PDPI所說,您應該使用「%$ {employer}%」,即雙引號不是單引號。那麼它應該工作。

+0

是的,但他特別說沒有,這很奇怪。 – pdpi

+0

@Codek,非常感謝您的建議。我會嘗試使用雙引號而不是單引號並返回。希望它能起作用。 – Shekhar

1

我解決了使用CDF和行動序列文件類似的問題。在我看來,你正試圖在Javascript中參數化查詢。在這種情況下,組件對象具有參數字段,該字段接受一組參數。像這樣使用;

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

另外,還有一個監聽器字段,用於在參數更改時刷新組件。有關更多詳細信息,請參閱Pentaho解決方案中的CDF參考。