针对第二种原因,我们可以使用打印计算行数的功能来快速排查。
具体做法为在代码最开始的地方设置参数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'])
打印结果如下:
如果脚本是在其他元素触发执行的,也可以在平台的作业记录中下载日志:
回到顶部
咨询热线