SpagoBI OLAP 报告传递可选参数

Posted

技术标签:

【中文标题】SpagoBI OLAP 报告传递可选参数【英文标题】:SpagoBI OLAP report passing optional parameter 【发布时间】:2016-08-19 07:29:06 【问题描述】:

直升机。今天是我与可选参数的 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

有什么想法吗?谢谢:)

【问题讨论】:

你做了哪些测试?您可以将参数传递给任何 mdx 脚本吗?我建议设置一个非常简单的脚本(就像我在上一篇文章中包含的那样!)来尝试确定您的客户是否看到 $param 的值? OLAP report with optional parameter的可能重复 当我从列表框中为我的参数选择值时,它执行得很好,当我手动将参数值放入我的 MDX 时,它也会执行。但是当参数为空时,我的 OLAP 不知道 MDX 查询中的 $param 是什么。我可以将参数传递给我的 mdx。如果我检查该参数是必需的,OLAP 工作正常,但我需要可选参数。未选中时,报告应包含所有数据。 【参考方案1】:

这个问题是您之前帖子的直接副本:

https://***.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];

结果:

【讨论】:

我的 MDX 查询编辑器告诉我 意外字符 '$' 我不知道 SpagoBI 语法有什么问题 @LucasPG 我添加了另一种可能性 - 可能传入了一个零长度字符串 那么如果 $param 长度等于 0,我该如何检查我的 IFF 条件? @LucasPG 你能把它添加到脚本的开头WITH MEMBER [Measures].[x] AS LEN($param) 还是说Unexpected character '$' 我可以添加这个,但我的测量值不是我的参数

以上是关于SpagoBI OLAP 报告传递可选参数的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SpagoBI 中传递参数顶部 LOV 查询

Laravel 4:如何传递多个可选参数

检查内部方法是不是传递了一些可选参数

Angular如何传递跳过一些[重复]的可选构造函数参数

将可选参数优化传递到查询中

如何转发可选参数