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 因此不能由来自同一层次结构的两个成员组成 - 这将创建非行列式的坐标
我使用 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 因此不能由来自同一层次结构的两个成员组成 - 这将创建非行列式的坐标