一种基于多维模型的指标计算引擎实现方法
文献发布时间:2023-06-19 12:13:22
技术领域
本发明涉及信息技术领域,提供了一种基于多维模型的指标计算引擎实现方法。
背景技术
目前银行系统各应用系统自建报表和加工指标,或者基于主题的数据集市搭建主题域内数据报表应用,但是仍然解决不好全行级数据统一管理、统一计算、统一用数问题。造成数据指标无归口部门管理,数据质量较难定位和提升,指标计算效率低,批处理交叉依赖,各系统重复造轮子重复编码等问题。
发明内容
本发明的目的在于构建全行级指标库,提供数据接口服务和报表加工数据源,支持全行T+1日用数需求,解决了数据指标口径不一、数据不准确,数据加工逻辑硬代码堆叠、重复加工,跑批交叉依赖、跑批运算耗时长等技术问题;
未解决上述技术问题,本发明采用以下技术手段:
本发明提供了一种基于多维模型的指标计算引擎实现方法,包括以下步骤:
步骤1、构建多维模型表和维度表,为指标计算提供数据来源;
步骤2、根据多维模型表进行指标计算逻辑设计,分别得到基础指标引擎配置表和衍生指标引擎配置表,其中衍生指标引擎配置表包括加减法指标引擎配置表和乘除法指标配置表;
步骤3、调用基础指标引擎配置表,将基础指标引擎配置表里指标的度量解析成多个计算度量,同时解析技术口径、维度、运算公式生成动态SQL语句,封装成程序模板并执行,得到基础指标计算结果;
步骤4、基于基础指标计算结果,调用加减法指标引擎配置表,将加减法指标引擎配置表里的技术口径结合加减法指标口径表解析成加减法运算公式,同时解析运算公式、运算顺序和运算层级生成动态SQL语句,然后封装成对应程序模板并执行,得到加减法指标计算结果;
步骤5、基于基础指标和加减法指标的计算结果,调用乘除法指标引擎配置表,将乘除法指标引擎配置表里的技术口径解析成乘除运算公式,同时解析运算公式、运算顺序和运算层级生成动态SQL语句,然后封装成对应程序模板并执行,得到乘除法指标计算结果。
步骤6、得到的基础指标计算结果、加减法指标计算结果、乘除法指标计算结果,作为数据接口,对外提供服务。
上述技术方案中,所述的步骤2包括以下步骤:
步骤2.1:配置基础指标的技术口径,根据多维模型表中的一个或多个维度以及维度的值,按固定格式配置,直接读取值拼装动态语句而不需要再解析;
步骤2.2:配置基础指标的度量,指标的统计频度(如:月,季,年)对应着的不同频度的度量字段(M_AVG_BAL、Q_AVG_BAL、Y_AVG_BAL),必须来自多维模型表,且按固定格式“|”来拼接配置;
步骤2.3:配置基础指标的维度,常用维度必须来自多维模型表,且按固定格式配置,程序模板读取后直接拼装成动态语句,指标计算时按这些常用维度进行分组统计指标值;
步骤2.4:配置基础指标的运算公式,统计函数SUM或者COUNT;
步骤2.5:配置基础指标调用的程序模板编号,每个指标均配置有调用该指标的程序模板的编号;;
步骤2.6:配置加减法指标的基础信息,如指标代码、指标名称、技术口径、指标类型、运算公式、指标层级、涉及到的程序模板编号;
步骤2.7:配置加减法指标口径表,用来解析加减法运行公式;
步骤2.9:配置乘除法指标的基础信息,如指标代码、指标名称、指标类型、程序模板编号;
步骤2.10:配置乘除法指标技术口径,必须拆解成二维乘除,如果涉及到多维相乘除需要拆解二维乘除和计算层级来处理。例如:指标d=a/b/c,需要拆解为先计算d1=a/b ,再计算d=d1/c ;
步骤2.11:配置乘除法指标层级、执行顺序,需遵守从MIN级往最高计算层级循环运算,同时同计算层级里配置好执行先后顺序。
上述技术方案中,还包括,配置基础指标业务类别,按业务主题划分,对应不同的程序模板,以满足多个主题的指标能并发计算,提高计算效率。
上述技术方案中,步骤3中模板程序执行具体步骤包含:
步骤3.1:将同一个模板程序 调用的基础指标引擎配置表中的记录集传给游标;
步骤3.2:将游标里记录集进行遍历循环,判断记录集是否读取完,如果是,则结束该程序模板的执行;如果否,跳转步骤3.3执行单个指标的计算;
步骤3.3:将加减法引擎配置表里指标的度量解析成多个计算度量,同时解析技术口径、维度生成动态SQL语句;
步骤3.4:执行该动态SQL语句;
步骤3.5:将执行结果信息写入日志表;
步骤3.6:提交单个指标计算结果入库;
步骤3.7:循环回到3.2步骤直到全部记录执行完成;
步骤3.8:基础指标各模板程序可并行执行计算,提高总计算效率;
上述技术方案中,步骤4中模板程序执行具体步骤包含:
步骤4.1:从同一个模板程序(按公式类型分) 调用的加减法指标引擎配置表中的记录集中,计算出最大指标层级MAX;然后按指标层级从MIN级到MAX级循环批量计算指标值;
步骤4.2:判断当前指标层级变量(默认1)是否小于等于MAX值,如果不是,则结束该模板程序的执行;如果是,则跳转步骤4.3执行该层级指标下一步计算;
步骤4.3:将该层级指标计算的指标结果集表、加减法指标引擎配置表、加减法指标口径表三张表做关联,依据加减法口径解析、运算公式、技术口径规则进行批量运算;
步骤4.4:将该层级的指标结果集插入到结果集表中;
步骤4.5:将执行结果相关信息写入日志表;
步骤4.6:提交该层级指标计算结果入库;
步骤4.7:指标层级变量+1,并返回到4.2步骤,判断新的层级值是否继续循环,直到全部层级执行完成,结束和跳出该模板程序执行。
步骤4.8:衍生指标(加减法)各程序模板可并行执行计算,提高总计算效率;
上述技术方案中,步骤5中模板程序执行具体步骤包含:
步骤5.1:从同一个模板程序调用的乘除法指标引擎配置表中的记录集中,计算出最大指标层级MAX;然后按指标层级从MIN级到MAX级循环计算指标值;
步骤5.2:判断当前指标层级变量(默认MIN)是否小于等于MAX值,如果不是,则结束该程序模板的执行;如果是,则跳转步骤5.3执行下一步;
步骤5.3:把调用该模板程序的指标记录集传给游标进行 FOR IN LOOP循环;
步骤5.4:将游标里记录集进行遍历循环,判断记录集是否读取完,如果是,则结束该模板程序的执行;如果否,则执行单个指标的计算;
步骤5.5:根据解析技术口径解析出乘除法的运算公式,生成动态SQL语句并执行,将执行结果信息写入日志表后提交该指标计算结果入库;
步骤5.6:循环回到5.4步骤直到该计算层级全部记录执行完成,跳出FOR IN LOOP循环;
步骤5.7:指标层级变量+1,并返回到5.2步骤,判断新的层级值是否满足继续循环条件,直到全部层级执行完成,结束和跳出该模板程序执行;
因为本发明采用上述技术方案,因此具备以下有益效果:
一、基于全行级指标库统一管理、统一运算,统一监控,避免各应用系统重复计算,跑批调度交叉依赖造成工作量巨大且无法控制,造成跑批总时间超长;
二、指标运算的源数据,在数仓多维度建模和初步加工,精简了引擎计算逻辑;
三、指标计算规则完全配置化,满足指标维度、技术口径、统计频率、计算度量需求变化后,调整配置参数即可,无需重写代码,重启服务器;
四、引擎配置控制指标计算层级,指标计算顺序,以及基础和衍生指标计算顺序;
五、基于程序模板,同类加工规则的指标统一代码模板调用,进行批量运算,提高运算效率;
六、多个程序模板,可以并行计算,提高总体运算效率;
七、对此,该方案首先对源数据在数仓进行事实表和维度表多维建模和初步加工,然后对指标进行标准定义形成指标库,最后设计指标计算引擎,引入引擎调度和日志监控功能,实现全行基础指标、衍生指标统一高并发引擎计算、统一调度和监控。保证了指标统一归口管理,指标口径统一出去,指标统一运算和监控,从而有效支撑各应用报表用数需求。
本申请计算引擎参数配置化,计算结果集约化,计算效率高并发,引擎调用的程序模板化,做到指标常规需求变更后(指标维度、统计口径、统计频率、计算度量),参数化调整即可,无需重写代码,重启服务器。
八、基于指标引擎配置为核心可以支撑全行指标的定义、口径、管理部门、用数部门、生效时间、失效时间、指标版本统一维护和查询,让数据质量提升有抓手;基于指标引擎运算,计可以支撑全行T+1用数需求,如自助即序查询指标的值;基于指标的结果加工出各应用系统的固定报表,做到报表数据来源和加工逻辑可追溯,保证数据准确性、唯一性,数据架构的合理性,同时避免了应用系统报表各自定义、从头加工,重复加工,从而减少人力成本。
附图说明
图1为多维模型和指标建模示例图 。
图2为基础指标引擎配置表示例;
图3为基础指标程序模板清单示例;
图4为加减法指标引擎配置表示例;
图5为指标口径表示例;
图6为衍生指标(加减法)程序模板清单示例;
图7为乘除法指标引擎配置表示例。
具体实施方式
指标集市模型含两大区:多维模型区和指标计算区
多维模型区:由多维模型表和维度表组成,是基于全行报表和指标的数据需求分主题进行设计的多维度数据模型,是指标计算的基础和主要数据来源,未来在应用的扩充上以数据需求为驱动在模型上进行丰富和扩展,模型设计的原则要兼容后续应用的增加或变更为目的。
指标计算区:由指标的定义和引擎计算组成。
指标定义:统一标准化定义、统一规范管理,包含指标归属部门对指标的业务含义、指标的编码、技术口径、 统计频度、常用维度、生效日期等信息进行定义和全生命周期管理,从而形成全行指标体系,以供业务人员和科技人员使用以及开发人员使用。
引擎计算:主要由引擎配置表、指标结果集表、度量和维度名称表、日志监控表等信息组成。基础指标和衍生指标分别对应不用的程序模版,程序模板轮循引擎配置表,逐个计算指标的值,统一存放在指标结果集表中,同时生成日志表。
引擎计算逻辑
通过引擎调度控制先执行基础指标、再执行衍生指标。
基础指标:
基础指标配置:基础指标引擎计算时,轮循配置表读取每个指标的信息如下:指标编号、指标名称、来源模型表、目标指标表、技术口径、维度、度量、指标类型、执行顺序、业务类别、程序模板编号等信息,生成动态语句,然后执行指标计算。基础指标引擎表配置表如图2所示。
引擎配置示例(主要配置项详细说明)
FIVE_CLASS_CD='01'AND PROD_CD='01' AND...
技术口径的配置(FIVE_CLASS_CD='01'AND PROD_CD='01')必须来自多维模型表中的一个或多个维度以及维度的值,按固定格式配置,程序能直接读取值拼装动态语句而不需要再解析。例如上面配置的业务口径:正常类消费贷款:五级分类=正常,贷款产品=消费贷款。
度量
M_AVG_BAL|Q_AVG_BAL|Y_AVG_BAL|…
日均余额:该指标的统计频度(如:月,季,年)对应着的不同频度的度量字段(M_AVG_BAL、Q_AVG_BAL、Y_AVG_BAL)必须来自多维模型表,且按固定格式“|”来拼接配置,程序模板读取后通过“|”解析成不同的度量值以横表的形式存放在指标结果集表中。因此,一个指标对应一个频度或者多个频度的度量值,分别由不同的程序模板计算。
纬度
DATA_DATE,ORG_ID,CURR_CD,PROD_CD,…
指标的常用维度,这些常用维度必须来自多维模型表,且按固定格式配置,程序模板读取后直接拼装成动态语句,指标计算时按这些常用维度进行分组统计指标值,指标和常用维度以竖标的形式存放在指标结果集中。一般指标的维度都能与指标结果集中的维度一一映射,特殊指标的维度需要用到指标结果集中预留维度字段,此时维度的中文含义需要参考指标维度度量名称配置表。
运算公式
配置该指标的统计函数SUM或者COUNT,基础指标计算公式只涉及SUM或者COUNT统计。
业务类别
业务类别:贷款-LN,按业务主题划分,对应不同的程序模板,以满足多个主题的指标能并发计算,提高计算效率。主题可划分为:存款-DT、贷款-LN 、资金-FD、中间业务-MD、卡类-CD…
程序模板编号
依据不同统计频度类型设计不同的程序模板来独立并行计算,优化了引擎配置同时也能提高总的计算效率。基础指标程序模板清单如下:
*注:
1如果指标包含的统计频度超出表格里频度之外可以依据实际情况扩充。
2程序模板是完全是依据统计频度来划分的,不阐述具体业务含义。
基础指标计算程序流程如下;
步骤2.1:将调用同一个程序模板(按统计频率分)的基础指标引擎配置表中的记录传给游标;
步骤2.2:将游标里记录集进行遍历循环,判断记录集是否读取完,如果是,则结束该程序模板的执行;如果否,则执行单个指标的计算;
步骤2.3:将引擎配置里指标的度量解析成多个计算度量,同时解析技术口径、维度等生成动态SQL语句;
步骤2.4:执行该动态SQL语句;
步骤2.5:将执行结果信息写入日志表;
步骤2.6:提交单个指标计算结果入库;
步骤2.7:循环回到2.2步骤直到全部记录执行完成;
步骤2.8:基础指标各程序模板可并行执行计算,提高总计算效率;
衍生指标(加减法):
衍生指标都是来源基础指标或者初等级衍生指标的加减乘除等公式计算而来。为了提高计算效率,加减法和乘除法拆分开独立计算,加减法公式计算的衍生指标直接读取指标层级配置表采用汇总下级指标来批量计算;
引擎配置步骤如下
步骤1.1:配置指标基础信息,如指标代码、指标名称、技术口径、指标类型、计算公式、指标层级、程序模板编号等;
步骤1.2:配置衍生指标加减法的口径表,用来解析加减法运行公式;
步骤1.3:配置衍生指标加减法涉及到的程序模板清单;
加减法指标程序流程如下;
步骤2.1:从调用同一个程序模板(按公式类型分)的衍生指标引擎配置记录中,计算出最大指标层级MAX;然后按指标层级从1级到MAX级循环批量计算指标值;
步骤2.2:判断当前指标层级(默认1)是否小于等于MAX值,如果不是,则结束该程序模板的执行;如果是,则执行该层级指标下一步计算;
步骤2.3:将该层级指标计算的三张表做关联,依据加减口径解析、计算公式、技术口径规则进行批量运算;
步骤2.4:将该层级的指标结果集插入到结果集表中;
步骤2.5:将执行结果相关信息写入日志表;
步骤2.6:提交该层级指标计算结果入库;
步骤2.7:指标层级变量+1,并返回到2.2步骤,判断新的层级值是否继续循环,直到全部层级执行完成,结束和跳出该程序模板执行;
步骤2.8:衍生指标(加减法)各程序模板可并行执行计算,提高总计算效率;
衍生指标(乘除法):
衍生指标都是来源基础指标或者初等级衍生指标的加减乘除等公式计算而来。为了提高计算效率,乘除法计算公式的衍生指标通过轮循两层循环动态语句执行。
步骤1:乘除法引擎配置表配置步骤如下:
步骤1.1:配置指标基础信息,如指标代码、指标名称、技术口径、指标类型、指标层级、执行顺序、程序模板编号等;
步骤1.2:其中技术口径必须拆解成二维乘除,如果涉及到多维相乘除需要拆解二维乘除和计算层级来处理。例如:指标d=a/b/c,需要拆解为先计算d1=a/b ,再计算d=d1/c;
步骤1.3:其中指标层级需遵守从1级往最高计算层级循环运算,同时同计算层级里配置好执行先后顺序;
步骤2:乘除法程序模板执行流程步骤如下;
步骤2.1:从调用同一个程序模板的衍生指标引擎配置记录中,计算出最大指标层级MAX;然后按指标层级从1级到MAX级循环计算指标值;
步骤2.2:判断当前指标层级(默认1)是否小于等于MAX值,如果不是,则结束该程序模板的执行;如果是,则执行下一步;
步骤2.3:把该程序模板下指标记录集传给游标进行 FOR IN LOOP循环;
步骤2.4:将游标里记录集进行遍历循环,判断记录集是否读取完,如果是,则结束该程序模板的执行;如果否,则执行单个指标的计算;
步骤2.3:解析技术口径并生成动态SQL语句;
步骤2.4:执行该动态SQL语句;
步骤2.5:将执行结果信息写入日志表;
步骤2.6:提交该指标计算结果入库;
步骤2.7:循环回到2.4步骤直到该计算层级全部记录执行完成,跳出子循环;
步骤2.8:指标计算层级变量+1,并返回到2.2步骤,判断新的层级值是否满足继续循环条件,直到全部层级执行完成,结束和跳出该程序模板执行;
步骤2.8:衍生指标(乘除法)各程序模板可并行执行计算,提高总计算效率。
- 一种基于多维模型的指标计算引擎实现方法
- 一种基于流式计算引擎的结构化风控实现方法和系统