全部文档
文档中心财务模型deepcubedeepcube语法计算范围定义语句

计算范围定义语句

在多维计算中,我们需要为每一句计算定义计算的范围。然而在实际计算中,有一部分维度的成员范围在整个计算过程中是始终不变的,例如年,场景,版本等。

在每一句计算中都写全所有维度是一件繁琐的事情,为此我们可以使用scope()函数来简化写法,将一些不变的维度写进scope()里,在计算时,loc中未指定的维度会从scope里找范围。

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"]])
    
    # 每句计算都指定完整的维度组合范围
    cube1.loc[year["2021"],
        scenario["Actual"],
        version["Working"],
        period["8"],
        partner["TotalPartner"].Base(),
        movement["CLO"].Base(),
    	account['A010101'], 
    	entity['B'].Base()] = cube1.loc[
        	entity['NoEntity']] * cube1.loc[
            account['A01'], partner['NoPartner']]

    cube1.loc[year["2021"],
        scenario["Actual"],
        version["Working"],
        period["8"],
        partner["TotalPartner"].Base(),
        movement["CLO"].Base(),
    	account['A010101'], 
    	entity['A'].Base()] = cube1.loc[
        	entity['NoEntity']] * cube1.loc[
            account['A02'], partner['NoPartner']]

    cube1.loc[year["2021"],
        scenario["Actual"],
        version["Working"],
        period["8"],
        partner["TotalPartner"].Base(),
        movement["CLO"].Base(),
    	account['A010101'], 
    	entity['c'].Base()] = cube1.loc[
        	entity['NoEntity']] * cube1.loc[
            account['A03'], partner['NoPartner']]
    # 将计算结果写入Cube
    cube1.submit_calc()

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(),
    	account['A010101'])
    
    # 每句计算都指定完整的维度组合范围
    cube1.loc[entity['B'].Base()] = cube1.loc[
        	entity['NoEntity']] * cube1.loc[
            account['A01'], partner['NoPartner']]

    cube1.loc[entity['A'].Base()] = cube1.loc[
        	entity['NoEntity']] * cube1.loc[
            account['A02'], partner['NoPartner']]

    cube1.loc[entity['c'].Base()] = cube1.loc[
        	entity['NoEntity']] * cube1.loc[
            account['A03'], partner['NoPartner']]
    # 将计算结果写入Cube
    cube1.submit_calc()

每个cube同一时刻只存在一个scope,但是scope()函数可以多次指定,每次指定时,对scope范围内的同一个维度的成员范围会做替换操作。

scope未指定的维度会默认为是全部维度成员Descendant(#root,0) 。

Copy
def main():
	cube1 = deepcube('cube1')
    Entity = cube1.Entity
    Partner = cube1.Partner
    Account = cube1.Account
    Value = cube1.Value
	Audittrail = cube1.Audittrail

	# 初次设置scope范围
    cube1.scope(Account['6602'].Base() + Account['6604'].Base(), 
          Audittrail['REPORT'],
          Partner['Internal'].Base(), 
          Value['Elimination'],
    		Entity['East'].IBase())
	print(cube1.scopes)
	"""
    {"Account": Account['6602'].Base() + Account['6604'].Base(),
    "Audittrail": Audittrail['REPORT'],
    "Partner": Partner['Internal'].Base(), 
    "Value": Value['Elimination'],
    "Entity": Entity['East'].IBase()}
 	"""
	
	# 再次设置scope范围,指定了一个新Entity范围,但其他维度的范围不变
    cube1.scope(Entity['West'].IBase())
	print(cube1.scopes)
	"""
    {"Account": Account['6602'].Base() + Account['6604'].Base(),
    "Audittrail": Audittrail['REPORT'],
    "Partner": Partner['Internal'].Base(), 
    "Value": Value['Elimination'],
    "Entity": entity['West'].IBase()}
 	"""

回到顶部

咨询热线

400-821-9199

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

ctrl+Enter to send