来源集中是允许使用动态汇总后的单元格的,如下例计算2,我们需要计算每个商品的销售额占全部商品销售总额的占比,因此用当前商品的销售额除以所有商品的销售额,这里所有商品的销售额由于是在通用类维度Product的汇总节点TotalProduct上,并且版本也不具备TopDown属性,因此所有商品的销售额是需要动态汇总出来的,随后再参与销售占比的计算:
from deepcube.cube.cube import deepcube
def main():
# 实例一个deepcube对象,传参为cube元素名和path,如果cube元素名在应用中唯一,可以不传path
cube1 = deepcube('cube1', path='/Consolidation_App/Consolidation/Main_Model')
# 为了后续计算写法简单,在这里将cube的维度赋值给同名变量(注意这里cube1.year中的year是字段名)
year = cube1.year
period = cube1.period
scenario = cube1.scenario
version = cube1.version
entity = cube1.entity
account = cube1.account
product = cube1.product
# 从cube加载数据
cube1.init_data([year["2022"],
scenario["Budget"],
version["V1"],
period["Q1"].Base(),
entity["TotalEntity"].Base()])
# 确定一个背景scope范围
cube1.scope(year["2022"],
scenario["Budget"],
version["V1"],
period["Q1"].Base(),
entity["TotalEntity"].Base(),
product["TotalProduct"].Base()
)
# 计算1
cube1.loc[account['Sales1'], product['p1']] = cube1.loc[
account['Volume1']] * cube1.loc[account['Price1']]
# 计算2
cube1.loc[account['Sales_percent']] = cube1.loc[account['Total_sales']] / cube1.loc[
account['Total_Sales'], product['TotalProduct']]
# 将计算结果写入Cube
cube1.submit_calc()
并且在计算过程中,所有汇总节点的数值都是动态计算得到的,上例中计算1往base节点account[‘Sales1’]和product[‘p1’]计算了数据,计算2的来源集在查询ccount[‘Total_Sales’], product[‘TotalProduct’]的汇总值时,会以上一步计算1算出来的最新结果做汇总。
但对于目标集来说,所有列作用是动态汇总字段的父级节点都是不可以写数的,deepcube会自动忽略计算范围内的动态汇总节点。如下例中,scope内指定了product[“TotalProduct”].IBase(),但是TotalProduct这个节点是动态汇总节点,所以在计算1中,product[“TotalProduct”].IBase()会转为product[“TotalProduct”].Base()进行计算。而对于计算2,在loc中指定了account[‘Total_Sales’],Total_Sales是动态汇总节点,因此整个计算会直接跳过。
from deepcube.cube.cube import deepcube
def main():
# 实例一个deepcube对象,传参为cube元素名和path,如果cube元素名在应用中唯一,可以不传path
cube1 = deepcube('cube1', path='/Consolidation_App/Consolidation/Main_Model')
# 为了后续计算写法简单,在这里将cube的维度赋值给同名变量(注意这里cube1.year中的year是字段名)
year = cube1.year
period = cube1.period
scenario = cube1.scenario
version = cube1.version
entity = cube1.entity
account = cube1.account
product = cube1.product
# 从cube加载数据
cube1.init_data([year["2022"],
scenario["Budget"],
version["V1"],
period["Q1"].Base(),
entity["TotalEntity"].Base(),
product["TotalProduct"].IBase()])
# 确定一个背景scope范围
cube1.scope(year["2022"],
scenario["Budget"],
version["V1"],
period["Q1"].Base(),
entity["TotalEntity"].Base(),
product["TotalProduct"].IBase()
)
# 计算1
cube1.loc[account['Sales1'], product['p1']] = cube1.loc[
account['Volume1']] * cube1.loc[account['Price1']]
# 计算2
cube1.loc[account['Total_Sales']] = cube1.loc[
account['Total_Volume']] * cube1.loc[account['Total_Price']]
# 将计算结果写入Cube
cube1.submit_calc()
除此之外,还需要注意的是,度量值只有data参与计算,备注不计算。
回到顶部
咨询热线