如何用MDX查询统计SSAS维度列中特定字符的出现次数?
在Microsoft SSAS中统计字符串特定字符出现次数的MDX实现方法
MDX没有原生函数直接统计字符串中特定字符的出现次数,但可以通过LEN和REPLACE函数的组合实现,同时针对你提到的末尾带分隔符的场景做适配。
核心思路
通过计算原字符串长度与移除目标分隔符后字符串的长度差,得到分隔符的总出现次数;若存在末尾多余的分隔符,再额外修正结果。
适配场景的MDX表达式
假设你的维度列是[维度名].[列名],以下是针对示例值Image|Video|Audio|的完整计算逻辑:
IIF( RIGHT([维度名].[列名].CurrentMember.MemberValue, 1) = "|", (LEN([维度名].[列名].CurrentMember.MemberValue) - LEN(REPLACE([维度名].[列名].CurrentMember.MemberValue, "|", ""))) - 1, LEN([维度名].[列名].CurrentMember.MemberValue) - LEN(REPLACE([维度名].[列名].CurrentMember.MemberValue, "|", "")) )
表达式说明
- 基础计数逻辑:
LEN(原字符串) - LEN(REPLACE(原字符串, "|", ""))
这个计算会得到所有|的出现次数,示例中该结果为4。 - 末尾分隔符修正:
RIGHT(原字符串, 1) = "|"
检查字符串最后一位是否为分隔符,若是则将计数结果减1,最终得到预期的3。
简化场景
如果你的数据中不会出现末尾多余的分隔符,直接使用以下简化表达式即可:
LEN([维度名].[列名].CurrentMember.MemberValue) - LEN(REPLACE([维度名].[列名].CurrentMember.MemberValue, "|", ""))
内容的提问来源于stack exchange,提问作者Sathish G
相关产品推荐
相关产品推荐

