从 Excel 到 iModel · 第 5 章

Excel 公式转换:从单元格思维到列思维

Excel 公式转换,最难的不是查函数对照表,是转过一个弯:工作流里没有「往下拖」这个动作。你定义一次列与列的关系,整列一次算完 – 这一章讲清这个弯怎么转。

Excel 公式转换,指的是把写在单元格里、靠往下拖复制的公式,改成写在节点里、作用于整列的表达式。Excel 里所有计算都叫「写公式」;工作流把它拆成三类,交给三个不同的节点:算数字、处理文本、做条件判断。

这是本系列概念差异最大的一章。前面几章都提到过它,这里把它讲透。

这个问题通常是这样被描述的

「我在订单表右边加一列写 =D2*E2 算金额,然后双击往下填满。到了 iModel 里,我加了个节点写好公式,然后就懵了 – 往下拖在哪?我只算了第一行吧?」

没有往下拖,也不需要。你写那一次,整列就已经算完了。

这句话听起来简单,但真正接受它需要一两天。因为它推翻的不是一个操作,是一整套工作方式。

往下拖去哪了

先看两种做法的真实形态。

Excel · 往下拖

一万行 = 一万个独立公式

  • F2 =D2*E2
  • F3 =D3*E3
  • F4 =D4*E4
  • F5 =D5*E5
  • · · ·
  • F10000 =D10000*E10000
每一行是一个独立公式。其中任何一行被人手工改成别的东西,你不会知道。

工作流 · 定义一次

一个表达式 = 整列

MATH FORMULA 节点 $数量$ * $单价$
↓ ↓ ↓ ↓ ↓ ↓
  • 金额 (整列自动算出)
逻辑只存在一处。改一次全列都变,也不存在某一行被单独改掉的可能。

图 1 同一个计算的两种形态。差别不在打字多少,在于逻辑存在几份。

这就是第 1 章那个论点的技术根源

「你不敢确认结果对不对」这个信号,追到底就是这里。Excel 里往下拖出来的一万行公式,理论上是一万个各自独立的公式。中间任何一行被人手工改过、或者拖的时候漏了几行,从表面看不出来。

工作流里逻辑只写一次,也就只有一处可以出错、一处需要检查。

列名用 $ 包起来

表达式里引用列,写法是 $列名$。比如 $数量$ * $单价$$金额$ - $折扣$

不需要手打 – 配置窗口左侧有列名清单,双击就插入到表达式里,不会拼错。

SUM 其实是两件事

这是 Excel 用户从没意识到、但转过来后必须分清的一件事。

Excel 的 SUM 有两种用法,因为都叫 SUM,所以没人觉得它们不一样:

  • =SUM(D2:E2)横向,同一行内几列相加
  • =SUM(D2:D10000)纵向,一整列跨行求和

在工作流里,这两件事由两个完全不同的节点负责。

门店数量赠品数
S001302
S002450
S003285
横向 · 同一行内 数量 + 赠品数
用 Math Formula
纵向 · 跨行汇总 数量这一列求和
用 GroupBy

图 2 同样叫 SUM,方向不同,节点不同。橙色是同一行内的计算,青色是整列的汇总。

一句话记住

结果还是每行一个值 → 用 Math Formula。结果行数变少了 → 用 GroupBy。

GroupBy 已经在第 4 章讲过。这一章讲的全部是前一类 – 逐行计算,行数不变。

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*E2Math Formula$数量$ * $单价$
同行几列相加=SUM(D2:F2)Math Formula$A$ + $B$ + $C$
整列求和=SUM(D:D)GroupBy聚合方式选求和
四舍五入=ROUND(D2,2)Math Formularound($金额$, 2)
取绝对值=ABS(D2)Math Formulaabs($差额$)
文本拼接=A2&B2String Manipulationjoin($省$, $市$)
替换字符=SUBSTITUTE(...)String Manipulationreplace($编号$, "-", "")
截取前几位=LEFT(A2,3)String Manipulationsubstr($编号$, 0, 3)
条件判断=IF(...)Rule Engine$金额$ > 1000 => "大单"
跨表查值=VLOOKUP(...)Joiner第 3 章

注意最后两行标青色的。整列求和和跨表查值在 Excel 里也是「写公式」,但在工作流里它们不属于公式类节点 – 前者是聚合,后者是关联。这是分类方式的差异,不是功能缺失。

Excel 公式转换:该用哪个

场景ExceliModel该用哪个
临时算一下某个值找个空格就算要建节点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 里这三件事都叫写公式,工作流按数据类型分开了,好处是每个节点的函数清单更短、更好找。
Math Formula 做不到 – 它逐行独立计算,看不到别的行。需要先用专门的节点把上一行的值取到当前行形成新的一列,再用 Math Formula 做减法或除法。这是 Excel 在结构上更方便的少数场景之一,遇到时在节点手册里查具体节点。
因为结果形态不同。Math Formula 输出的行数和输入一样,每行一个值;整列求和的结果只有一个数或几个数,行数变了,那属于聚合,用 GroupBy。判断方法:结果行数不变用 Math Formula,行数变少用 GroupBy。
通常是列被识别成了文本而不是数字,常见于从 Excel 读进来时数字带了空格或单位。用 String to Number 节点转换,或者回到 Excel Reader 的配置里改列类型。报错原文的中文解释见报错排查
Math Formula 一个节点写一个表达式、产出一列。要算三个新列就串三个节点。看起来啰嗦,但好处是每一步单独可见、可点开检查 – 出错时能定位到具体是哪个计算错了,而不是面对一个混在一起的结果。

相关内容

本章讲的是「怎么转这个弯」。每个节点的函数清单和参数细节,在节点手册里:Math FormulaString ManipulationRule Engine

下一章是最后一章:算完之后怎么把结果发回 Excel – 包括直接生成 xlsx、追加到已有工作簿,以及为什么大多数人最终还是需要这一步。

用五行数据试一遍最快

iModel Analytics Studio 是开源版本,免费、不限功能与使用时长。造一份五行的小表,写一个表达式跑一遍,「整列一次算完」这件事立刻就明白了。

下载六章合订 PDF 完整版 · 34 页,含全部图表,无需留资。

卡住了可以查 节点手册报错排查,也可以回到 本系列目录

iModel 专属客服
在线留言或电话联系
在线留言

留下您的问题和联系方式,我们会在一个工作日内回复。

手机与邮箱至少填一项

4008568196 拨打此号码联系我们

微信扫码咨询

iModel 微信咨询二维码

使用微信扫描上方二维码