在多维计算中,我们需要为每一句计算定义计算的范围。然而在实际计算中,有一部分维度的成员范围在整个计算过程中是始终不变的,例如年,场景,版本等。
在每一句计算中都写全所有维度是一件繁琐的事情,为此我们可以使用scope()函数来简化写法,将一些不变的维度写进scope()里,在计算时,loc中未指定的维度会从scope里找范围。
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()
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) 。
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()}
"""
回到顶部
咨询热线