【问题标题】:MDX calculated Member not allowed multiple hierarchy tupleMDX 计算成员不允许多个层次结构元组
【发布时间】: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() 函数会导致错误。我不知道如何过滤同一维度层次结构的多个值。

【问题讨论】:

    标签: excel ssas mdx olap cube


    【解决方案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]}
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多