全部文档
文档中心财务模型deepcubedeepcube案例跨cube计算

跨cube计算

场景背景:某门店预算项目,已有各品类的单价数据,各个门店各品类的销售折扣,销量数据。计算各门店各品类的销售金额,并计算各门店平均折扣和各品类的平均折扣。

财务模型搭建如下:

需求3:跨cube计算

假设我们设计了cube2,用来存放报表数据,并且cube2中不再需要关注销售品类和门店,去掉了category维度,并且entity层级架构减少了一层。

计算过程:将销售金额从cube1导入到cube2中。数据从entity的大区对应到cube2group维度,account转到报表科目,category维度取汇总节点。

脚本如下:

Copy
from deepcube.cube.cube import deepcube


def main(p1, p2):
    # 获取表单传参的year,version,period,赋值到变量中
    cur_year = p2['Year_wb1']
    cur_version = p2['Version_wb1']
    cur_period = p2['Period_wb1']
    
    # 实例两个cube对象
    cube1 = deepcube('cube1')
    cube2 = deepcube('cube2')
    
    # 分别获取两个对象的维度
    year = cube1.year
    period = cube1.period
    scenario = cube1.scenario
    version = cube1.version
    account = cube1.account
    category = cube1.category
    entity = cube1.entity

    year2 = cube2.year
    period2 = cube2.period
    scenario2 = cube2.scenario
    version2 = cube2.version
    account2 = cube2.account
    group = cube2.group

    # 分别加载两个对象的数据
    cube1.init_data([year[cur_year],
                     scenario["Actual"],
                     version[cur_version],
                     account["SalesAmount"],
                     category['Total'],
                     period[cur_period],
                     entity['Total'].Base()])
    cube2.init_data([year2[cur_year],
                     scenario2["Actual"],
                     version2[cur_version],
                     period2[cur_period],
                     account2["6001500101"],
                     group['Total'].Base()])

    # 指定两个cube之间的字段对应关系
    cube2.add_relation(cube1, {'year': 'year', 'period': 'period', 'account': 'account', 'version': 'version',
                               'scenario': 'scenario', 'group': 'entity'})

    cube2.scope(year2[cur_year],
                scenario2["Actual"],
                version2[cur_version],
                period2[cur_period],
                group["Total"].Base())
    cube2.clear_data(account2["6001500101"])

    # 计算
    cube2.loc[account2["6001500101"]] = cube1.loc[account["SalesAmount"], category['Total']]
    cube2.submit_calc()

最终结果如图:

回到顶部

咨询热线

400-821-9199

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

ctrl+Enter to send