1

直升机。今天是我与可选参数的 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 raport 参数后可能想要填充一些东西。它给了我一个错误。

配置文件属性“参数”不存在。

但我不想用配置文件属性填充它。我已经为我的参数创建了值列表和分析驱动程序,我用它来将可能的值传递给我的列表框字符串参数 - ${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

有任何想法吗?谢谢 :)

4

1 回答 1

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];

结果是:

在此处输入图像描述

于 2016-08-19T10:36:11.690 回答