求助:MDX中StrToTuple无法实现同一维度层级多成员筛选
解决MDX StrToTuple处理多成员筛选报错的问题
这个问题的核心很明确:StrToTuple函数只能解析单个元组,而你传入的是包含集合的字符串,这超出了它的处理范围。
当你用{[Level].[LevelCode].&[A],[Level].[LevelCode].&[X]},[Status].[StatusCode].&[ST]作为筛选条件时,这段字符串实际上描述的是一个元组集合(Level的A、X分别和Status的ST组合,形成两个元组),但StrToTuple只能处理单个元组(比如[Level].[LevelCode].&[A],[Status].[StatusCode].&[ST]这种格式),自然会报错。
解决方案:用StrToSet替代StrToTuple
AGGREGATE函数的第一个参数既可以是单个元组,也可以是元组集合,所以我们只需要把解析函数从StrToTuple换成StrToSet,就能支持多成员筛选的场景。
修改后的MDX计算成员代码如下:
AGGREGATE ( IIF( Query = "" OR ISEMPTY(Query), [Code].[_KeyQuery].[ALL], StrToSet(Query) -- 替换StrToTuple为StrToSet ), [Measures].[Value] )
正确的筛选条件格式
使用这个修改后的代码时,你需要调整筛选条件的格式,确保它是合法的MDX集合表达式:
- 单维度多成员:用大括号包裹成员,比如
{[Level].[LevelCode].&[A],[Level].[LevelCode].&[X]} - 多维度组合(其中一个维度多成员):用
*做集合叉乘,比如{[Level].[LevelCode].&[A],[Level].[LevelCode].&[X]} * {[Status].[StatusCode].&[ST]} - 多个维度都有多成员:同样用
*组合,比如{[Level].[LevelCode].&[A],[Level].[LevelCode].&[X]} * {[Status].[StatusCode].&[ST],[Status].[StatusCode].&[IN]}
这样StrToSet就能正确解析这些表达式,AGGREGATE也会按照你预期的方式聚合所有符合筛选条件的[Measures].[Value]值。
内容的提问来源于stack exchange,提问作者Huojian
相关产品推荐
相关产品推荐

