全部文档
文档中心财务模型多维表达式MDXMDX函数计算函数SUM函数

SUM函数

返回指定成员集合对应数值的和。

SUM(Set_Expression, [ Distinct_flags ])  

Set_Expression -> 数据类型:{Member} 成员集合。 Distinct_flags -> 数据类型:关键字 可选,成员是否去重标志,包含如下选项:

标志

描述

True

去重,成员集合表达式中如果有重复的成员,会去掉重复成员后求和。如果不指定Distinct_flags,默认为True

False

不去重。

返回值数据类型: Number

SUM函数用于计算公式中,返回指定成员集合对应数值的和。

如下例子是将科目成员Indicators下所有末级指标科目求和,计算至科目成员SumIndicators上(这种场景通常是因为指标类型的科目成员会勾选“允许在父级节点输入”,此时指标科目的比重会被指定为0):

Scope([Scenario].[Budget], [Version].[V1], [Year].[2022],Base([Period].[TotalPeriod]),[View].[Periodic]);
    [Account].[SumIndicators] = SUM(Base([Account].[Indicators]));
End Scope;

如果需要在SUM函数中跨维度计算,与单个成员跨维度计算时的用法一样,可以使用->来表示。 如下例子是一个开启了累计数计算的财务模型,数据录入类型为当期发生额的资产负债类科目年末结转场景,将2021年的所有叶子节点的期间(1-12月)求和,再加上2021年的年初数,计算到2022年的年初数:

Scope([Scenario].[Budget], [Version].[V1], [Year].[2022],MemberSet([Account].[Total]),[View].[Periodic]);
    [Period].[Beginning] = SUM(Base([Period].[TotalPeriod])->[Year].[2021]) + [Period].[Beginning])->[Year].[2021];
End Scope;

因为SUM函数的入参是一个集合,因此也可以显示的传入一个集合:

Scope([Scenario].[Budget], [Version].[V1], [Year].[2022],MemberSet([Account].[Total]),[View].[Periodic], Base([Period].[TotalPeriod]));
    [Entity].[Region] = SUM({[Entity].[A],[Entity].[B],[Entity].[C]});
End Scope;

在计算公式中,集合表达式也可以用箭头指向另一个维度。 计算公式 [Entity].[Region] = SUM({[Entity].[A],[Entity].[B],[Entity].[C]}->[Year].[2021]); 等价于 [Entity].[Region] = [Entity].[A]->[Year].[2021]+[Entity].[B]->[Year].[2021]+[Entity].[C]->[Year].[2021];

SUM函数默认会去重,例如下面例子,集合{[Entity].[A],[Entity].[A],[Entity].[B]}包含了两个[Entity].[A],如果去重标识为True,或者未指定去重标识,则会按照去重后的集合求和{[Entity].[A],[Entity].[B]}

Scope([Scenario].[Budget], [Version].[V1], [Year].[2022],MemberSet([Account].[Total]),[View].[Periodic], Base([Period].[TotalPeriod]));
    [Entity].[Region] = SUM({[Entity].[A],[Entity].[A],[Entity].[B]});
End Scope;

等价于

Scope([Scenario].[Budget], [Version].[V1], [Year].[2022],MemberSet([Account].[Total]),[View].[Periodic], Base([Period].[TotalPeriod]));
    [Entity].[Region] = SUM({[Entity].[A],[Entity].[B]});
End Scope;

但如果指定去重标识为False,则不会去重,如下例子在加总时会计算两遍[Entity].[A]的值。

Scope([Scenario].[Budget], [Version].[V1], [Year].[2022],MemberSet([Account].[Total]),[View].[Periodic], Base([Period].[TotalPeriod]));
    [Entity].[Region] = SUM({[Entity].[A],[Entity].[A],[Entity].[B]},False);
End Scope;

注:

  • 如果计算列为多版本实体维,则会按照实体激活表过滤,无效成员不参与加总。

  • 列作用值类的转换逻辑特殊,使用SUM函数可能引起歧义,因此列作用有值类的财务模型不支持使用SUM函数。

回到顶部

咨询热线

400-821-9199

我们使用 ChatGPT,基于文档中心的内容以及对话上下文回答您的问题。

ctrl+Enter to send