Excel 公式转换:从单元格思维到列思维
Excel 公式转换,指的是把写在单元格里、靠往下拖复制的公式,改成写在节点里、作用于整列的表达式。Excel 里所有计算都叫「写公式」;工作流把它拆成三类,交给三个不同的节点:算数字、处理文本、做条件判断。
这是本系列概念差异最大的一章。前面几章都提到过它,这里把它讲透。
这个问题通常是这样被描述的
「我在订单表右边加一列写 =D2*E2 算金额,然后双击往下填满。到了 iModel 里,我加了个节点写好公式,然后就懵了 – 往下拖在哪?我只算了第一行吧?」
没有往下拖,也不需要。你写那一次,整列就已经算完了。
这句话听起来简单,但真正接受它需要一两天。因为它推翻的不是一个操作,是一整套工作方式。
往下拖去哪了
先看两种做法的真实形态。
Excel · 往下拖
一万行 = 一万个独立公式
- F2 =D2*E2
- F3 =D3*E3
- F4 =D4*E4
- F5 =D5*E5
- · · ·
- F10000 =D10000*E10000
工作流 · 定义一次
一个表达式 = 整列
- 金额 (整列自动算出)
图 1 同一个计算的两种形态。差别不在打字多少,在于逻辑存在几份。
「你不敢确认结果对不对」这个信号,追到底就是这里。Excel 里往下拖出来的一万行公式,理论上是一万个各自独立的公式。中间任何一行被人手工改过、或者拖的时候漏了几行,从表面看不出来。
工作流里逻辑只写一次,也就只有一处可以出错、一处需要检查。
列名用 $ 包起来
表达式里引用列,写法是 $列名$。比如 $数量$ * $单价$、$金额$ - $折扣$。
不需要手打 – 配置窗口左侧有列名清单,双击就插入到表达式里,不会拼错。
SUM 其实是两件事
这是 Excel 用户从没意识到、但转过来后必须分清的一件事。
Excel 的 SUM 有两种用法,因为都叫 SUM,所以没人觉得它们不一样:
=SUM(D2:E2)– 横向,同一行内几列相加=SUM(D2:D10000)– 纵向,一整列跨行求和
在工作流里,这两件事由两个完全不同的节点负责。
| 门店 | 数量 | 赠品数 |
|---|---|---|
| S001 | 30 | 2 |
| S002 | 45 | 0 |
| S003 | 28 | 5 |
用 Math Formula
用 GroupBy
图 2 同样叫 SUM,方向不同,节点不同。橙色是同一行内的计算,青色是整列的汇总。
Excel 公式转换:三个节点的分工
Excel 里不管算什么都是写公式。工作流按数据类型分了三个节点,这是转过来第一件要记住的事。
Math Formula
做数学运算:加减乘除、取整、绝对值、幂运算。
$数量$ * $单价$round($金额$, 2)
String Manipulation
处理文字:拼接、替换、截取、大小写、取长度。
join($省$, $市$)replace($编号$, "-", "")
Rule Engine
按规则分类,相当于 IF 和多层 IFS 的嵌套。
$金额$ > 1000 => "大单"
为什么要分开?因为分开之后,每个节点只做一类事,配置界面就能针对性地给出可用函数清单。Math Formula 的函数列表里不会混进字符串函数,找起来快得多。代价是你得先判断「我这个计算属于哪一类」 – 一两天就习惯了。
Rule Engine 值得单说
Excel 里做多层判断,写法是嵌套 IF:=IF(A2>1000,"大单",IF(A2>500,"中单","小单"))。层数一多就没法读了。
Rule Engine 是一行一条规则,从上往下匹配,命中就停:
| 写法 | 含义 |
|---|---|
$金额$ > 1000 => "大单" | 金额大于 1000 的,标为大单 |
$金额$ > 500 => "中单" | 剩下的里面,大于 500 的标为中单 |
TRUE => "小单" | 其余全部标为小单(兜底规则) |
三条规则平铺,比三层嵌套 IF 好读得多,而且加一档只需要多写一行。这是从 Excel 转过来后少数会觉得「新工具确实更好用」的地方。
常用计算的对照
这张表只列高频的。查不到的直接在节点配置窗口的函数列表里搜,每个函数都带说明和示例。
| 要做的事 | Excel 写法 | 用哪个节点 | 表达式 |
|---|---|---|---|
| 两列相乘 | =D2*E2 | Math Formula | $数量$ * $单价$ |
| 同行几列相加 | =SUM(D2:F2) | Math Formula | $A$ + $B$ + $C$ |
| 整列求和 | =SUM(D:D) | GroupBy | 聚合方式选求和 |
| 四舍五入 | =ROUND(D2,2) | Math Formula | round($金额$, 2) |
| 取绝对值 | =ABS(D2) | Math Formula | abs($差额$) |
| 文本拼接 | =A2&B2 | String Manipulation | join($省$, $市$) |
| 替换字符 | =SUBSTITUTE(...) | String Manipulation | replace($编号$, "-", "") |
| 截取前几位 | =LEFT(A2,3) | String Manipulation | substr($编号$, 0, 3) |
| 条件判断 | =IF(...) | Rule Engine | $金额$ > 1000 => "大单" |
| 跨表查值 | =VLOOKUP(...) | Joiner | 见第 3 章 |
注意最后两行标青色的。整列求和和跨表查值在 Excel 里也是「写公式」,但在工作流里它们不属于公式类节点 – 前者是聚合,后者是关联。这是分类方式的差异,不是功能缺失。
Excel 公式转换:该用哪个
| 场景 | Excel | iModel | 该用哪个 |
|---|---|---|---|
| 临时算一下某个值 | 找个空格就算 | 要建节点 | Excel |
| 整列同一套计算 | 写一次往下拖 | 写一次作用整列 | iModel |
| 多层条件判断 | 嵌套 IF,难读 | 规则平铺,一行一条 | iModel |
| 需要引用上一行的值 | 写 =A2-A1 即可 | 需要专门的节点 | Excel |
| 计算逻辑要交接给别人 | 藏在单元格里 | 写在节点配置里 | iModel |
| 要保证每行算法一致 | 无法保证 | 结构上不可能不一致 | iModel |
| 一次性的估算 | 几秒钟 | 建流程反而慢 | Excel |
第四行值得注意。引用相邻行是 Excel 的强项 – 环比、累计、和上一行做差,写起来非常自然。工作流里这类计算需要专门的节点先把上一行的值取到本行来,绕一道弯。这是 Excel 少数在结构上更方便的场景之一。
常见的适应难点
难点一:找不到「往下拖」
本章开头讲的那件事。写完表达式点确定、执行,结果就已经是整列了。第一次会怀疑自己只算了一行 – 点开输出看一眼就放心了。
建议:第一次用的时候,故意造一份只有五行的数据跑一遍。五行能一眼看完,比在几万行里找证据快得多。
难点二:不知道该用哪个节点
判断方法很简单:看你要算的结果是什么类型。算出来是数字用 Math Formula,是文字用 String Manipulation,是分类标签用 Rule Engine。
拿不准的时候,先想清楚「我想要的结果长什么样」,节点自然就定了。
难点三:想引用上一行的值
Excel 里 =A2-A1 是很自然的写法。Math Formula 做不到 – 它是逐行独立计算的,每一行看不到别的行。
这不是缺陷,是设计取舍:正因为每行独立,整列计算才能保证一致。要做环比、累计这类计算,需要先用专门的节点把上一行的值取到当前行,再做减法。这类需求不算低频,遇到时在节点手册里查即可。
难点四:类型不对导致报错
Math Formula 只处理数值列。如果某一列从 Excel 读进来时被识别成了文本(常见于带空格或带单位的数字),表达式里用它就会报错。
处理办法:在前面接一个 String to Number 节点转换类型,或者回到 Excel Reader 的配置里改列类型。这是从 Excel 读数据时最高频的一类问题。
常见问题
相关内容
本章讲的是「怎么转这个弯」。每个节点的函数清单和参数细节,在节点手册里:Math Formula、String Manipulation、Rule Engine。
下一章是最后一章:算完之后怎么把结果发回 Excel – 包括直接生成 xlsx、追加到已有工作簿,以及为什么大多数人最终还是需要这一步。
用五行数据试一遍最快
iModel Analytics Studio 是开源版本,免费、不限功能与使用时长。造一份五行的小表,写一个表达式跑一遍,「整列一次算完」这件事立刻就明白了。
下载六章合订 PDF 完整版 · 34 页,含全部图表,无需留资。

