MDX 计算成员不允许多个层次结构元组

Posted

技术标签:

【中文标题】MDX 计算成员不允许多个层次结构元组【英文标题】:MDX calculated Member not allowed multiple hierarchy tuple 【发布时间】:2018-05-22 08:22:01 【问题描述】:

我使用 sql 表在每个维度上为 SSAS 多维数据集中的值生成过滤器。

MDX Query 是基于下面的列 Query,计算出来的成员是:

   AGGREGATE
    (
      IIF(Query= "" or ISEMPTY(Query),
           [Code].[_KeyQuery].[ALL],
           StrToTuple('('+ Query+')')
           ),[Measures].[Value]
    )

我必须在 Excel 中使用数据透视表。它完美地工作,值在每个维度成员上正确过滤。如果我使用这样的查询,没关系。

[Level].[LevelCode].&[A],[Status].[StatusCode].&[ST]

但现在我需要添加过滤多个维度成员的可能性。例如,使用查询:

[Level].[LevelCode].&[A],[Level].[LevelCode].&[X],[Status].[StatusCode].&[ST]

它不起作用,我尝试像这样更改查询:

[Level].[LevelCode].&[A],[Level].[LevelCode].&[X],[Status].[StatusCode].&[ST]

但是 StrToTuple() 函数会导致错误。我不知道如何过滤同一维度层次结构的多个值。

【问题讨论】:

【参考方案1】:

如果它总是一个元组,那么不需要使用 AGGREGATE,只需要一个元组返回值:

  IIF(
    Query= "" OR ISEMPTY(Query),
    (
      [Code].[_KeyQuery].[ALL]
     ,[Measures].[Value]
    )
   ,StrToTuple('('+ Query +',[Measures].[Value])')
  )

或者这个版本:

   StrToTuple(
      '('
      + IIF(
          Query= "" OR ISEMPTY(Query)
         ,[Code].[_KeyQuery].[ALL]
         ,Query 
       )
     +',[Measures].[Value])'
    )

在元组和集合之间进行决策的可能方法

在您的控制表“TupleOrSet”中添加一个值为“T”或“S”的列。然后你可以把你的代码修改成这样:

  IIF(
    Query= "" OR ISEMPTY(Query),
    (
      [Code].[_KeyQuery].[ALL]
     ,[Measures].[Value]
    )
   ,IIF(
       TupleOrSet = "T"
      ,StrToTuple('('+ Query +',[Measures].[Value])')
      ,AGGREGATE( StrToSet(''+ Query +''), [Measures].[Value])
    )
  )

注意

元组是立方体空间中的一个确定点,因此不能由来自同一层次结构的两个成员组成 - 这将创建非决定性坐标

【讨论】:

好吧同样的结果,但我仍然有同样的问题,对同一维度使用多个值。如果查询类似于 '[dim].[code].&[value],[dim2].[code].&[Value]' 它可以完美运行,但如果我使用如下查询:'[dim].[代码].&[value1],[dim].[code].&[Value2]' 您的问题中未指定此内容 this '[dim].[code].&[value1],[dim].[code].&[Value2]' 在用于元组 好的,谢谢,我明白了。但不是动态查询的解决方案?我可以使用两列query1,query2 => tuple1 + tuple2。但我需要在同一层次结构中使用两个以上的成员 多个成员的动态是 StrToSet() 而不是 StrToTuple() 。因为这部分是一个集合:[Level].[LevelCode].&[A],[Level].[LevelCode].&[X]

以上是关于MDX 计算成员不允许多个层次结构元组的主要内容,如果未能解决你的问题,请参考以下文章

MDX IIF 语句根据度量和层次结构叶计算新成员

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

MDX:如何将具有多个成员的元组转换为具有单个成员的元组?

如果当前成员有孩子,则展开用户层次结构 - MDX

MDX 在层次结构之间导航

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