针对第二种原因,我们可以使用打印计算行数的功能来快速排查。
具体做法为在代码最开始的地方设置参数print_calculation_info为True,代码执行时将打印所有计算中来源集有0行的计算。
from deepcube import Config
Config.print_calculation_info = True
from deepcube.cube.cube import deepcube
# 设置print_calculation_info参数为True,将打印所有计算中来源集有0行的计算
from deepcube import Config
Config.print_calculation_info = True
def main(p1, p2):
    # 实例一个deepcube对象,传参为cube元素名和path,如果cube元素名在应用中唯一,可以不传path
    cube1 = deepcube('cube2')
    # 为了后续计算写法简单,在这里将cube的维度赋值给同名变量(注意这里cube1.year中的year是字段名)
    year = cube1.Year
    period = cube1.Period
    scenario = cube1.Scenario
    version = cube1.Version
    account = cube1.Account
    entity = cube1.Entity
    # 从cube加载数据,需要指定取数的范围。
    cube1.init_data([year["2022"],scenario["Actual"],version["Working"],period["TotalPeriod"].Base()])
    # 确定一个背景scope范围
    cube1.scope(year["2022"],scenario["Actual"],version["Working"],period["TotalPeriod"].Base())
    cube1.scope(entity['#root'].Descendant(with_parent=True))
    # 计算
    cube1.loc[account["A010101"], period['3']] = cube1.loc[period['1']] * cube1.loc[period['2']]
    cube1.loc[account["A010102"], period['1']] = cube1.loc[account["A010101"], period['1']] * 2
    cube1.loc[account["A010102"], period['1']] = cube1.loc[account["A010101"], year["2021"]]
    
    # 将计算结果写入Cube
    cube1.submit_calc()
打印效果:

此功能默认只会打印有0行的计算,如果想要打印全部计算的计算行数,可以再设置calc_info_show_all_formula参数为True。之后不论来源集是否有0行,均会打印。
from deepcube import Config
Config.print_calculation_info = True
Config.calc_info_show_all_formula = True
需要注意的是,print_calculation_info会降低计算效率,因此在脚本调试结束正式上线之前,请删除或注释掉该配置行。
使用display_data()函数不会影响内存中的数据,只会在控制台和作业日志中打印出对应范围的数据。
from deepcube.cube.cube import deepcube
from deepfos.options import OPTION
def main(p1, p2):
    # 实例cube1对象
    cube1 = deepcube('cube1', path='/deepcubeCase/cube')
    year = cube1.year
    period = cube1.period
    scenario = cube1.scenario
    version = cube1.version
    account = cube1.account
    entity = cube1.entity
    # 从cube加载数据,需要指定取数的范围。
    cube1.init_data({'year': year["2022"],
                     'scenario': scenario["Actual"],
                     'version': version["Version1"]})
    # 以下计算可以执行,关联字段的成员范围完全一致,cube2的非关联字段product只有单成员
    cube1.scope(year["2022"],
                scenario["Actual"],
                version["Version1"],
                entity['NoEntity'],
                account['SalesVolume'])
    # 使用display_data函数打印数据,可以不传打印行数,默认全部打印
    cube1.loc[account["SalesVolume"], period["TotalPeriod"].Base()].display_data()
打印结果如下:

from deepcube.cube.cube import deepcube
from deepfos.options import OPTION
def main(p1, p2):
    # 实例cube1对象
    cube1 = deepcube('cube1', path='/deepcubeCase/cube')
    year = cube1.year
    period = cube1.period
    scenario = cube1.scenario
    version = cube1.version
    account = cube1.account
    entity = cube1.entity
    # 从cube加载数据,需要指定取数的范围。
    cube1.init_data({'year': year["2022"],
                     'scenario': scenario["Actual"],
                     'version': version["Version1"]})
    # 以下计算可以执行,关联字段的成员范围完全一致,cube2的非关联字段product只有单成员
    cube1.scope(year["2022"],
                scenario["Actual"],
                version["Version1"],
                entity['NoEntity'],
                account['SalesVolume'])
    # 使用display_data函数打印数据,设置打印10行10列,排序按照先category,后decimal_val的顺序排序
    cube1.loc[account["SalesVolume"], period["TotalPeriod"].Base()].display_data(
        max_rows=10, max_cols=10,sort_by=['category', 'decimal_val'])
打印结果如下:

如果脚本是在其他元素触发执行的,也可以在平台的作业记录中下载日志:


回到顶部
咨询热线
