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 计算成员不允许多个层次结构元组的主要内容,如果未能解决你的问题,请参考以下文章