SSAS - 将 MDX 报告参数传递给 MDX 数据集查询

Posted

技术标签:

【中文标题】SSAS - 将 MDX 报告参数传递给 MDX 数据集查询【英文标题】:SSAS - Passing MDX Report Parameter to MDX DataSet Query 【发布时间】:2013-08-27 11:08:55 【问题描述】:

在我的基于多维数据集的MDX报表中,日期的输入帮助必须是日历,因此日期/时间类型的参数是必不可少的。我过滤数据的时间维度字段是整数。示例值:20130827。

我的数据集查询如下所示:

 SELECT NON EMPTY  [Measures].[Hours In Track]  ON COLUMNS, NON EMPTY 
 ([Dim Date].[Date ID].[Date ID].ALLMEMBERS * [Dim Division].[Hierarchy].[Division ID].ALLMEMBERS ) 
 DIMENSION PROPERTIES MEMBER_CAPTION, MEMBER_UNIQUE_NAME ON ROWS FROM
 ( SELECT ( STRTOSET(@DimDivisionHierarchy, CONSTRAINED) ) ON COLUMNS FROM
 ( SELECT ( STRTOMEMBER(@FromDimDateDateID, CONSTRAINED) : STRTOMEMBER(@ToDimDateDateID, CONSTRAINED) ) ON COLUMNS FROM [BicepsArveCube]))
 CELL PROPERTIES VALUE, BACK_COLOR, FORE_COLOR, FORMATTED_VALUE, FORMAT_STRING, FONT_NAME, FONT_SIZE, FONT_FLAGS

我使用了一个文本字段,它向我展示了日期/时间类型参数值如下所示: 2013-08-05 00:00:00,而我的 DateID 是 Integer 类型,所以我需要进行转换。

在数据集参数选项卡中,我将参数值指定为表达式:

="[Dim Date].[Date ID].&["
 & Replace(Replace("2013-08-05 00:00:00", "-", ""), " 00:00:00", "")
 & "]"

我得到了预期的数据,一切正常。但是当我将硬编码的日期/时间值更改为参数值(类型 date/time )时:

="[Dim Date].[Date ID].&["
 & Replace(Replace(Parameters!FromDimDateDateID.Value, "-", ""), " 00:00:00", "")
 & "]"

我收到一个违反约束的错误。我不知道为什么,因为如上所述,Parameters!FromDimDateDateID.Value 看起来与我使用的硬编码值完全相同。

我使用文本字段来检查两种情况下转换后得到的表达式(硬编码日期和从日历中选择并作为参数值传递的相同日期),它看起来完全一样:

[Dim Date].[Date ID].&[20130805]

【问题讨论】:

【参考方案1】:

试试

STRTOMEMBER(
  "[Dim Date].[Date ID].&["
 + Replace(Replace(@FromDimDateDateID, "-", ""), " 00:00:00", "")
 + "]",
CONSTRAINED)

在由 Analysis Services 解释的 MDX 中,您无法访问像 Parameters 这样的 Reporting Services 对象。相反,它们的值与 MDX 语句一起发送到 Analysis Services 服务器,该语句可以使用 @ 表示法引用它们。

【讨论】:

您好,感谢您的回复,但在实施您的想法后,在尝试执行查询时,我收到错误消息“发生以下系统错误:访问被拒绝”。 你能从消息中确定消息是来自s-s-rS还是SSAS?您是否可以完全访问立方体的所有部分,或者立方体中是否存在访问限制? 此错误来自 Microsoft SQL Server 2012 Analysis Services。没有设置访问限制,我检查了所有可能的角色、权限等。我可以,仍然有同样的错误:( @ArturChmielewski 重新阅读您的原始帖子,我不确定我是否完全误解了它,因为我对 Analysis Services 有深入的了解,而对 Reporting Services 的了解却很肤浅。也许CONSTRAINED violation 在代码错误的意义上不是错误,而只是说您构造的成员在多维数据集中不存在。您是否检查过您尝试的日期是否包含在多维数据集中?如果您使用多维数据集中肯定存在的日期重新尝试原始解决方案,它是否有效?此外,您可以尝试省略 ,CONSTRAINED 问题解决了...这是替换的问题...日期/时间类型似乎有一些神秘的隐藏字符,如果您想替换它们,您需要知道它们:)。我用 CInt(Format(parameter_value, "yyyyMMdd") 效果很好

以上是关于SSAS - 将 MDX 报告参数传递给 MDX 数据集查询的主要内容,如果未能解决你的问题,请参考以下文章

使用 MDX 从层次结构中获取当前会计年度

SSAS 计算成员中的 MDX 查询

使用 where 子句 (MDX) 的 SSAS 计算度量

数据透视表中使用的 SSAS 中的新命名集 - MDX

SSAS MDX WHERE 子句语法 - 从同一层次结构中过滤多个值

SSAS MDX - 根据其他两个维度从一个维度中选择