全部文档
文档中心财务模型deepcubedeepcube语法loc计算多维计算的计算过程

多维计算的计算过程

在使用loc计算时,目标集(等号左边)和来源集(等号右边)的loc中可以指定多个维度的维度成员或成员集合。

Copy
from deepcube.cube.cube import deepcube


def main():
    # 实例一个deepcube对象,传参为cube元素名和path,如果cube元素名在应用中唯一,可以不传path
    cube1 = deepcube('cube1', path='/Consolidation_App/Consolidation/Main_Model')

    # 为了后续计算写法简单,在这里将cube的维度赋值给同名变量
    year = cube1.year
    period = cube1.period
    scenario = cube1.scenario
    version = cube1.version
    entity = cube1.entity
    partner = cube1.partner
    account = cube1.account
    movement = cube1.movement
    
    # 从cube加载数据
    cube1.init_data([year["2021"],
        scenario["Actual"],
        version["Working"],
        period["8"]])
    
    # 确定一个背景scope范围
    cube1.scope(year["2021"],
        scenario["Actual"],
        version["Working"],
        period["8"],
        partner["TotalPartner"].Base(),
        movement["CLO"].Base()
    )

    cube1.loc[account['A010101'], entity['B'].Base()] = cube1.loc[entity['NoEntity']
    ] * cube1.loc[account['A01'], partner['NoPartner']]

    # 将计算结果写入Cube
    cube1.submit_calc()

计算时,会将每个loc范围结合scope范围确定要计算的实际范围,我们将这一句计算的目标集和来源集完整的数据块维度信息罗列如下:

目标集

符号

来源集1

符号

来源集2

year[“2021”]

=

year[“2021”]

*

year[“2021”]

scenario[“Actual”]

scenario[“Actual”]

scenario[“Actual”]

version[“Working”]

version[“Working”]

version[“Working”]

period[“8”]

period[“8”]

period[“8”]

movement[“CLO”].Base()

movement[“CLO”].Base()

movement[“CLO”].Base()

partner[“TotalPartner”].Base()

partner[“TotalPartner”].Base()

partner[“NoPartner”]

account[‘A010101’]

account[‘A010101’]

account[‘A01’]

entity[‘B’].Base()

entity[‘NoEntity’]

entity[‘B’].Base()

假设来源集1和来源集2从财务模型获取的原始数据如下:

来源集1原始数据

year

period

scenario

version

movement

partner

account

entity

data

2021

8

Actual

Working

OPN

P1

A010101

NoEntity

100

2021

8

Actual

Working

OPN

P2

A010101

NoEntity

200

2021

8

Actual

Working

INC

P1

A010101

NoEntity

300

2021

8

Actual

Working

INC

P2

A010101

NoEntity

400

来源集2原始数据

year

period

scenario

version

movement

partner

account

entity

data

2021

8

Actual

Working

OPN

NoPartner

A01

B1

2

2021

8

Actual

Working

OPN

NoPartner

A01

B2

3

2021

8

Actual

Working

OPN

NoPartner

A01

B3

4

2021

8

Actual

Working

INC

NoPartner

A01

B1

7

2021

8

Actual

Working

INC

NoPartner

A01

B2

8

2021

8

Actual

Working

INC

NoPartner

A01

B3

9

目标集完整笛卡尔积范围

year

period

scenario

version

movement

partner

account

entity

data

2021

8

Actual

Working

OPN

P1

A010101

B1

2021

8

Actual

Working

OPN

P1

A010101

B2

2021

8

Actual

Working

OPN

P1

A010101

B3

2021

8

Actual

Working

OPN

P2

A010101

B1

2021

8

Actual

Working

OPN

P2

A010101

B2

2021

8

Actual

Working

OPN

P2

A010101

B3

2021

8

Actual

Working

INC

P1

A010101

B1

2021

8

Actual

Working

INC

P1

A010101

B2

2021

8

Actual

Working

INC

P1

A010101

B3

2021

8

Actual

Working

INC

P2

A010101

B1

2021

8

Actual

Working

INC

P2

A010101

B2

2021

8

Actual

Working

INC

P2

A010101

B3

多维数据块间的计算,本质上是将每个来源集按照维度字段与目标集进行左连接(类似SQL中的left join),将每个维度的成员对齐,然后做数值的列间计算。

在左连接时,目标集和来源集同一个维度的维度成员之间存在以下四种关系,其中一对多是不被允许的(在多维计算中,一对多本身是一种不合理的场景,有些场景可能会出现将多个成员的和,或者多个成员的平均值赋值给单个成员的情况,这种本质上还是一对一,是支持的,可以参考计算函数章节):

维度成员关系

是否支持

一对一

支持

多对一

支持

一对多

不支持

多对多

仅支持成员集合完全一致

在将来源集对齐至目标集时,

一对一的维度不论成员是否一致,都可以直接对应。(本例中的year,scenario,version,period,account)

多对一的维度会将单成员数据复制成多份,补齐到目标集成员的个数。(本例中的partner来源集2和entity来源集1)

多对多的维度,要求必须成员范围完全一致,成员一一对应。(本例中的partner来源集1,entity来源集2和movement)

两个来源集对齐到目标集之后的数据如下:

来源集1 对齐到目标集

year

period

scenario

version

movement

partner

account

entity

data

2021

8

Actual

Working

OPN

P1

A010101

NoEntity

100

2021

8

Actual

Working

OPN

P1

A010101

NoEntity

100

2021

8

Actual

Working

OPN

P1

A010101

NoEntity

100

2021

8

Actual

Working

OPN

P2

A010101

NoEntity

200

2021

8

Actual

Working

OPN

P2

A010101

NoEntity

200

2021

8

Actual

Working

OPN

P2

A010101

NoEntity

200

2021

8

Actual

Working

INC

P1

A010101

NoEntity

300

2021

8

Actual

Working

INC

P1

A010101

NoEntity

300

2021

8

Actual

Working

INC

P1

A010101

NoEntity

300

2021

8

Actual

Working

INC

P2

A010101

NoEntity

400

2021

8

Actual

Working

INC

P2

A010101

NoEntity

400

2021

8

Actual

Working

INC

P2

A010101

NoEntity

400

来源集2 对齐到目标集

year

period

scenario

version

movement

partner

account

entity

data

2021

8

Actual

Working

OPN

NoPartner

A01

B1

2

2021

8

Actual

Working

OPN

NoPartner

A01

B1

2

2021

8

Actual

Working

OPN

NoPartner

A01

B2

3

2021

8

Actual

Working

OPN

NoPartner

A01

B2

3

2021

8

Actual

Working

OPN

NoPartner

A01

B3

4

2021

8

Actual

Working

OPN

NoPartner

A01

B3

4

2021

8

Actual

Working

INC

NoPartner

A01

B1

7

2021

8

Actual

Working

INC

NoPartner

A01

B1

7

2021

8

Actual

Working

INC

NoPartner

A01

B2

8

2021

8

Actual

Working

INC

NoPartner

A01

B2

8

2021

8

Actual

Working

INC

NoPartner

A01

B3

9

2021

8

Actual

Working

INC

NoPartner

A01

B3

9

最后,将两列数值做计算,得到目标集的计算结果。

目标集

year

period

scenario

version

movement

partner

account

entity

来源集1

来源集2

计算结果

2021

8

Actual

Working

OPN

P1

A010101

B1

100

2

200

2021

8

Actual

Working

OPN

P1

A010101

B2

100

3

300

2021

8

Actual

Working

OPN

P1

A010101

B3

100

4

400

2021

8

Actual

Working

OPN

P2

A010101

B1

200

2

400

2021

8

Actual

Working

OPN

P2

A010101

B2

200

3

600

2021

8

Actual

Working

OPN

P2

A010101

B3

200

4

800

2021

8

Actual

Working

INC

P1

A010101

B1

300

7

2100

2021

8

Actual

Working

INC

P1

A010101

B2

300

8

2400

2021

8

Actual

Working

INC

P1

A010101

B3

300

9

2700

2021

8

Actual

Working

INC

P2

A010101

B1

400

7

2800

2021

8

Actual

Working

INC

P2

A010101

B2

400

8

3200

2021

8

Actual

Working

INC

P2

A010101

B3

400

9

3600

movement

partner

account

entity

data

来源集2

计算结果

OPN

NoPartner

A01

B1

2

2

200

OPN

NoPartner

A01

B2

3

3

300

OPN

NoPartner

A01

B3

4

4

400

OPN

NoPartner

A01

B1

2

2

400

OPN

NoPartner

A01

B2

3

3

600

OPN

NoPartner

A01

B3

4

4

800

INC

NoPartner

A01

B1

7

7

2100

INC

NoPartner

A01

B2

8

8

2400

INC

NoPartner

A01

B3

9

9

2700

INC

NoPartner

A01

B1

7

7

2800

INC

NoPartner

A01

B2

8

8

3200

INC

NoPartner

A01

B3

9

9

3600

回到顶部

咨询热线

400-821-9199

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

ctrl+Enter to send