背景:工程实际当中涉及到指标公式计算,一般需要IT人员来固化逻辑,但业务人员对本行业的知识体系、理论公式、业务逻辑是最了解的。为了提高业务人员逻辑变更的时效性,减少IT人员与业务人员沟通交流的成本,需要业务人员对工作流具有更强的参与能力。前面介绍了一种借助KNIME的实现方式,通过脚本固化业务人员的知识和经验,形成算法资源和资产。在业务人员可以借助脚本,直接参与到程序的计算逻辑维护之后,如果其他工程师想在工作流里实现相同的业务逻辑计算,调用相应的脚本就可以了;但是对于机器,它无法自动通过界面对脚本进行选择,这里借助调用工作流的节点,实现了机器自动化切换脚本的功能,这样就可以通过参数化驱动,切换业务人员建立的计算逻辑脚本,对同样的输入条件,产生不同的输出参数结果。
方案:使用KNIME的Java Snippet节点来完成指标公式计算,固化业务逻辑。在Java Snippet节点当中,可以从与其连接的输入表格中获取计算参数,也可以定义输出参数,并通过Java语法来定义输出参数和输入参数之间的关系(计算公式体系),最后将整个计算逻辑保存成脚本文件。将脚本文件使用文档管理系统管理起来,就可以作为算法资产,固化成千上万的计算逻辑。
如果工程人员遇到新的计算需求,可以在文档管理系统中按图索骥,找到对应的脚本资源,在工作流里拖入新的Java Snippet节点,加载下载的脚本文件,就可以完成相应的计算。
但是作为机器,想自动化加载这样的脚本文件就遇到了困难,这里给出了其中一种解决方案,就是将加载了某种脚本的Java Snippet节点放入工作流文件当中,通过主工作流调用子工作流的方式,完成对使用的脚本的切换。可以使用变量,参数化传递子工作流文件名,这样主工作流当中的数据处理流程就会发生相应改变,可以解决很多非常复杂的需求。
本例(视频介绍请移步B站,搜索Up:“星汉长空”,视频:KNIME案例(273)自动切换脚本):
步骤1. 为了使用KNIME的Java Snippet节点,通过业务人员固化了业务逻辑的脚本文件来完成指标公式计算,首先需要建立相应的脚本模板文件。建立脚本模板文件的主体是业务人员,使用的工具可以是多样的,可以根据业务人员的使用习惯来进行设计。比如基于Excel模板,界面工具,前端网页,工作流,手机移动端等等。这里的例子是借助KNIME工作流的方式来完成。接着,在KNIME工作流中拖入Table Creator节点,允许业务人员对输出参数进行设置,比如例子里面的周长、体积等等。使用Line Reader节点,读取一个通用的脚本框架,对其中的语句进行拆分,将业务人员设置的输出参数拼入其中,就形成了一个“实例化”的模板。
步骤2. 在KNIME中拖入Java Snippet节点,使用菜单栏中的File->Load Settings,加载步骤1生成的空白的“实例化”模板。将输入参数表格与Java Snippet节点相连,打开Java Snippet节点,可以在Column List框里发现输入参数列表。到此为止,准备工作就绪,业务人员接下来可以在这样的空白Java Snippet的代码框里完成计算逻辑固化,写下输出参数与输入参数的关系,计算公式体系(遵循Java语法规则,虽然是编程,大体等同于正常的公式书写,几无难度。)
步骤3. 通过步骤2,业务人员可以完成计算公式体系固化,建立若干脚本,形成算法资产。工程人员如果想复用,可以随时通过Java Snippet节点菜单栏中的File->Load Settings,打开相应的脚本文件。但如果这一步需要机器自动进行,就不能采用同样的方式了,因为毕竟涉及了界面操作。本例给出的解决方案是新建一个工作流文件(作为子工作流),将Java Snippet节点包含在其中,用该工作流代表其内含的脚本功能。为这样的子工作流建立输入输出节点(Container Input (JSON) 与 Container Output (JSON) 节点),通过JSON结构传递数据。
步骤4. 通过步骤3,我们将大量的,由业务人员固化业务逻辑(计算公式体系)的脚本封装在了相应的子工作流当中,将其维护起来,供未来的主工作流调用。在KNIME当中,建立数据处理流程,在需要计算的部分,使用 Call Local Workflow (Row Based) 节点来调用子工作流。打开其设置界面,在Workflow选项页,可以看到有Workflow Path设置框,可以通过流变量来参数化驱动其属性值发生改变。这样,工作流可以接受参数化设置条件,通过子工作流,调用对应的计算脚本,由其中的计算逻辑来生成指标参数数据。同样的输入参数条件,当主工作流调用了不同的子工作流后,会产生不同的计算结果。如例子当中,输入条件有半径、高、密度,子工作流A,利用半径、密度,调用球体计算逻辑,给出了周长、体积、重量、表面积等计算结果;子工作流B,利用半径、密度、高,得到了圆锥同样的参数计算结果,二者并不完全相同。
解释1. 何为KNIME?KNIME数据分析平台是一款强大开源的数据挖掘软件平台,可以固化数据处理的流程,在人与人,人与机器之间进行传递。
解释2. 如果业务人员不会使用KNIME,不接受工作流模式怎么办?其实工作流的目的就是为了生成脚本,将业务人员的计算逻辑加以固化,围绕这样的本质目的,手段是可以灵活多变的。假设业务人员习惯使用Excel,可以允许他们将计算逻辑固化在Excel当中,由工作流读取Excel公式,再写入脚本当中。当然,IT人员也可以使用工作流或者其他开发工具,甚至是前端界面,来帮助业务人员生成这样的脚本,都是可以的。而且脚本的语言类型也可以是多样化的,都可以因地制宜加以设计,实现IT人员和业务人员的有效协作。
解释3. 当一切流程固化以后,IT人员貌似就没有什么工作可做了,是不是这样呢?实则不然,实际的需求是千变万化、异常复杂的,业务逻辑的计算逻辑主要由业务人员完成,但也需要IT人员的协助,有些复杂的计算,库的调用,还是需要IT人员参与的,他们之间的协作关系会变得更加紧密。同时,工作流也不是一成不变的,当需求发生变更的时候,工作流的搭建,工作流功能的拓展,都需要IT人员帮助,他们可以把时间和精力发挥到更能有效产生价值的领域当中去。人员之间,人与机器之间的联系更加紧密,解决需求的效率将大大提升。