全部文档
文档中心财务模型deepcubedeepcube语法数据打印

数据打印

打印计算行数

在代码调试过程中,我们尝尝会遇到没有算出值的情况。一般原因有两种,第一种原因是目标集指定的范围是非录入节点,第二种原因,也是最常见的原因:来源集没有数据。

针对第二种原因,我们可以使用打印计算行数的功能来快速排查。

具体做法为在代码最开始的地方设置参数print_calculation_info为True,代码执行时将打印所有计算中来源集有0行的计算。

Copy
from deepcube import Config

Config.print_calculation_info = True

Copy
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行,均会打印。

Copy
from deepcube import Config

Config.print_calculation_info = True

Config.calc_info_show_all_formula = True

需要注意的是,print_calculation_info会降低计算效率,因此在脚本调试结束正式上线之前,请删除或注释掉该配置行。

打印具体数据

如果想要观察计算过程中的数据,可以使用display_data()函数,display_data()函数支持三个参数,max_rows打印的最大行数, max_cols打印的最大列数,sort_by排序字段。

使用display_data()函数不会影响内存中的数据,只会在控制台和作业日志中打印出对应范围的数据。

Copy
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()

打印结果如下:

Copy
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'])

打印结果如下:

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

回到顶部

咨询热线

400-821-9199

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

ctrl+Enter to send