Отчет SpagoBI OLAP, передающий необязательный параметр

Привет. Сегодня мой очередной день борьбы с отчетом OLAP с необязательным параметром. У меня проблема с запросом MDX. Я написал это так:

select
NON EMPTY {{[Measures].[VALUE]}} ON COLUMNS,
NON EMPTY {
IIF(ISEMPTY([CUSTOMER].[${param}]) //CHECKING IF PARAMETER IS EMPTY
,{[CUSTOMER].[COUNTRY].Members},
{[CUSTOMER].[${param}]}
)
}ON ROWS
from [TRANSACTIONS]

${param} — мой необязательный параметр для [CUSTOMER].[COUNTRY]. Я снял отметку с кнопки «Обязательно» для моего параметра, поэтому OLAP должен иметь все [VALUE] после его выполнения без параметра. И есть проблема, потому что после запуска мой параметр OLAP рапорта, вероятно, хочет быть чем-то заполненным. Это дает мне ошибку.

Атрибут профиля «param» не существует.

Но я не хочу заполнять его атрибутом профиля. Я создал список значений и аналитический драйвер для своего параметра, который я использую для передачи возможных значений строковому параметру моего списка — ${param}.

Есть ли возможность иметь отчет OLAP с необязательным параметром? Здесь есть мастер BI? Я был бы признателен за любую помощь.

Обновление: я сделал что-то подобное, я думаю, что этот синтаксис правильный (я проверял примеры SpagoBI)

WITH MEMBER [CUSTOMER].[SELECTED] AS ' Parameter("param") ' ,   SOLVE_ORDER = 2
MEMBER [CUSTOMER].[LEN] AS ' LEN(Parameter("param")) ',    SOLVE_ORDER = 1
select
NON EMPTY {{[Measures].[VALUE]}} ON COLUMNS,
NON EMPTY {
IIF([CUSTOMER].[LEN]=0
,{[CUSTOMER].[COUNTRY].Members},
{[CUSTOMER].[CUSTOMER].[SELECTED]}
)
}ON ROWS
from [TRANSACTIONS]

Но теперь у меня такая же ошибка для обоих параметров (установленных/неустановленных)

javax.servlet.jsp.JspException: org.apache.jasper.JasperException: javax.servlet.ServletException: javax.servlet.jsp.JspException: com.tonbeller.jpivot.olap.model.OlapException: 1

Любые идеи? Спасибо :)


person LucasPG    schedule 19.08.2016    source источник
comment
какие тесты вы делали? Можете ли вы передать параметр в любой скрипт mdx? Я предлагаю настроить очень простой скрипт (как я включил в предыдущий пост!), чтобы попытаться выяснить, видит ли ваш клиент значение для ${param} ?   -  person whytheq    schedule 19.08.2016
comment
Возможный дубликат отчета OLAP с необязательным параметром   -  person whytheq    schedule 19.08.2016
comment
Когда я выбираю значение для своего параметра из списка, он выполняется нормально, когда я вручную помещаю значение параметра в свой MDX, он также выполняется. Но когда параметр пуст, мой OLAP не знает, что такое ${param} в запросе MDX. Я могу передать параметр моему mdx. Если я проверю, что параметр является обязательным, OLAP работает нормально, но мне нужен необязательный параметр. Если флажок снят, отчет должен содержать все данные.   -  person LucasPG    schedule 19.08.2016


Ответы (1)


Этот вопрос является прямой копией ваших предыдущих сообщений:

https://stackoverflow.com/questions/38970610/olap-report-with-Optional-parameter< /а>

Является ли ${param} строкой?

Если это строка, должно работать следующее:

WITH MEMBER [Measures].[x] AS ${param}
SELECT
NON EMPTY {[Measures].[x]} ON COLUMNS
FROM [TRANSACTIONS];

Это работает?

Если это не работает, тогда вопрос на самом деле не связан с mdx - по какой-то причине ваш синтаксис или способ перемещения параметра к клиенту неверны.


примечание

Приведенное выше является эквивалентом этого очень простого скрипта:

WITH 
  MEMBER [Measures].[x] AS "hello world" 
SELECT 
  NON EMPTY 
    {[Measures].[x]} ON 0
FROM [Adventure Works];

У вас есть куб AdvWrks? Попробуйте это:

WITH 
  MEMBER [Measures].[x] AS "I'm not empty" 
SELECT 
  {
    IIF
    (
      (IsEmpty([Measures].[x])) //<< this returns False
     ,[Product].[Product Categories].[Category].MEMBERS
     ,{[Measures].[x]}          //<< this is what IIF returns
    )
  } ON 0
FROM [Adventure Works];

Он возвращает это:

введите здесь описание изображения

Теперь я протестировал IsEmpty:

WITH 
  MEMBER [Measures].[x] AS "I'm not empty" 
SELECT 
  {
    IIF
    (
      (NOT //<< added this to check functionality of IsEmpty
        IsEmpty([Measures].[x]))
     ,[Product].[Product Categories].[Category].MEMBERS //<< this is what IIF returns
     ,{[Measures].[x]}
    )
  } ON 0
FROM [Adventure Works];

Получаем следующее:

введите здесь описание изображения

Я думаю, что в вашем сценарии происходит следующее: параметр не пуст, а на самом деле является строкой нулевой длины:

WITH 
  MEMBER [Measures].[x] AS "" 
SELECT 
  {
    IIF
    (
      (
        IsEmpty([Measures].[x]))
     ,[Product].[Product Categories].[Category].MEMBERS
     ,{[Measures].[x]}  //<< the zero length string goes to here
    )
  } ON 0
FROM [Adventure Works];

Результат:

введите здесь описание изображения

person whytheq    schedule 19.08.2016
comment
Мой редактор запросов MDX сообщает мне Неожиданный символ '$' Я не знаю, что не так с синтаксисом SpagoBI - person LucasPG; 19.08.2016
comment
@LucasPG Я добавил еще одну возможность - может быть, передается строка нулевой длины - person whytheq; 19.08.2016
comment
Итак, как я могу проверить условие IFF, если длина ${param} равна 0? - person LucasPG; 19.08.2016
comment
@LucasPG, можете ли вы добавить это в начало скрипта WITH MEMBER [Measures].[x] AS LEN(${param}) или он все еще говорит Unexpected character '$'? - person whytheq; 19.08.2016
comment
Я могу добавить это, но моя мера не является моим параметром - person LucasPG; 19.08.2016
comment
если вы можете добавить эту меру, то, возможно, вы также можете попробовать изменить условие на IIF([Measures].[x]=0 ...) ? - person whytheq; 19.08.2016
comment
Я уже сделал это, теперь мой mdx выглядит так WITH MEMBER [Measures].[x] AS LEN(${param}) select NON EMPTY {{[Measures].[VALUE]}} ON COLUMNS, NON EMPTY { IIF([Measures].[x] = 0 ,{[CUSTOMER].[COUNTRY].Members}, {[CUSTOMER].[${param}]} ) }ON ROWS from [TRANSACTIONS], но все равно я получаю ту же ошибку :( - person LucasPG; 19.08.2016