Многозначный параметр SpagoBI

Я пытаюсь создать многозначный параметр в SpagoBI.

Вот мой запрос набора данных, последняя строка которого вызывает проблему.

select C."CUSTOMERNAME", C."CITY", D."YEAR", P."NAME"
from "CUSTOMER" C, "DAY" D, "PRODUCT" P, "TRANSACTIONS" T
where C."CUSTOMERID" = T."CUSTOMERID"
and D."DAYID" = T."DAYID"
and P."PRODUCTID" = T."PRODUCTID"
and _CITY_

Я создал перед открытием скрипт в своем наборе данных, который выглядит так:

this.queryText = this.queryText.replace(_CITY_, " CUSTOMER.CITY in ( "+params["cp"].value+" ) "); 

Мой параметр задается как строка, динамический список типа отображения.

Когда я запускаю отчет, я получаю эту ошибку.

org.eclipse.birt.report.engine.api.EngineException: There are errors evaluating script "
this.queryText = this.queryText.replace(_CITY_, " CUSTOMER.CITY in ( "+params["cp"].value+" ) "); 
":
Fail to execute script in function __bm_beforeOpen(). Source:

Кто-нибудь может мне помочь?


person LucasPG    schedule 26.07.2016    source источник
comment
Где вы запускали отчет?? В спагоби сервер или студию? или..??   -  person su_bhagya    schedule 28.07.2016
comment
В студии. Я решил эту проблему. Я должен был пройти? как первый элемент моего массива строк списка, затем остальные элементы. Я никогда не видел такого примера. Теперь у меня проблема с развертыванием моего отчета на сервере. Тип параметра CITYPARAM ожидается как Object[], а не java.lang.String. Думаю, проблема в том, что мой параметр в студии задан как список. Я не знаю, как это сделать с текстовым полем, потому что обычная замена в скрипте beforeOpen не работает. ? в моем запросе необходимо. Я рад, что ты здесь marc_s   -  person LucasPG    schedule 28.07.2016
comment
да вы правы. это из-за типа параметра. изменить тип параметра на String. в сценарии beforeOpen попробуйте this.queryText = this.queryText+" and CUSTOMER.CITY in (" + params["cp"].toString().replace(";", ",") + ")" это сработало для меня.   -  person su_bhagya    schedule 29.07.2016
comment
@su_bhagya прав   -  person dhS    schedule 27.08.2016


Ответы (2)


Здравствуйте, мне удалось решить проблему. Вот мой код:

var substring = "" ;
var strParamValsSelected=reportContext.getParameterValue("citytext");
substring += "?," + strParamValsSelected ;
this.queryText = this.queryText.replace("'xxx'",substring);

Как Вы можете видеть "?" необходимо перед моим параметром. Может быть, это поможет кому-то. Большое спасибо за Ваши комментарии.

person LucasPG    schedule 29.07.2016

Если вы используете сервер SpagoBI и High Charts (JFreeChart Engine)/JJChat Engine, вы можете просто использовать ($P{param_url}) в запросе или построить динамический запрос с помощью Java. скрипт / заводной скрипт

поэтому ваш запрос также может быть:

select C."CUSTOMERNAME", C."CITY", D."YEAR", P."NAME"
from "CUSTOMER" C, "DAY" D, "PRODUCT" P, "TRANSACTIONS" T
where C."CUSTOMERID" = T."CUSTOMERID"
and D."DAYID" = T."DAYID"
and P."PRODUCTID" = T."PRODUCTID"
and CUSTOMER."CITY" in ('$P{param_url}')
person Anish Alexander    schedule 03.11.2016