SSAS多维数据集计算成员合计值错误,SCOPE语句执行结果不符合预期
问题原因
你的SCOPE脚本核心问题是缺少EXISTING关键字,导致Descendants函数返回的是Artikal维度PGA层级下当前成员的所有叶子节点,没有继承当前查询的其他筛选上下文(比如时间、区域等其他维度的筛选),会统计到超出当前上下文的无效数据,最终结果不符合预期。
另外你的SCOPE仅覆盖了使用PGA层级的查询场景,如果查询时用到Artikal维度的其他属性,该计算度量会返回初始的null值。
修正方案
你可以直接把逻辑写入计算成员,也可以调整SCOPE脚本适配所有场景,以下是两种可行写法:
写法1:直接定义计算成员(无需SCOPE,适配所有场景)
CREATE MEMBER CURRENTCUBE.[Measures].[Suma razlike] AS SUM( EXISTING Descendants([Artikal].[PGA].CurrentMember,,LEAVES), ([Measures].[Cijena] - [Measures].[Cijena LY]) * [Measures].[Kolicina] ), VISIBLE = 1;
写法2:调整后的SCOPE写法
CREATE MEMBER CURRENTCUBE.[Measures].[Suma razlike] AS null, VISIBLE = 1; -- 覆盖所有Artikal维度成员的场景,不限于PGA层级 SCOPE([Measures].[Suma razlike]); This = SUM( EXISTING Descendants([Artikal].[PGA].CurrentMember,,LEAVES), ([Measures].[Cijena] - [Measures].[Cijena LY]) * [Measures].[Kolicina] ); END SCOPE;
如果你的数据中存在Cijena、Cijena LY或Kolicina为null的情况,可以套一层CoalesceEmpty把null转成0,避免出现计算结果为null的问题:
SUM( EXISTING Descendants([Artikal].[PGA].CurrentMember,,LEAVES), (CoalesceEmpty([Measures].[Cijena],0) - CoalesceEmpty([Measures].[Cijena LY],0)) * CoalesceEmpty([Measures].[Kolicina],0) )
内容的提问来源于stack exchange,提问作者Luka Otočan
相关产品推荐
相关产品推荐

