如何在OLAP Cube的父子账户维度中为GROSS-PROFIT配置差值度量
解决OLAP Cube中GROSS-PROFIT账户的差值计算需求
嘿,刚好之前处理过类似的账户层级度量计算问题,给你几个实用的方案,你可以根据自己的Cube结构选最合适的:
方案1:创建带条件判断的计算度量
如果不想修改原有[Measures].[Report]的逻辑,可以新建一个计算度量,针对GROSS-PROFIT成员单独计算差值,其他账户保持原有求和逻辑:
CREATE MEMBER CURRENTCUBE.[Measures].[Adjusted Report] AS IIF( -- 这里建议用UniqueName避免重名问题,替换成你Cube中GROSS-PROFIT的实际唯一名称 [Account].CurrentMember.UniqueName = "[Account].[GROSS PROFIT]", -- 取REVENUES的Report值减去COSTS的Report值 ([Account].[REVENUES], [Measures].[Report]) - ([Account].[COSTS], [Measures].[Report]), -- 其他账户沿用原有求和结果 [Measures].[Report] ), VISIBLE = 1;
注意:如果账户维度存在重名成员,一定要用UniqueName而非Name来判断,确保逻辑精准。
方案2:利用账户层级的子节点集合动态计算
如果GROSS-PROFIT是REVENUES和COSTS的直接父节点,也可以通过遍历子节点来动态计算,后续子节点调整时(只要类型对应)不用修改代码:
CREATE MEMBER CURRENTCUBE.[Measures].[Adjusted Report] AS IIF( [Account].CurrentMember.UniqueName = "[Account].[GROSS PROFIT]", -- 对REVENUES取正值,COSTS取负值后求和,实现差值效果 SUM( [Account].CurrentMember.Children, IIF( [Account].CurrentMember.Children.CurrentMember.UniqueName = "[Account].[REVENUES]", [Measures].[Report], -[Measures].[Report] ) ), [Measures].[Report] ), VISIBLE = 1;
方案3:在维度层面设置自定义汇总(适合SSAS环境)
如果你用的是SQL Server Analysis Services(SSAS),可以直接在Account维度里给GROSS-PROFIT成员设置自定义汇总公式,无需新建度量:
- 打开维度设计器,找到Account维度的成员层级
- 右键点击
GROSS PROFIT成员,选择「属性」 - 在「自定义汇总公式」属性中输入MDX表达式:
([Account].[REVENUES], [Measures].[Report]) - ([Account].[COSTS], [Measures].[Report])
这样原有[Measures].[Report]在GROSS-PROFIT成员上会自动使用这个差值公式,其他成员保持默认的求和逻辑。
内容的提问来源于stack exchange,提问作者Dan.G
相关产品推荐
相关产品推荐

