CN108037909A - 关联数据集计算方法及系统和计算机设备 - Google Patents
关联数据集计算方法及系统和计算机设备 Download PDFInfo
- Publication number
- CN108037909A CN108037909A CN201710874768.5A CN201710874768A CN108037909A CN 108037909 A CN108037909 A CN 108037909A CN 201710874768 A CN201710874768 A CN 201710874768A CN 108037909 A CN108037909 A CN 108037909A
- Authority
- CN
- China
- Prior art keywords
- data set
- function
- script
- calculated
- associated data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000205 computational method Methods 0.000 title claims abstract description 36
- 230000006870 function Effects 0.000 claims description 127
- 238000004364 calculation method Methods 0.000 claims description 28
- 238000000034 method Methods 0.000 claims description 27
- 230000000306 recurrent effect Effects 0.000 claims description 10
- 238000004590 computer program Methods 0.000 claims description 9
- 238000012545 processing Methods 0.000 claims description 5
- 238000003860 storage Methods 0.000 claims description 3
- 238000012423 maintenance Methods 0.000 abstract description 5
- 238000010586 diagram Methods 0.000 description 21
- 238000011156 evaluation Methods 0.000 description 12
- 230000008901 benefit Effects 0.000 description 7
- 230000008569 process Effects 0.000 description 6
- 230000009286 beneficial effect Effects 0.000 description 4
- 238000013497 data interchange Methods 0.000 description 4
- 238000009826 distribution Methods 0.000 description 3
- 238000000151 deposition Methods 0.000 description 2
- 238000005304 joining Methods 0.000 description 2
- 241001269238 Data Species 0.000 description 1
- 230000002776 aggregation Effects 0.000 description 1
- 238000004220 aggregation Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000013480 data collection Methods 0.000 description 1
- 238000001914 filtration Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 238000007711 solidification Methods 0.000 description 1
- 230000008023 solidification Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/20—Software design
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明提供了一种关联数据集的计算方法及系统和计算机设备。其中,一种关联数据集的计算方法,包括:根据业务扩展方式注册自定义函数;采用脚本语言和函数描述数据集的关系,其中函数包括自定义函数和/或通用函数;根据脚本语言和函数描述的数据集的关系,对数据集进行计算。通过本发明的技术方案,关联关系通过脚本语言描述,表达能力更强,不仅可以加速软件开发进度,而且可以显著提升软件的拓展性,这种描述可以在不同数据集方便地复用,数据之间的引用和计算关系可以扩展以适应各种不同的业务场景,同时在软件的后期维护中提供极大的便捷。
Description
技术领域
本发明涉及计算机技术领域,具体而言,涉及一种关联数据集的计算方法,一种关联数据集的计算系统,一种计算机设备,一种计算机可读存储介质。
背景技术
相关技术中主要是将数据集的关联关系固化在程序中,缺点明显,主要表现在以下方面:
(1)每次对关系的调整都涉及到代码的重新编写、编译和分发到用户,修改工作量大而且风险高;
(2)数据集的关系可能很复杂(无法用简单的树形抽象),对于复杂的关系,固化程序容易由于计算顺序问题导致重复计算或者错误计算;
(3)由于关系直接对应固化的代码,所以不同数据集之间的关系难以复用。
发明内容
本发明旨在至少解决现有技术或相关技术中存在的技术问题之一。
为此,本发明的一方面在于提出了一种关联数据集的计算方法。
本发明的另一方面在于提出了一种关联数据集的计算系统。
本发明的再一方面在于提出了一种计算机设备。
本发明的又一方面在于提出了一种计算机可读存储介质。
有鉴于此,本发明提出了一种关联数据集的计算方法,包括:根据业务扩展方式注册自定义函数;采用脚本语言和函数描述数据集的关系,其中函数包括自定义函数和/或通用函数;根据脚本语言和函数描述的数据集的关系,对数据集进行计算。
根据本发明的关联数据集的计算方法,采用脚本语言(如JavaScript)和函数描述数据集的关联关系,支持一些通用函数,包括对表的过滤函数filterTable和基于字段的汇总函数sumByField等,以及支持注册自定义函数,同样使用脚本语言编写,通过自定义函数能够扩展关联关系的描述能力和计算能力,解决一些比较复杂的计算关系,例如计算一组数据的方差或者计算一组音频数据的MFCC特征。本发明提供的关联数据集的计算方法,关联关系通过脚本语言描述,表达能力更强,不仅可以加速软件开发进度,而且可以显著提升软件的拓展性,这种描述可以在不同数据集方便地复用,数据之间的引用和计算关系可以扩展以适应各种不同的业务场景,同时在软件的后期维护中提供极大的便捷。
另外,根据本发明上述的关联数据集的计算方法,还可以具有如下附加的技术特征:
在上述技术方案中,优选地,采用脚本语言和函数描述数据集的关系的步骤,具体包括:采用脚本语言和函数描述数据集中各表内部和各表之间的计算关系,其中,每一条计算关系对应一个公式。
在该技术方案中,采用脚本语言和函数描述数据集关系,具体而言,脚本通过一系列的公式来表达数据集内部各个表内部和表之间的计算关系,每一个公式可以表达一条计算关系。由于每个计算关系都是独立的一条计算公式,可以很容易的复用到别的数据集中,从而加速了软件开发进度。
在上述任一技术方案中,优选地,根据脚本语言和函数描述的数据集的关系,对数据集进行计算的步骤,具体包括:读取数据集中的数据到脚本对象;循环公式列表,根据公式内容给脚本对象添加Getter属性;循环每个公式中的计算字段,调用与计算字段对应的Getter函数进行计算。
在该技术方案中,计算引擎采用Getter模式,利用脚本对象(如JavaScript对象)本身的getter方法,通过对计算字段设置getter属性实现表达式求值。优选地,以选择JavaScript作为脚本语言为例,由于之前的公式是使用JavaScript语法,所有函数都在当前JavaScript运行环境中注册,所以可以直接使用eval(expr)求值;其中引用的别的计算字段也会调用到相应字段的Getter函数,这样就可以递归计算出所有计算字段的值,能够大大提升计算效率。
在上述任一技术方案中,优选地,还包括:为每个计算字段分配一个目标位置,在对每个计算字段进行计算时,初始化目标位置,并在计算完毕后,将计算结果写入目标位置。
在该技术方案中,为了防止对相同计算字段的重复计算,对于所有计算字段分配一个目标位置,优选地为一个缓存区域,每个计算字段计算时初始化对应的位置,计算完成后会将结果保存到对应位置。这样可以达到两个目的:一方面如果计算关系中有循环引用,可以通过重复初始化来判断,另一方面所有的计算字段只会计算一次,之后都会直接读取缓存中的数据,从而防止重复计算,同时提高系统的可靠性和计算效率。
在上述任一技术方案中,优选地,还包括:采用json格式将数据集进行存储。
在该技术方案中,json格式是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,可以表示复杂的结构,例如可以表示数组和复杂的对象。数据集使用json数据格式存储,数据集中的表以数组的形式存储,每条记录是单独的对象,具有易于阅读和编写,同时也易于解析和生成的优势。
在上述任一技术方案中,优选地,还包括:脚本语言为JavaScript。
在该技术方案中,脚本语言包括但不限于JavaScript。对于计算关系还可以采用别的图灵完备的脚本语言,比如python,lua等。
本发明还提出了一种关联数据集的计算系统,包括:注册单元,用于根据业务扩展方式注册自定义函数;数据集单元,用于采用脚本语言和函数描述数据集的关系,其中函数包括自定义函数和/或通用函数;计算单元,用于根据数据集的关系,对数据集进行计算。
根据本发明的关联数据集计算系统,采用脚本语言(如JavaScript)和函数描述数据集的关联关系,支持一些通用函数,包括对表的过滤函数filterTable和基于字段的汇总函数sumByField等,以及支持注册自定义函数,同样使用脚本语言编写,通过自定义函数能够扩展关联关系的描述能力和计算能力,解决一些比较复杂的计算关系,例如计算一组数据的方差或者计算一组音频数据的MFCC特征。本发明提供的关联数据集的计算方法,关联关系通过脚本语言描述,表达能力更强,不仅可以加速软件开发进度,而且可以显著提升软件的拓展性,这种描述可以在不同数据集方便地复用,数据之间的引用和计算关系可以扩展以适应各种不同的业务场景,同时在软件的后期维护中提供极大的便捷。
在上述技术方案中,优选地,数据集单元,具体用于:采用脚本语言和函数描述数据集中各表内部和各表之间的计算关系,其中,每一条计算关系对应一个公式。
在该技术方案中,采用脚本语言和函数描述数据集关系,具体而言,脚本通过一系列的公式来表达数据集内部各个表内部和表之间的计算关系,每一个公式可以表达一条计算关系。由于每个计算关系都是独立的一条计算公式,可以很容易的复用到别的数据集中,从而加速了软件开发进度。
在上述任一技术方案中,优选地,计算单元,具体包括:读取单元,用于读取数据集中的数据到脚本对象;配置单元,用于循环公式列表,根据公式内容给脚本对象添加Getter属性;计算单元,用于循环每个公式中的计算字段,调用与计算字段对应的Getter函数进行计算。
在该技术方案中,计算引擎采用Getter模式,利用脚本对象(如JavaScript对象)本身的getter方法,通过对计算字段设置getter属性实现表达式求值。优选地,以选择JavaScript作为脚本语言为例,由于之前的公式是使用JavaScript语法,所有函数都在当前JavaScript运行环境中注册,所以可以直接使用eval(expr)求值;其中引用的别的计算字段也会调用到相应字段的Getter函数,这样就可以递归计算出所有计算字段的值,能够大大提升计算效率。
在上述任一技术方案中,优选地,计算单元,具体还包括:处理单元,用于为每个计算字段分配一个目标位置,在对每个计算字段进行计算时,初始化目标位置,并在计算完毕后,将计算结果写入目标位置。
在该技术方案中,为了防止对相同计算字段的重复计算,对于所有计算字段分配一个目标位置,优选地为一个缓存区域,每个计算字段计算时初始化对应的位置,计算完成后会将结果保存到对应位置。这样可以达到两个目的:一方面如果计算关系中有循环引用,可以通过重复初始化来判断,另一方面所有的计算字段只会计算一次,之后都会直接读取缓存中的数据,从而防止重复计算,同时提高系统的可靠性和计算效率。
在上述任一技术方案中,优选地,还包括:存储单元,用于采用json格式将数据集进行存储。
在该技术方案中,json格式是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,可以表示复杂的结构,例如可以表示数组和复杂的对象。数据集使用json数据格式存储,数据集中的表以数组的形式存储,每条记录是单独的对象,具有易于阅读和编写,同时也易于解析和生成的优势。
在上述任一技术方案中,优选地,还包括:脚本语言为JavaScript。
在该技术方案中,脚本语言包括但不限于JavaScript。对于计算关系还可以采用别的图灵完备的脚本语言,比如python,lua等。
本发明的再一方面,提出了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器用于执行如上述技术方案中任一项方法的步骤。
根据本发明的计算机设备,其所包含的处理器用于执行如上述任一技术方案中关联数据集的计算方法的步骤,因而该计算机设备能够实现该关联数据集的计算方法的全部有益效果,在此不再赘述。
本发明的又一方面,提出了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现了如上述技术方案中任一项方法的步骤。
根据本发明的计算机可读存储介质,其上存储的计算机程序被处理器执行时实现了如上述任一技术方案中关联数据集的计算方法的步骤,因而该计算机可读存储介质能够实现该关联数据集的计算方法的全部有益效果,在此不再赘述。
本发明的附加方面和优点将在下面的描述部分中变得明显,或通过本发明的实践了解到。
附图说明
本发明的上述和/或附加的方面和优点从结合下面附图对实施例的描述中将变得明显和容易理解,其中:
图1示出了根据本发明的一个实施例的关联数据集计算方法的流程示意图;
图2示出了根据本发明的另一个实施例的关联数据集计算方法的流程示意图;
图3示出了根据本发明的再一个实施例的关联数据集计算方法的流程示意图;
图4示出了根据本发明的又一个实施例的关联数据集计算方法的流程示意图;
图5示出了根据本发明的一个实施例的关联数据集计算系统的示意框图;
图6示出了根据本发明的另一个实施例的关联数据集计算系统的示意框图;
图7示出了根据本发明的再一个实施例的关联数据集计算系统的示意框图;
图8示出了根据本发明的又一个实施例的关联数据集计算系统的示意框图;
图9示出了根据本发明的一个具体实施例的根据关系对数据集进行计算的方法的流程示意图;
图10示出了根据本发明的一个具体实施例的计算流程示意图;
图11示出了根据本发明的一个具体实施例的计算字段的处理流程示意图;
图12示出了根据本发明的一个实施例的计算机设备的示意图。
具体实施方式
为了能够更清楚地理解本发明的上述目的、特征和优点,下面结合附图和具体实施方式对本发明进行进一步的详细描述。需要说明的是,在不冲突的情况下,本申请的实施例及实施例中的特征可以相互组合。
在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是,本发明还可以采用其他不同于在此描述的其他方式来实施,因此,本发明的保护范围并不受下面公开的具体实施例的限制。
如图1所示,根据本发明的一个实施例的关联数据集的计算方法的流程示意图。其中,该计算方法包括:
步骤102,根据业务扩展方式注册自定义函数;
步骤104,采用脚本语言和函数描述数据集的关系,其中函数包括自定义函数和/或通用函数;
步骤106,根据脚本语言和函数描述的数据集的关系,对数据集进行计算。
本发明提供的关联数据集的计算方法,采用脚本语言(如JavaScript)和函数描述数据集的关联关系,支持一些通用函数,包括对表的过滤函数filterTable和基于字段的汇总函数sumByField等,以及支持注册自定义函数,同样使用脚本语言编写,通过自定义函数能够扩展关联关系的描述能力和计算能力,解决一些比较复杂的计算关系,例如计算一组数据的方差或者计算一组音频数据的MFCC特征。本发明提供的关联数据集的计算方法,关联关系通过脚本语言描述,表达能力更强,不仅可以加速软件开发进度,而且可以显著提升软件的拓展性,这种描述可以在不同数据集方便地复用,数据之间的引用和计算关系可以扩展以适应各种不同的业务场景,同时在软件的后期维护中提供极大的便捷。
如图2所示,根据本发明的另一个实施例的关联数据集的计算方法的流程示意图。其中,该计算方法包括:
步骤202,根据业务扩展方式注册自定义函数;
步骤204,采用脚本语言和函数描述数据集中各表内部和各表之间的计算关系,其中,每一条计算关系对应一个公式,其中函数包括自定义函数和/或通用函数;
步骤206,根据脚本语言和函数描述的数据集的关系,对数据集进行计算。
在该实施例中,采用脚本语言和函数描述数据集关系,具体而言,脚本通过一系列的公式来表达数据集内部各个表内部和表之间的计算关系,每一个公式可以表达一条计算关系。由于每个计算关系都是独立的一条计算公式,可以很容易的复用到别的数据集中,从而加速了软件开发进度。
如图3所示,根据本发明的再一个实施例的关联数据集的计算方法的流程示意图。其中,该计算方法包括:
步骤302,根据业务扩展方式注册自定义函数;
步骤304,采用脚本语言和函数描述数据集中各表内部和各表之间的计算关系,其中,每一条计算关系对应一个公式,其中函数包括自定义函数和/或通用函数;
步骤306,读取数据集中的数据到脚本对象;
步骤308,循环公式列表,根据公式内容给脚本对象添加Getter属性;
步骤310,循环每个公式中的计算字段,调用与计算字段对应的Getter函数进行计算。
在该实施例中,计算引擎采用Getter模式,利用脚本对象(如JavaScript对象)本身的getter方法,通过对计算字段设置getter属性实现表达式求值。优选地,以选择JavaScript作为脚本语言为例,由于之前的公式是使用JavaScript语法,所有函数都在当前JavaScript运行环境中注册,所以可以直接使用eval(expr)求值;其中引用的别的计算字段也会调用到相应字段的Getter函数,这样就可以递归计算出所有计算字段的值,能够大大提升计算效率。
如图4所示,根据本发明的又一个实施例的关联数据集的计算方法的流程示意图。其中,该计算方法包括:
步骤402,根据业务扩展方式注册自定义函数;
步骤404,采用脚本语言和函数描述数据集中各表内部和各表之间的计算关系,每一条计算关系对应一个公式,并为公式中每个计算字段分配一个目标位置,其中函数包括自定义函数和/或通用函数;
步骤406,读取数据集中的数据到脚本对象;
步骤408,循环公式列表,根据公式内容给脚本对象添加Getter属性;
步骤410,循环每个公式中的计算字段,调用与计算字段对应的Getter函数进行计算,初始化该计算字段的目标位置,并在计算完毕后,将计算结果写入目标位置。
在该实施例中,为了防止对相同计算字段的重复计算,对于所有计算字段分配一个目标位置,优选地为一个缓存区域,每个计算字段计算时初始化对应的位置,计算完成后会将结果保存到对应位置。这样可以达到两个目的:一方面如果计算关系中有循环引用,可以通过重复初始化来判断,另一方面所有的计算字段只会计算一次,之后都会直接读取缓存中的数据,从而防止重复计算,同时提高系统的可靠性和计算效率。
在上述任一实施例中,优选地,还包括:采用json格式将数据集进行存储。
在该实施例中,json格式是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,可以表示复杂的结构,例如可以表示数组和复杂的对象。数据集使用json数据格式存储,数据集中的表以数组的形式存储,每条记录是单独的对象,具有易于阅读和编写,同时也易于解析和生成的优势。
在上述任一实施例中,优选地,脚本语言为JavaScript。
在该实施例中,脚本语言包括但不限于JavaScript。对于计算关系还可以采用别的图灵完备的脚本语言,比如python,lua等。
如图5所示,根据本发明的一个实施例的关联数据集的计算系统的示意框图。其中,该计算系统500包括:
注册单元502,用于根据业务扩展方式注册自定义函数;
数据集单元504,用于采用脚本语言和函数描述数据集的关系,其中函数包括自定义函数和/或通用函数;
计算单元506,用于根据数据集的关系,对数据集进行计算。
本发明提供的关联数据集计算系统500,采用脚本语言(如JavaScript)和函数描述数据集的关联关系,支持一些通用函数,包括对表的过滤函数filterTable和基于字段的汇总函数sumByField等,以及支持注册自定义函数,同样使用脚本语言编写,通过自定义函数能够扩展关联关系的描述能力和计算能力,解决一些比较复杂的计算关系,例如计算一组数据的方差或者计算一组音频数据的MFCC特征。本发明提供的关联数据集的计算方法,关联关系通过脚本语言描述,表达能力更强,不仅可以加速软件开发进度,而且可以显著提升软件的拓展性,这种描述可以在不同数据集方便地复用,数据之间的引用和计算关系可以扩展以适应各种不同的业务场景,同时在软件的后期维护中提供极大的便捷。
在上述实施例中,优选地,数据集单元504,具体用于:采用脚本语言和函数描述数据集中各表内部和各表之间的计算关系,其中,每一条计算关系对应一个公式。
在该实施例中,采用脚本语言和函数描述数据集关系,具体而言,脚本通过一系列的公式来表达数据集内部各个表内部和表之间的计算关系,每一个公式可以表达一条计算关系。由于每个计算关系都是独立的一条计算公式,可以很容易的复用到别的数据集中,从而加速了软件开发进度。
如图6所示,根据本发明的另一个实施例的关联数据集的计算系统的示意框图。其中,该计算系统600包括:
注册单元602,用于根据业务扩展方式注册自定义函数;
数据集单元604,用于采用脚本语言和函数描述数据集的关系,其中函数包括自定义函数和/或通用函数;
计算单元606,用于根据数据集的关系,对数据集进行计算;
其中,计算单元606,具体包括:
读取单元6062,用于读取数据集中的数据到脚本对象;
配置单元6064,用于循环公式列表,根据公式内容给脚本对象添加Getter属性;
计算单元606,用于循环每个公式中的计算字段,调用与计算字段对应的Getter函数进行计算。
在该实施例中,计算引擎采用Getter模式,利用脚本对象(如JavaScript对象)本身的getter方法,通过对计算字段设置getter属性实现表达式求值。优选地,以选择JavaScript作为脚本语言为例,由于之前的公式是使用JavaScript语法,所有函数都在当前JavaScript运行环境中注册,所以可以直接使用eval(expr)求值;其中引用的别的计算字段也会调用到相应字段的Getter函数,这样就可以递归计算出所有计算字段的值,能够大大提升计算效率。
如图7所示,根据本发明的再一个实施例的关联数据集的计算系统的示意框图。其中,该计算系统700包括:
注册单元702,用于根据业务扩展方式注册自定义函数;
数据集单元704,用于采用脚本语言和函数描述数据集的关系,其中函数包括自定义函数和/或通用函数;
计算单元706,具体包括:
读取单元7062,用于读取数据集中的数据到脚本对象;
配置单元7064,用于循环公式列表,根据公式内容给脚本对象添加Getter属性;
处理单元7066,用于为每个计算字段分配一个目标位置,在对每个计算字段进行计算时,初始化目标位置,并在计算完毕后,将计算结果写入目标位置;
计算单元706,用于循环每个公式中的计算字段,调用与计算字段对应的Getter函数进行计算。
在该实施例中,为了防止对相同计算字段的重复计算,对于所有计算字段分配一个目标位置,优选地为一个缓存区域,每个计算字段计算时初始化对应的位置,计算完成后会将结果保存到对应位置。这样可以达到两个目的:一方面如果计算关系中有循环引用,可以通过重复初始化来判断,另一方面所有的计算字段只会计算一次,之后都会直接读取缓存中的数据,从而防止重复计算,同时提高系统的可靠性和计算效率。
如图8所示,根据本发明的又一个实施例的关联数据集的计算系统的示意框图。其中,该计算系统800包括:
注册单元802,用于根据业务扩展方式注册自定义函数;
数据集单元804,用于采用脚本语言和函数描述数据集的关系,其中函数包括自定义函数和/或通用函数;
存储单元806,用于采用json格式将数据集进行存储;
计算单元808,具体包括:读取单元8082,用于读取数据集中的数据到脚本对象;配置单元8084,用于循环公式列表,根据公式内容给脚本对象添加Getter属性;处理单元8086,用于为每个计算字段分配一个目标位置,在对每个计算字段进行计算时,初始化目标位置,并在计算完毕后,将计算结果写入目标位置;
计算单元808,用于循环每个公式中的计算字段,调用与计算字段对应的Getter函数进行计算。
在该实施例中,json格式是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,可以表示复杂的结构,例如可以表示数组和复杂的对象。数据集使用json数据格式存储,数据集中的表以数组的形式存储,每条记录是单独的对象,具有易于阅读和编写,同时也易于解析和生成的优势。
在上述任一实施例中,优选地,脚本语言为JavaScript。
在该实施例中,脚本语言包括但不限于JavaScript。对于计算关系还可以采用别的图灵完备的脚本语言,比如python,lua等。
根据本发明的一个具体实施例,提供了一种根据关系对数据集进行计算的方法。整个业务流程如图9所示:
步骤902,根据业务扩展需要注册自定义函数;
步骤904,通过脚本语言和函数描述数据集关系;
步骤906,使用json格式存储数据集;
步骤908,根据脚本定义的关系对数据集进行计算。
在该实施例中,选择JavaScript作为脚本语言,脚本通过一系列的公式来表达数据内部各个表内部和表之间的计算关系。每一个公式可以表达一条关系,公式左侧是需要求值的数据项,采用【表名】.【字段名】的形式;右侧是数据项的计算过程。计算过程中可以引用两个宏代码this和db,this代表当前记录,可以通过this.【字段名】访问当前记录某个字段的值;db代表当前数据集,可以通过db.【表名】访问当前数据集的某个表。右侧支持通用的四则运算,同时支持一些通用函数,包括对表的过滤函数filterTable和基于字段的汇总函数sumByField。
filterTable(tableName,fieldList,valueList)表过滤函数,其中,tableName:表名;fieldList:过滤字段名数组;valueList:过滤字段值数组;返回值为过滤后的记录列表。
sumByField(recordList,fieldName)汇总某个字段的值,其中,recordList:汇总的记录列表;fieldName:要汇总的字段名。
举例说明:在工程造价领域,分部的合价等于下面所有子分部的合价之和,如果用title表存储所有分部记录(包括子分部),分部与子分部之间用PID体现父子关系,total作为分部的合价字段。那么用脚本来描述这个业务规则就是:
title.total=sumByField(filterTable(‘total’,[‘PID’],[this.ID]),‘total’)。
为了适应各种不同的复杂业务,采用基于自定义函数注册的扩展方式,函数使用JavaScript语言编写,能够使用所有原生JavaScript的方法和属性。编写完成后直接把相应的js后缀的代码文件复制到指定目录即可,计算引擎在计算之前会先从该目录加载自定义的函数,然后在计算工程中调用这些函数。
数据集使用json数据格式存储。数据集中的表以数组的形式存储,每条记录是单独的对象。
整个计算流程如图10所示:
步骤1002,读取json格式数据到js对象;
步骤1004,循环公式列表;
步骤1006,根据公式内容给js对象添加Getter属性;
步骤1008,循环所有计算字段,调用Getter函数计算出值;
步骤1010,将js对象保存为json数据。
在该实施例中,计算引擎采用Getter模式,利用JavaScript对象本身的getter方法,通过对计算字段设置getter方法实现表达式求值。由于之前的计算公式是使用JavaScript语法,所有函数都在当前JavaScript运行环境中注册,所以可以直接使用eval(expr)求值。其中引用的别的字段也会调用到相应字段的Getter方法,这样就可以递归计算出所有计算字段的值。同时为了防止对相同字段的重复计算,对于所有计算字段申请一个缓存区域,每个计算字段计算时初始化对应的位置,计算完成后会将结果保存到对应位置。这样可以达到两个目的:(1)如果计算关系中有循环引用,可以通过重复初始化来判断;(2)所有的计算字段只会计算一次,之后都会直接读取缓存中的数据,效率能够大大提升。
计算字段的处理流程如图11所示:
步骤1102,读取计算字段;
步骤1104,调用该计算字段的Getter方法;
步骤1106,判断缓存中是否有该计算字段(field)的值;当判断结果为是时,执行步骤1114,返回结果;当判断结果为否时,执行步骤1108,通过公式进行计算;
步骤1110,判断公式中是否引用其他计算字段;当判断结果为否时,执行步骤1112,将计算结果写入缓存;当判断结果为是时,返回步骤1102;
步骤1114,返回结果。
本发明提供的该根据关系对数据集进行计算的方法,找到一种通用的方式描述数据之间的关系,即采用图灵完备的脚本语言来描述计算关系,这种描述可以在不同数据集方便地复用;采用自定义函数的方式处理业务扩展,数据之间的引用和计算关系可以扩展以适应各种不同的业务场景;通过定义Getter方法调用公式来处理计算字段的求值,计算过程中利用内存缓存区域,可以有效的检查循环引用和防止重复计算,同时提高系统的可靠性和计算效率。
如图12所示,根据本发明的一个实施例的计算机设备的示意图。该计算机设备1包括存储器12、处理器14及存储在存储器12上并可在处理器14上运行的计算机程序,处理器14用于执行如上述实施例中任一项方法的步骤。
本发明提供的计算机设备1,其所包含的处理器用于执行如上述任一实施例中关联数据集的计算方法的步骤,因而该计算机设备能够实现该关联数据集的计算方法的全部有益效果,在此不再赘述。
本发明的又一方面,提出了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现了如上述实施例中任一项方法的步骤。
本发明的计算机可读存储介质,其上存储的计算机程序被处理器执行时实现了如上述任一实施例中关联数据集的计算方法的步骤,因而该计算机可读存储介质能够实现该关联数据集的计算方法的全部有益效果,在此不再赘述。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (14)
1.一种关联数据集的计算方法,其特征在于,包括:
根据业务扩展方式注册自定义函数;
采用脚本语言和函数描述数据集的关系,其中所述函数包括所述自定义函数和/或通用函数;
根据所述脚本语言和所述函数描述的数据集的关系,对所述数据集进行计算。
2.根据权利要求1所述的关联数据集的计算方法,其特征在于,所述采用脚本语言和函数描述数据集的关系的步骤,具体包括:
采用所述脚本语言和所述函数描述数据集中各表内部和各表之间的计算关系,其中,每一条所述计算关系对应一个公式。
3.根据权利要求1所述的关联数据集的计算方法,其特征在于,所述根据所述脚本语言和所述函数描述的数据集的关系,对所述数据集进行计算的步骤,具体包括:
读取所述数据集中的数据到脚本对象;
循环公式列表,根据公式内容给所述脚本对象添加Getter属性;
循环每个公式中的计算字段,调用与所述计算字段对应的Getter函数进行计算。
4.根据权利要求3所述的关联数据集的计算方法,其特征在于,还包括:
为每个所述计算字段分配一个目标位置,在对每个所述计算字段进行计算时,初始化所述目标位置,并在计算完毕后,将计算结果写入所述目标位置。
5.根据权利要求1至4中任一项所述的关联数据集的计算方法,其特征在于,还包括:
采用json格式将所述数据集进行存储。
6.根据权利要求1至4中任一项所述的关联数据集的计算方法,其特征在于,
所述脚本语言为JavaScript。
7.一种关联数据集的计算系统,其特征在于,包括:
注册单元,用于根据业务扩展方式注册自定义函数;
数据集单元,用于采用脚本语言和函数描述数据集的关系,其中所述函数包括所述自定义函数和/或通用函数;
计算单元,用于根据所述脚本语言和所述函数描述的数据集的关系,对所述数据集进行计算。
8.根据权利要求7所述的关联数据集的计算系统,其特征在于,所述数据集单元,具体用于:
采用所述脚本语言和所述函数描述数据集中各表内部和各表之间的计算关系,其中,每一条所述计算关系对应一个公式。
9.根据权利要求7所述的关联数据集的计算系统,其特征在于,所述计算单元,具体包括:
读取单元,用于读取所述数据集中的数据到脚本对象;
配置单元,用于循环公式列表,根据公式内容给所述脚本对象添加Getter属性;
计算单元,用于循环每个公式中的计算字段,调用与所述计算字段对应的Getter函数进行计算。
10.根据权利要求9所述的关联数据集的计算系统,其特征在于,所述计算单元,具体还包括:
处理单元,用于为每个所述计算字段分配一个目标位置,在对每个所述计算字段进行计算时,初始化所述目标位置,并在计算完毕后,将计算结果写入所述目标位置。
11.根据权利要求7至10中任一项所述的关联数据集的计算系统,其特征在于,还包括:
存储单元,用于采用json格式将所述数据集进行存储。
12.根据权利要求7至10中任一项所述的关联数据集的计算系统,其特征在于,
所述脚本语言为JavaScript。
13.一种计算机设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器用于执行如权利要求1至6中任一项所述方法的步骤。
14.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现了如权利要求1至6中任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710874768.5A CN108037909A (zh) | 2017-09-25 | 2017-09-25 | 关联数据集计算方法及系统和计算机设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710874768.5A CN108037909A (zh) | 2017-09-25 | 2017-09-25 | 关联数据集计算方法及系统和计算机设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN108037909A true CN108037909A (zh) | 2018-05-15 |
Family
ID=62093136
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710874768.5A Pending CN108037909A (zh) | 2017-09-25 | 2017-09-25 | 关联数据集计算方法及系统和计算机设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108037909A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113779641A (zh) * | 2021-09-02 | 2021-12-10 | 新奥数能科技有限公司 | 数据配置方法、装置、计算机设备及计算机可读存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050060685A1 (en) * | 2003-09-11 | 2005-03-17 | Ingo Franz | Program generator |
CN102682360A (zh) * | 2012-04-17 | 2012-09-19 | 北京智达方通科技有限公司 | 一种企业预算管理系统及方法 |
CN104572049A (zh) * | 2013-10-18 | 2015-04-29 | 镇江鼎拓科技信息有限公司 | 一种基于web报表定义模板计算的方法 |
CN105786808A (zh) * | 2014-12-15 | 2016-07-20 | 阿里巴巴集团控股有限公司 | 一种用于分布式执行关系型计算指令的方法与设备 |
-
2017
- 2017-09-25 CN CN201710874768.5A patent/CN108037909A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050060685A1 (en) * | 2003-09-11 | 2005-03-17 | Ingo Franz | Program generator |
CN102682360A (zh) * | 2012-04-17 | 2012-09-19 | 北京智达方通科技有限公司 | 一种企业预算管理系统及方法 |
CN104572049A (zh) * | 2013-10-18 | 2015-04-29 | 镇江鼎拓科技信息有限公司 | 一种基于web报表定义模板计算的方法 |
CN105786808A (zh) * | 2014-12-15 | 2016-07-20 | 阿里巴巴集团控股有限公司 | 一种用于分布式执行关系型计算指令的方法与设备 |
Non-Patent Citations (1)
Title |
---|
刨坑数据: "润乾集算报表的脚本数据集", 《CSDN技术社区》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113779641A (zh) * | 2021-09-02 | 2021-12-10 | 新奥数能科技有限公司 | 数据配置方法、装置、计算机设备及计算机可读存储介质 |
CN113779641B (zh) * | 2021-09-02 | 2024-03-05 | 新奥数能科技有限公司 | 数据配置方法、装置、计算机设备及计算机可读存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11544284B2 (en) | Aggregation framework system architecture and method | |
US20170286510A1 (en) | Aggregation framework system architecture and method | |
CN103377059B (zh) | 基于jQuery框架的功能模块动态加载方法和装置 | |
CN107239458B (zh) | 基于大数据推算开发对象关系的方法及装置 | |
CN106875156A (zh) | 一种通用化智能审核平台及其审核方法 | |
US9098630B2 (en) | Data selection | |
CN106385640A (zh) | 视频标注方法及装置 | |
CN113835692B (zh) | 字典的数据处理方法、装置、电子设备及计算机存储介质 | |
CN107545182A (zh) | 一种ios应用中绕过函数调用链检测的方法及系统 | |
CN114611006A (zh) | 基于用户兴趣挖掘的大数据分析方法及系统 | |
CN107480040A (zh) | 工作流稳定性测试方法及设备 | |
CN103678591B (zh) | 自动执行多业务单据统计处理的装置和方法 | |
CN105117489B (zh) | 一种数据库管理方法、装置及电子设备 | |
CN109344173A (zh) | 数据管理方法和装置、数据结构 | |
CN108037909A (zh) | 关联数据集计算方法及系统和计算机设备 | |
CN107832228A (zh) | 一种测试用例约简方法、装置、设备及存储介质 | |
CN111046052A (zh) | 一种数据库中的操作记录存储方法、装置及设备 | |
US11775564B2 (en) | Method and apparatus for processing data | |
CN103632099B (zh) | 未导出的Native API函数获取方法及装置 | |
Dunne et al. | Discovering inconsistency through examination dialogues | |
Cimini et al. | Nominal SOS | |
CN112817984A (zh) | 数据处理方法及装置、数据来源获取方法及装置 | |
CN117389527A (zh) | 一种基于React Native的灰度热部署分布式事务的营销中台系统 | |
CN111723249A (zh) | 一种实现数据处理的方法、装置、计算机存储介质及终端 | |
CN113420097B (zh) | 一种数据分析方法、装置、存储介质及服务器 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20180515 |