如何在SSAS中用MDX创建计算成员获取筛选视图的月份数
解决OLAP多维数据集计算成员匹配月份筛选的问题
我来帮你搞定这个计算成员的问题!你当前的代码是基于年份成员的后代来统计月份数,但没有考虑到当前筛选上下文里的月份集合,所以哪怕你筛选了部分月份,它还是会返回全年的月份数量。
问题根源
你的原代码:
CREATE MEMBER CURRENTCUBE.[MEASURES].[AnzahlMonate] AS COUNT(Descendants( [Datum].[Datum - J - M - T].CurrentMember, [Datum].[Datum - J - M - T].[Monat] ),EXCLUDEEMPTY ) ,FORMAT_STRING = "0", VISIBLE = 1;
这里的Descendants是从当前年份成员向下取所有月份,完全忽略了你在筛选器里选中的月份范围,自然无法匹配筛选结果。
解决方案:使用EXISTING关键字获取筛选后的月份集合
我们需要让计数只针对当前筛选视图中存在的月份成员,可以用EXISTING关键字来限定集合,修改后的代码如下:
CREATE MEMBER CURRENTCUBE.[MEASURES].[AnzahlMonate] AS COUNT(EXISTING [Datum].[Datum - J - M - T].[Monat].Members, EXCLUDEEMPTY) ,FORMAT_STRING = "0", VISIBLE = 1;
如果你需要确保只统计当前选中年份下的筛选月份(比如用户可能同时选了多个年份的部分月份),可以结合层级进一步限定:
CREATE MEMBER CURRENTCUBE.[MEASURES].[AnzahlMonate] AS COUNT( EXISTING Descendants( [Datum].[Datum - J - M - T].CurrentMember, [Datum].[Datum - J - M - T].[Monat] ), EXCLUDEEMPTY ) ,FORMAT_STRING = "0", VISIBLE = 1;
关键说明
EXISTING:这个关键字会强制MDX只考虑当前筛选上下文(比如你在报表或筛选器中选中的月份)里的成员,而不是全量的后代成员。[Datum].[Datum - J - M - T].[Monat].Members:直接引用月份层级的所有成员,再通过EXISTING过滤出当前筛选后的集合,这样计数就是你想要的“匹配筛选视图的月份数量”。
额外提示
如果你的筛选还涉及其他维度(比如特定产品或区域),EXCLUDEEMPTY会自动排除那些在当前筛选下没有数据的月份;如果不需要这个逻辑,可以直接去掉EXCLUDEEMPTY参数。
内容的提问来源于stack exchange,提问作者Metanormal
相关产品推荐
相关产品推荐

