全部文档
文档中心财务模型deepcubedeepcube案例预算数据分摊

预算数据分摊

假设某预算项目客户需要在省级entity上填次年预算,需要系统根据上年每个城市的实际数据,将预算数据同比例分摊到每个城市。并且需要将客户在省级entity上填的数据向上汇总。

其中entity维度树形结构如下:

上年实际数如下:

省级的预算数据填在Version1上,Version1开启了自上而下。

脚本如下:

Copy
from deepcube.cube.cube import deepcube


def main(p1, p2):
    # 获取表单传参的year,赋值到变量中
    cur_year = p2['year']
    cur_entity = p2['Entity_wb1']

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

    # 为了后续计算写法简单,在这里将cube的维度赋值给同名变量(注意这里cube1.year中的year是字段名)
    year = cube1.year
    period = cube1.period
    scenario = cube1.scenario
    version = cube1.version
    account = cube1.account
    category = cube1.category
    entity = cube1.entity

    # 从cube加载数据,需要指定取数的范围。
    cube1.init_data([year[cur_year].shift(-1),
                     scenario["Actual"],
                     version["Working"],
                     account["expenses", "income"],
                     category['NoCategory'],
                     entity[cur_entity].Base(),
                     period['TotalPeriod'].Base()],
                     [year[cur_year],
                     scenario["Budget"],
                     version["Version1"],
                     account["expenses", "income"],
                     category['NoCategory'],
                     entity['TotalRegion2'].Level(2,2),
                     period['TotalPeriod'].Base()],
                     [year[cur_year],
                     scenario["Budget"],
                     version["Working"],
                     account["expenses", "income"],
                     category['NoCategory'],
                     entity[cur_entity].Base(),
                     period['TotalPeriod'].Base()])

    # 确定一个背景scope范围
    cube1.scope(year[cur_year],
                scenario["Budget"],
                version["Working"],
                category['NoCategory'],
                period['TotalPeriod'].Base(),
                account["expenses", "income"]
                )
    cube1.clear_data(entity[cur_entity].Base())
    # 计算,循环每个省份,计算当前省份下所有城市=全省预算*上年实际数/上年全省实际数
    for province in entity[cur_entity].Children():
        cube1.loc[province.Base()] = cube1.loc[
            province, version["Version1"]] * cube1.loc[
                year[cur_year].shift(-1), scenario["Actual"]] / cube1.loc[year[cur_year].shift(-1), scenario["Actual"], province]

    # 确定一个背景scope范围
    cube1.scope(version["Version1"])
    # 手动上卷汇总,从TotalRegion2往下两层开始汇总
    cube1.rollup(entity['TotalRegion2'], 2)
    # 将计算结果写入Cube
    cube1.submit_calc()

结果如下:

回到顶部

咨询热线

400-821-9199

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

ctrl+Enter to send