它解决什么问题
原值超过 10 万算重大资产、5 到 10 万算一般、其余算零星 – 这类分档打标就是它。写成规则一行一条,比嵌套 IF 好读得多,改起来也不用数括号。
规则是有顺序的,命中即停。这是整个节点的核心机制。把范围大的规则写在前面,后面更具体的规则就永远轮不到。写规则时从最特殊的往最一般的排。
它在流程里的位置
通常放在汇总之前 – 先把明细打上分类标签,再按标签分组,比在汇总阶段拆条件清楚得多。
基本信息
| 英文原名 | Rule Engine |
|---|---|
| 中文名称 | 规则引擎(iModel 中文界面) |
| 输入端口 | 1 个数据表 |
| 输出端口 | 1 个,行数不变,多一列或覆盖一列 |
| 输出类型 | 所有规则的返回值必须是同一种类型,不能一条返回文字一条返回数字 |
配置项逐条
-
Rule editor规则编辑框
一行一条规则,写法是
条件 => 结果。列引用用$列名$,文本结果要加双引号。从上往下比,命中第一条就返回,后面的不再看。 -
兜底规则TRUE => …
最后一行写
TRUE => "其他",凡是前面都没命中的行归到这里。不写兜底的话,没命中的行会得到缺失值 – 而且不报错。这是最常见的漏洞,尤其是原数据里有空值时。 -
Append column / Replace column追加新列 / 覆盖原列
分档打标一般用追加,新增一列标签,原值保留。用于修正某列的取值时才用覆盖。
Rule Engine 配置对话框
规则Rules,从上往下命中即停
$原值$ > 100000 => "重大"$原值$ > 50000 => "一般"TRUE => "零星"
顺序写反的话,10 万以上的资产会先命中「一般」那条,永远出不来「重大」。
输出列Append / Replace
追加新列:资产分档覆盖原列
最小示例
规则
$原值$ > 100000 => “重大”
$原值$ > 50000 => “一般”
TRUE => “零星”
输出
| 资产编号 | 原值 | 资产分档 |
|---|---|---|
| FA-003 | 128000 | 重大 |
| FA-001 | 86000 | 一般 |
| FA-002 | 4200 | 零星 |
第二条规则不用写「大于 5 万且小于等于 10 万」 – 能走到第二条,说明第一条已经没命中,10 万以上的情况自然被排除了。这是命中即停带来的便利。
三个常见坑
- 没写兜底规则,结果列里冒出一堆空值。原值为空的行、或者所有条件都不满足的行,都会得到缺失值且不报错。最后一行永远补上
TRUE => "其他"– 哪怕你认为不可能有漏网的。 - 规则顺序写反了。把「大于 5 万」写在「大于 10 万」前面,所有大额资产都会被归成「一般」。检查办法:打完标签后按标签分组数一下各档有多少行,某一档为零通常就是顺序问题。
- 返回值类型不统一。一条规则返回文字、另一条返回数字,节点会报错。要么全是文字,要么全是数字。想输出数字分档就统一写成
1、2、3,别混着来。
什么时候该换别的节点
| 情况 | 换成 |
|---|---|
| 不是打标签,而是按条件筛掉行 | Rule-based Row Filter,写法一样但用来筛行 |
| 纯数值计算,没有条件分支 | Math Formula |
| 纯文本处理,没有条件分支 | String Manipulation |
| 分档规则很多且经常变 | 把规则做成一张对照表,用 Joiner 关联进来,改表不改流程 |
最后一条值得展开说。分档标准如果是业务定的、每年要调,写死在节点里意味着每次调整都要改工作流。做成一张 Excel 对照表用 Joiner 接进来,业务自己改表就行 – 这是把易变的部分从流程里抽出去的通用思路。

