SSAS Cube中MDX如何实现类似LIKE '6%'的账户金额查询?
解决SSAS Cube中筛选以6开头的账户金额问题
嘿,这个需求在SSAS Cube里完全能搞定,给你几个实用的方案,你可以根据自己的场景来选:
方案一:用MDX Filter+Left函数实时筛选
这是最直接的写法,不需要修改Cube结构,直接通过MDX遍历并筛选成员:
SELECT [Measures].[Amount] ON COLUMNS, Filter( [Account].[Syntetic account].Members, -- 这里根据实际情况选Name或Key,比如成员名称是纯编码就用Name,键包含前缀就处理Key Left([Account].[Syntetic account].CurrentMember.Name, 1) = '6' ) ON ROWS FROM [你的Cube名称]
如果你的成员键格式是&[P]&[602]这种带前缀的,那可以拆分键来取编码部分:
Filter( [Account].[Syntetic account].Members, Left(Split([Account].[Syntetic account].CurrentMember.Key, "&").Item(2), 1) = '6' )
这个方法的好处是灵活,不用改Cube,但如果账户成员很多,性能可能会稍差一点。
方案二:用StrToSet结合通配符快速匹配
如果你的账户成员的键/名称符合可通配的格式,SSAS支持用*作为通配符来匹配,写法更简洁:
SELECT [Measures].[Amount] ON COLUMNS, StrToSet("[Account].[Syntetic account].[Syntetic account].&[P]&[6*]") ON ROWS FROM [你的Cube名称]
注意:这个方法需要确保你的Cube维度支持模糊匹配,而且成员的键结构确实是&[P]&[xxx]这种,通配符*能正确匹配到以6开头的编码部分。
方案三:预计算属性(性能最优,适合频繁使用)
如果这个筛选是常用需求,建议直接在维度设计阶段添加一个计算属性,比如「账户首字符」:
- 在SSAS维度设计器中,找到账户维度的数据源视图,添加一个计算列,公式为:
LEFT([你的账户编码字段], 1) - 将这个计算列添加为维度的属性,部署Cube
- 之后查询时直接筛选这个属性即可:
SELECT [Measures].[Amount] ON COLUMNS, [Account].[账户首字符].&[6] ON ROWS FROM [你的Cube名称]
这个方法因为提前预计算了属性,查询性能会比实时筛选好很多,适合频繁使用该筛选的场景。
内容的提问来源于stack exchange,提问作者Ondrej Pospisil
相关产品推荐
相关产品推荐

