业务背景
日常工作中,我们会应对各种各样的业务规则,这些规则往往写到代码里;
在市场运营过程中,避免不了业务规则调整,那问题就来了:需求评审
--
排期
--
编码
--
测试
--
上线
这个流程走下来,如果规则不断调整,开发也很疲倦,
运营感觉
业务规则匹配市场运营太慢,效率太低
........
其实 下面这张图,能很好地 说明我们的工作状态
解决方案
既然有这种问题,那肯定业界要有解决方案,目前
我从网上了解到
有两种方案比较流行:
* DMN: 是 OMG 公司发布规范,该规范主要用于定义业务决策的模型和图形;
* QLExpress : 阿里开源的规则引擎框架;
本期主要介绍 DMN,后期更新会接着介绍 QLExpress, 敬请期待…….
使用 这两种 解决方案,搭建规则中心,把业务规则从代码中剥离出来,
放到规则中心统一管理维护,同时提供规则服务,从而降低开发成本,提升运营效率……
DMN 解决方案
DMN:DecisionModel and Notation 的缩写,直译意为:决策模型与图形,
是 OMG 公司发布规范,该规范主要用于定义业务决策的模型和图形。
DMN 规范出现前,决策者无法参与到业务中,为了填补模型上的空白,新增了 DMN 规范,
定义决策的规范以及图形,DMN 规范相当于业务流程模型与决策逻辑模型之间的桥梁。
DMN 主要定义决策模型,Activiti 实现了 decision 部分。
解决方案官网链接:[https://camunda.com/dmn/]
以下是通过 DMN 官网 页面 创建的业务决策表(运营可视化管理规则,同时提供了规则解析 API)
欲知详情,请继续往下看…..,后面有这个实例的 Java 版的运行 Demo
DMN 优点
· 行业标准规范;
· 一套完整的解决方案,接入成本低;
· 决策表托管而非代码托管;
· 贴近实际运营操作;
DMN 详解
决策表支持的数据类型
· string
· boolean
· integer
· long
· double
· date
决策表支持的操作分类
备注:参考 官网 英文 连接地址 [查看],我翻译如下:
比较操作
注意:
· 等于操作符不是 = 而是空;
· 不等与操作符不是!=,需要通过否定实现,例如:not(“Steak”);
范围操作
注意:
· 数值类型和日期类型支持此操作符;
· 不等与操作符不是!=,需要通过否定实现,例如:not(“Steak”);
逻辑操作
一个简单的逻辑运算是一个特殊的表达式组合,此表达式为比较或者范围操作,
任何一个成立即被判断为 true
例子如下:
· 3,5,7: 是否为 3,5,7 中的任意一个值;
· <2,>10: 是否小于 2 或者大于 10;
· 10,[20..30]: 是否为 10 或者 大于等于 20 且小于等于 30;
· “Spareribs”,“Steak”,“Stew”:字符串是否为 "Spareribs",“Steak”,"Stew" 中的任何一个;
· date and time(“2015-11-30T12:00:00”),date and time(“2015-12-01T12:00:00”)
日期是否为 2015-11-30 12:00:00 或 2015-12-01 12:00:00;
· customer.age,>21: 输入大于变量 customer 的属性 age 或者 大于 21;
否定操作
逻辑操作可以通过 not 进行取反操作,逻辑操作为 true 取反后为 false,逻辑操作为 false 取反后为 true;
但是取反操作只能放在最开始,里面可以包含逻辑操作;
· not(“Steak”):输入不是字符串 Steak;
· not(>10):不大于 10;
· not(3,5,7):不是 3,5,7 中的任意一个;
· not([20..30]):不在区间 [20..30] 内;
其他
日期函数 date and time(“…”)
用 yyyy-MM-dd’T’HHss 格式的字符串创建一个时间,例如:date and time(“2015-11-30T12:00:00”)
变量或对象属性访问
通过匹配的名称可以访问一个变量或这个一个对象的属性,例如:
· x: 判断输入是否等于 x
· =x: 判断输入是否大于等于 x
· <customer.age>: 判断输入是否小于对象 customer 的属性 age;
DMN 解决方案实例介绍
说了那么多,可能你还没有什么感觉,那我就用一个简单业务场景,介绍一下我们如何使用 DMN,
大致的流程如下:
1. 梳理通用业务规则;
2. 通过页面建立决策表(一般运营操作);
3. 决策表内容(XML)保存;
4. 在对应的业务节点,加载对应业务决策表内容,后台传递决策表依赖信息进行业务决策,返回决策结果;
5. 根据决策结果,业务代码进行逻辑控制;
创建决策表
通过页面直接创建决策表,表格形式如下:
备注:
1、Activiti 提供了前端组件,对应链接地址:http://bpmn.io/toolkit/dmn-js/download/
2、完全可以把这些前端组件为我所用,进行定制化开发,搭建自己的 规则管理–决策表 管理后台,
3、在线可以创建决策表,链接为:[https://demo.bpmn.io/dmn]
我通过这个页面创建了以下决策表
备注:后面代码编写和运行结果以这个为例,同时简化了业务规则场景,便于理解
保存决策表信息
决策表的信息会被存储为一个 xml 文件,如上截图决策表保存的文件名称为:
lmRouteRule.dmn.xml ,内容格式如下:
<?xml version="1.0" encoding="UTF-8"?>
<definitionsxmlns="http://www.omg.org/spec/DMN/20151101/dmn.xsd"id="definitions"name="definitions"namespace="http://camunda.org/schema/1.0/dmn"exporter="dmn-js (https://demo.bpmn.io/dmn)"exporterVersion="7.0.0">
<decisionid="lmRouteRule"name="末派路由逻辑">
<decisionTableid="decisionTable_1">
<inputid="input_1"label="配送分区范围">
<inputExpressionid="inputExpression_1"typeRef="string">
<text>deliveryScope
</text>
</inputExpression>
</input>
<outputid="output_1"name="末派公司"typeRef="string" />
<ruleid="DecisionRule_0tpi0ln">
<inputEntryid="UnaryTests_0xgrbp2">
<text>"A","B","C"
</text>
</inputEntry>
<outputEntryid="LiteralExpression_0dv07py">
<text>XpressBees
</text>
</outputEntry>
</rule>
<ruleid="DecisionRule_0zd77fe">
<inputEntryid="UnaryTests_19f4740">
<text>"D","E","F"
</text>
</inputEntry>
<outputEntryid="LiteralExpression_1j6aah4">
<text>Ecom
</text>
</outputEntry>
</rule>
<ruleid="DecisionRule_0wvr30c">
<inputEntryid="UnaryTests_1vi510h">
<text>not("A","B","C","D","E","E")
</text>
</inputEntry>
<outputEntryid="LiteralExpression_0gycnur">
<text>Delhivery
</text>
</outputEntry>
</rule>
</decisionTable>
</decision>
</definitions>
执行决策表
读取决策表的文件 lmRouteRule.dmn.xml 的 XML 内容,初始化决策模型,
通过传递过来的上下文信息,来执行决策,实现代码例子如下:
package org.camunda.bpm.example;
import org.camunda.bpm.dmn.engine.DmnDecision;
import org.camunda.bpm.dmn.engine.DmnDecisionTableResult;
import org.camunda.bpm.dmn.engine.DmnEngine;
import org.camunda.bpm.dmn.engine.test.DmnEngineRule;
import org.camunda.bpm.engine.variable.VariableMap;
import org.camunda.bpm.engine.variable.Variables;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import java.io.InputStream;
public
classStationMarginTest{
@Rule
public DmnEngineRule dmnEngineRule =
new DmnEngineRule();
public DmnEngine dmnEngine;
public DmnDecision decision;
@Before
publicvoidparseDecision(){
InputStream inputStream = StationMarginTest.class.getResourceAsStream(
"lmRouteRule.dmn.xml");
dmnEngine = dmnEngineRule.getDmnEngine();
decision = dmnEngine.parseDecision(
"lmRouteRule", inputStream);
}
@Test
publicvoidgetDeliveryScopeALm(){
VariableMap variables = Variables
.putValue(
"deliveryScope",
"A");
DmnDecisionTableResult result = dmnEngine.evaluateDecisionTable(decision, variables);
System.out.println(
"订单对应分区为A选择的末派为:" + result.getSingleResult().getSingleEntry());
}
@Test
publicvoidgetDeliveryScopeELm(){
VariableMap variables = Variables
.putValue(
"deliveryScope",
"E");
DmnDecisionTableResult result = dmnEngine.evaluateDecisionTable(decision, variables);
System.out.println(
"订单对应分区为E选择的末派为:" + result.getSingleResult().getSingleEntry());
}
@Test
publicvoidgetDeliveryScopeHLm(){
VariableMap variables = Variables
.putValue(
"deliveryScope",
"H");;
DmnDecisionTableResult result = dmnEngine.evaluateDecisionTable(decision, variables);
System.out.println(
"订单对应分区为H选择的末派为:" + result.getSingleResult().getSingleEntry());
}
}
运行结果:
订单对应分区为 A 选择的末派为:XpressBees
订单对应分区为 E 选择的末派为:Ecom
订单对应分区为 H 选择的末派为:Delhivery
备注:
* Java 工程依赖的 API 包下载 [点击链接]
· lmRouteRule.dmn.xml 为决策表的 XML 内容;
· 其中 lmRouteRule 为决策表的编码;
· deliveryScope 为决策表中 条件 配送范围 的 编码;
结论: 使用 DMN 方案 进行规则中心的大家,是 决策表 规则的托管,而非代码托管;
搭建规则中心
个人认为,我们的业务规则,不应该写死在代码里:如果写对应代码的人离职或者
换部门了,那么
就没有人了解这个业务规则了
所以 我们应该有一个统一的平台去承载 规则的抽象和集中统一管理:
* 规则管理;
* 规则查询;
* 规则发布上线;
* 规则启用禁用;
* 规则服务化;
规则中心在物流管理的应用场景
备注:以我目前在的部门 为例,与产品运营沟通中,待补充…….
针对以上截图中的规则,目前我们分两种方式应对:
1、针对部分规则单独做页面支持;
例如:报关税率、末派公司单量配比,如下截图:
** 问题:不具有通用性,无法复用;
**
2、规则写死在代码中;业务规则耦合在代码中,规则不透明,调整起来比较麻烦,成本高;
所以,规则中心的存在,是有业务场景的,是有价值的!
规则中心价值
相关推荐
总结来说,关联规则挖掘、数据挖掘模型的可视化实现方法以及如何通过可视化技术辅助数据挖掘是本文详细探讨的三个核心知识点。通过Apriori算法的优化和模型可视化,可以有效地提高数据挖掘的效率和结果的可理解性,...
本文将深入探讨FP-growth算法的原理、Python实现以及如何在实际数据集中应用。 **FP-growth算法原理** FP-growth算法由Hineman和Han在2000年提出,其核心思想是避免了传统Apriori算法的多次扫描数据库,通过构建一...
"电信设备-可视化集中管理可信策略和报告的系统与方法"是一个重要的主题,它涉及到如何通过先进的技术和策略实现对电信设备的全面监控和控制。这个主题的核心是构建一个可视化、集中化的管理系统,旨在提高运营效率...
数据中心可视化管理平台是一种高效、全面监控和管理数据中心资源的现代技术解决方案。该平台通过图形化界面,将数据中心的基础设施、网络、存储、应用服务等复杂信息整合并展示出来,为IT管理员提供清晰、直观的视图...
该平台包含了多个模块和功能,如可视化指挥调度中心、监控中心、车载中心和回放中心等。指挥中心是系统的核心,具有实时视频调度、监听监控、任务规则设定、定位轨迹跟踪、历史视频回放和管理任务等功能。监控中心则...
**大数据挖掘算法之Apriori算法的可视化实现** 在当今数据爆炸的时代,大数据挖掘成为了一项至关重要的技术,它能够从海量数据中发现有价值的信息和规律。Apriori算法是关联规则挖掘领域的一个经典算法,它主要用于...
为了可视化FP树的生成过程,需要安装PIL库来处理图像。 首先,我们需要理解关联规则挖掘的基本概念。关联规则通常由两部分组成:前提(antecedent)和结果(consequent)。例如,“如果购买了商品A,则可能购买商品...
#### 一、网络招聘数据可视化分析计算机系统的设计与实现 **1.1 论文研究背景** 随着信息技术的发展,网络招聘已成为企业获取人才的重要途径之一。传统的招聘方式如招聘会、报纸广告等存在着成本高、效率低、覆盖...
Vue DataV大屏数据可视化项目是一个利用Vue.js框架和DataV库构建的复杂应用,用于展示各类业务数据的图表和仪表盘。在这个项目中,开发者可以利用DataV的强大功能,将静态的数据转化为生动、交互式的视觉效果,从而...
总的来说,这个可视化管理系统技术方案设计涵盖了从需求分析、系统架构设计到功能实现的全过程,旨在构建一个高效、灵活且适应性强的可视化管理平台,以提升互联网环境下的决策效率和管理水平。这样的系统对于现代...
Cboard 可视化配置手册 V0.1 提供了关于Cboard系统配置和使用的详尽指南,帮助用户充分利用其功能,实现高效的数据可视化和分析。通过理解和应用这些配置步骤,用户可以创建出符合业务需求的直观、动态的数据展示。
### Clementine 可视化数据挖掘应用实例—银行信贷规则评估 #### 一、概述 在当前的大数据时代背景下,数据挖掘技术作为一种重要的数据分析手段,在众多行业中得到了广泛的应用。尤其在金融领域,如银行的信贷审批...
可视化智能安防指挥管理系统是现代安防领域中的重要组成部分,它整合了多种安防技术和设备,通过统一的平台实现对安全系统的高效管理。本方案由创羿兴晟科技发展在2014年提出,旨在提供一种全面的、智能化的解决方案...
10. **服务网格**:作为微服务之间的通信层,服务网格负责路由、流量控制、灰度发布和安全控制,提供可视化管理和非侵入式管理方式。 在平台构建过程中,需要遵循一定的开发流程和标准,确保平台的稳定性和扩展性。...
例如,IBM Intelligent Miner和SPSS中的关联规则可视化和聚类结果可视化,以及决策树的构建过程和结果,都体现了结果可视化的价值。 **积分卡(Scoreboard)和仪表盘(Dashboard)**是商务智能可视化的重要组成部分...
连锁店可视化解决方案结合了云计算和大数据技术,为管理者提供了实时、全面的店面视图,实现了远程监控、数据分析和智能预警等功能。 1. 需求分析 连锁店的主要需求包括:实时监控店内情况,确保运营正常;集中管理...
5. 可视化管理:提供网络性能的全面视图,便于故障诊断和优化。 五、案例分析 在实际应用中,SD-WANaaS已被广泛应用于零售、金融、医疗等行业的分支机构网络。例如,零售连锁店可以通过SD-WANaaS轻松连接各门店,...
将 Sentinel 的规则持久化到 Nacos,可以实现规则的集中管理和动态更新,使得服务能够快速响应业务变化。 要实现 Sentinel 规则与 Nacos 的集成,我们需要以下步骤: 1. **引入依赖**:在项目中添加 Sentinel ...
### 如何利用WonderDM实现可视化数据探索和预处理 #### 一、跨行业数据挖掘标准流程(CRISP-DM) 跨行业数据挖掘标准流程(CRISP-DM)是一种被广泛接受的方法论,它将数据挖掘的过程分解为六个关键阶段:业务理解...