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

MDX calculated Member not allowed multiple hierarchy tuple

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

MDX查询是根据下面的列查询,计算出的成员为:

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

我必须在 Excel 中使用枢轴 Table。它工作得很好,每个维度成员的值都正确过滤。如果我使用这样的查询,没问题。

[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() 函数会导致错误。我不知道如何过滤同一维度层次结构的多个值。

如果它将始终是一个元组,则无需使用 AGGREGATE 只需一个元组应该 return 值:

  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])'
    )

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

向您的控件添加一列 table "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])
    )
  )

备注

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