使用公式快速获得数据洞察

公式是 Salesforce 最强大的声明式功能之一:它用现有字段自动计算、转换数据、应用条件逻辑,从而源源不断地生成数据洞察。本文从公式返回类型讲起,系统梳理数学、逻辑、文本三类运算符,以及日期、逻辑、数学、文本、汇总、高级六大类函数,并通过佣金计算、跨对象引用、日期差值等实操案例,带你掌握 IF 与 CASE 等逻辑表达式,构建几乎任何你能想象到的公式。...

📅 2026/10/8 ✍️ ponybai 🏷️ salesforce, headless

开始使用公式(01 Get Started with Formulas)

slide_2
slide_3

本单元打下基础:理解公式字段如何从已有数据中推导出新的洞察,掌握公式返回类型,并认识运算符与函数这两大构建工具。

学习目标 — 完成本单元后,你将能够:

  • 描述什么是公式字段以及它们如何生成数据洞察
  • 识别公式返回类型以及如何创建公式字段
  • 使用运算符和函数来构建公式

用公式生成数据洞察(Data Insights with Formulas)

slide_4

你的组织里已经有大量数据。你的用户需要一目了然地访问并理解这些数据,而不必在脑子里做一堆计算。公式(Formula)就是快速、轻松地生成数据洞察的方式——它能展示并利用记录上已有数据中大量全新的、尚未被挖掘的信息。

公式是一种强大的工具,你可以用它来:

  • 嵌入超链接(hyperlink)
  • 用现有字段执行计算
  • 应用条件逻辑以不同方式展示数据

在 Salesforce 中使用公式,类似于在电子表格的某个单元格里根据其他列、工作表或文档的值来创建公式。区别在于:Salesforce 的公式使用当前记录或关联记录中的值。公式几乎可以在任何你想让用户体验到它的地方展示或使用,例如:

  • 公式字段(formula fields)
  • 验证规则(validation rules)
  • 审批流程(approval processes)
  • 报表的自定义汇总公式(custom summary formulas)
  • 流程(flows)

公式字段是动态的——每次访问记录时都会重新计算,不消耗存储,永远保持最新。一个公式就能替代手工计算、电子表格导出,甚至自定义 Apex 代码。

使用公式字段(Engage with Formula Fields)

slide_5

公式字段与标准字段略有不同:它们是自动计算的,在记录详情页上是只读的,并且不会更新"最后修改日期"字段。当你创建一个公式字段时,Salesforce 会自动在历史记录和所有新记录上填充这个新字段——无需回填数据。

由于公式字段是被计算出来的,因此它们不能用作搜索条件。

就像标准字段一样,公式字段也有一个数据类型,它决定了公式返回的数据类型。在深入运算符和函数之前,先掌握两个基础主题:返回类型(决定公式产出什么类型的值)和创建流程(从想法到已部署字段的完整路径)。

公式返回类型(Formula Return Types)

slide_6

每个公式都会产生一个特定类型的值。请为你的用例选择正确的返回类型:

  • 复选框(Checkbox)——真/假,例如 Is_High_Value__c
  • 货币(Currency)——带货币符号的金额,例如 Commission__c
  • 日期 / 日期时间(Date / Date/Time)——日历值
  • 数字(Number)——带小数位的数值
  • 百分比(Percent)——带百分号的百分比值,例如 Discount_Rate__c
  • 文本(Text)——字符串,例如 Full_Name__c
  • 时间(Time)——一天中的时间值

返回类型决定了三件事:这个值在 UI 中如何显示、公式中有哪些运算符可用,以及哪些函数能返回该类型。请务必让返回类型与结果将被如何使用相匹配——而不是只看它在公式编辑器里好不好看。例如:货币字段会带美元符号与小数位显示;复选框字段可用于验证规则,并接受 TRUE/FALSE 逻辑。

创建公式字段(Creating a Formula Field)

slide_7

选择返回数据类型之后,你就进入了公式编辑器(formula editor)。公式编辑器有两个选项:简单(Simple)和高级(Advanced)。默认显示简单编辑器,但我们推荐使用高级编辑器——"高级"并不意味着你必须是个高级公式高手,它只是给了你更多工具。

创建公式字段的步骤:

  1. Setup → 对象管理器(Object Manager)→ 选择对象 → 字段和关系(Fields & Relationships)→ 新建(New)
  2. 选择 公式(Formula) 作为字段类型
  3. 选择返回类型(复选框、货币、文本等)
  4. 在公式编辑器中编写公式
  5. 设置小数位(针对数字/货币/百分比类型)
  6. 添加描述、帮助文本和字段级安全性
  7. 添加到页面布局 → 保存

公式编辑器提供了几种工具,用于构建简单和复杂的公式:

  • 插入字段(Insert Field):打开一个菜单,从对象和关联对象中选择字段,自动生成访问这些字段的正确语法。
  • 插入运算符(Insert Operator):打开可用数学和逻辑运算符的列表。
  • 函数(Functions):显示可插入公式的可用函数。函数可以转换数据、执行计算,并比运算符更全面地测试数据。有些函数独立存在,例如 TODAY 无需额外输入就返回当前日期;其他函数则需要额外输入,即参数(parameter)或实参(argument)。以 LEN(text) 为例,参数是 text;调用 LEN("Hello") 时实参是 "Hello",返回值为 5。除了 IF 等常见函数,还有 Salesforce 特有的函数,如处理选项列表字段的 ISPICKVAL。
  • 检查语法(Check Syntax):识别公式中的语法错误,让你在保存前修正。

最佳实践:始终用真实记录测试。一个语法正确的公式,在遇到边界数据时可能产生意想不到的结果——请先在多条记录上预览,再部署给所有用户。

使用运算符(Working with Operators)

slide_8

运算符(operator)指定要执行的计算类型,或执行计算的顺序。你可以用不同类型的运算符(用符号表示)来构建公式。运算符有三种类型:数学(math)、逻辑(logical)和文本(text)。

运算符是每个公式的构建基石——掌握这三类,你就能表达任何计算:数学运算符处理算术,逻辑运算符比较值并驱动决策,文本运算符拼接字符串。

数学运算符(Math Operators)

slide_9

数学运算符执行算术计算:

  • + 加:Amount__c + Shipping__c
  • - 减:Total__c - Discount__c
  • * 乘:Quantity__c * Unit_Price__c
  • / 除:Amount__c / Quantity__c
  • ^ 幂:Value__c ^ 2(平方)
  • () 括号:(A__c + B__c) * C__c(控制运算顺序)

典型用例:佣金 = Total_Amount__c * 0.10;利润 = Revenue__c - Cost__c;单价 = Total__c / Quantity__c。

运算顺序为:括号 → 幂 → 乘除 → 加减(PEMDAS)。请始终用括号让意图显式化。一个常见坑:整数除法——两个整数相除时,Salesforce 会执行整数除法并截断结果;要获得小数精度,可让至少一个操作数是小数(例如乘以 1.0)。

逻辑运算符(Logical Operators)

slide_10

逻辑运算符比较值并返回 TRUE 或 FALSE:

  • = 等于:Stage__c = "Closed Won"
  • <> 不等于:Status__c <> "Inactive"
  • < 小于:Amount__c < 1000
  • > 大于:Days_Open__c > 30
  • <= 小于等于:Discount__c <= 0.25
  • >= 大于等于:Annual_Revenue__c >= 1000000
  • &&(AND):(A > 10) && (B < 5)——两者都必须为真
  • ||(OR):(Status = "New") || (Status = "Open")——任一为真即可

配合 IF 使用:IF(Amount__c > 10000, "Large", "Small");也可在验证规则中强制执行条件。逻辑运算符是公式的决策引擎。注意:= 与 == 可互换,<> 与 != 可互换;在长且复杂的公式中,AND 与 OR 函数比对应的逻辑运算符更易读,而 And/Or 运算符则是简短公式中的快捷替代。

文本运算符(Text Operators)

slide_11

文本运算符操作文本值。核心是连接(concatenate)运算符 &(也可用 +),它把两个或多个文本值连接起来:

  • FirstName__c & " " & LastName__c → "Jane" & " " & "Smith" = "Jane Smith"

字符串字面量要放在双引号里:"Hello, " & Name__c → "Hello, Jane"。

常见文本模式:

  • 完整地址:Street__c & ", " & City__c & ", " & State__c
  • URL:"https://example.com/" & Record_Id__c
  • 条件文本:IF(IsActive__c, Name__c & " (Active)", Name__c)

无需专门的 CONCAT 函数——直接用 & 即可。文本运算符虽然简单,但在构建动态标签、URL 和描述时异常强大。

函数之乐(Functions for Fun)

slide_12

函数(function)是系统预定义的公式,会返回一个或多个值。与运算符一样,函数也有不同类型。除特别说明外,所有函数在你可写公式的任何地方都可用——包括公式字段、验证规则、审批流程和工作流规则。函数非常多,这里只列几类:

  • 日期与时间(Date and Time)——TODAY()、YEAR()、MONTH()、日期运算
  • 逻辑(Logical)——IF()、CASE()、AND()、OR()、ISBLANK()
  • 数学(Math)——ROUND()、ABS()、MAX()、MIN()、MOD()
  • 文本(Text)——LEFT()、RIGHT()、MID()、FIND()、TRIM()
  • 汇总(Summary)——PRIORVALUE()、REGEX()、IMAGE()、HYPERLINK()
  • 高级(Advanced)——BLANKVALUE()、ISPICKVAL()、INCLUDES()

函数就是预先写好的逻辑,可以拿来即用,无需重复造轮子。浏览函数列表是发现公式可能性的最佳方式之一。

日期与时间函数(Date and Time Functions)

slide_13

日期函数用来回答关于数据的"时间问题":

  • TODAY()——当前日期
  • NOW()——当前日期和时间
  • DATE(year, month, day)——用年、月、日构造日期
  • YEAR(date) / MONTH(date) / DAY(date)——提取组成部分
  • DATEVALUE(date/time)——把日期时间转换为日期

常见模式:

  • 距关闭还有几天:CloseDate - TODAY()
  • 记录年龄:TODAY() - CreatedDate
  • 是否本季度:YEAR(CloseDate) = YEAR(TODAY()) && CEILING(MONTH(CloseDate)/3) = CEILING(MONTH(TODAY())/3)

一个提醒:TODAY() 每天更新一次但并非实时,而 NOW() 在每次访问记录时更新。对于工作日计算(排除周末与节假日),公式会变得复杂——可考虑自定义方案或 AppExchange 包来处理复杂的日期运算。

逻辑函数(Logical Functions)

slide_14

逻辑函数评估条件并返回结果:

  • IF(condition, value_if_true, value_if_false)——如 IF(Amount__c > 10000, "Large", "Small")
  • CASE(field, value1, result1, value2, result2, default)——如 CASE(Stage__c, "Closed Won", 100, "Closed Lost", 0, 50);对选项列表值来说比嵌套 IF 更清晰
  • AND(condition1, condition2, ...)——所有条件都必须为真
  • OR(condition1, condition2, ...)——至少一个为真
  • NOT(condition)——反转逻辑值
  • ISBLANK(field)——检查字段是否有值
  • ISNUMBER(text)——检查文本能否解析为数字

嵌套 IF 最多可达 51 层,但超过 3–4 层后可读性会迅速恶化。当你在对单个字段匹配多个值时,请改用 CASE。ISBLANK 对于优雅地处理空值至关重要——空字段参与数学运算会导致错误。

数学函数(Math Functions)

slide_15

数学函数超越基本算术:

  • ABS(number)——绝对值(ABS(-5) = 5)
  • CEILING(number)——向上取整(CEILING(3.2) = 4)
  • FLOOR(number)——向下取整(FLOOR(3.8) = 3)
  • ROUND(number, places)——四舍五入到 N 位小数
  • MAX(a, b, ...)——最大值
  • MIN(a, b, ...)——最小值
  • MOD(number, divisor)——除法后的余数
  • SQRT(number)——平方根

实用示例:

  • 折扣四舍五入:ROUND(Amount__c * Discount_Rate__c, 2)
  • 奇偶判断:MOD(Record_Number__c, 2) = 0
  • 价格区间:MAX(MinPrice__c, MIN(CalculatedPrice__c, MaxPrice__c))

ROUND 对财务计算至关重要——绝不要让货币值不取整。MIN/MAX 的"三明治"模式是经典做法:MIN(MaxPrice, MAX(MinPrice, ActualPrice)) 无需嵌套 IF 就能把值限制在两个边界之间。

文本函数(Text Functions)

slide_16

文本函数转换和提取字符数据:

  • LEFT(text, n)——前 N 个字符
  • RIGHT(text, n)——后 N 个字符
  • MID(text, start, n)——从某位置起的 N 个字符
  • LEN(text)——字符数
  • UPPER(text) / LOWER(text)——大小写转换
  • TRIM(text)——去除首尾空格
  • SUBSTITUTE(text, old, new)——替换字符
  • FIND(needle, haystack)——子串位置
  • TEXT(value)——把数字/日期转为文本

实用示例:

  • 提取区号:LEFT(Phone__c, 3)
  • 从邮箱取域名:MID(Email__c, FIND("@", Email__c)+1, 99)
  • 清理输入:TRIM(UPPER(Name__c))
  • 掩码 SSN:"***-**-" & RIGHT(SSN__c, 4)

文本函数是字符串处理的"瑞士军刀",在数据清理、动态标签以及集成格式化(外部系统期望特定字符串格式)时尤其有价值。

汇总函数(Summary Functions)

slide_17

汇总函数可用在汇总报表(summary)、矩阵报表(matrix)和连接报表(joined reports)中,也可以跨越记录进行聚合。几个例子:

  • PRIORVALUE(field)——当前编辑之前的字段值,在验证规则中非常有用(例如阻止把 Stage 从 "Closed Won" 改回更早阶段)。
  • REGEX(pattern, text)——用正则表达式匹配文本,用于校验邮箱格式、电话模式、自定义 ID;如 REGEX(Email__c, ".*@.*\..*") 做基础邮箱检查。
  • IMAGE(url, alt_text, height, width)——显示图片;如 IMAGE(Photo_URL__c, "Contact Photo", 100, 100)。
  • HYPERLINK(url, label, target)——创建可点击链接;如 HYPERLINK("/" & Id, Name) 链接到记录本身。

汇总函数模糊了"数据"与"呈现"之间的界限——用 IMAGE 做视觉指示,用 HYPERLINK 做导航。此外还有 PARENTGROUPVAL 和 PREVGROUPVAL 这类报表分组函数(仅在自定义汇总公式和报表分组级别可用)。

高级函数(Advanced Functions)

slide_18

高级函数解决基础公式遗漏的边界情况:

  • BLANKVALUE(field, replacement)——字段为空时使用替换值;如 BLANKVALUE(Phone__c, "No Phone"),避免显示空值。
  • NULLVALUE(field, replacement)——类似,针对数字字段;如 NULLVALUE(Commission__c, 0),把 null 当作零处理。
  • ISPICKVAL(picklist_field, value)——比较选项列表值;如 ISPICKVAL(Stage__c, "Closed Won"),比用 = 更稳妥。
  • INCLUDES(multi_picklist, value)——检查多选选项列表。
  • GETRECORDIDS(list)——从相关列表返回记录 ID。

最佳实践:始终显式处理 NULL 值;用 BLANKVALUE/NULLVALUE 避免公式错误;对选项列表使用 ISPICKVAL 而非 =(它能在选项列表值被重命名后仍然健壮)。这些函数把"精致的、生产就绪"的公式与"脆弱"的公式区分开来——一个在空字段上就报错的公式,演示时没问题,但到真实、混乱的生产数据上就会失败。

创建公式字段(02 Create a Formula Field)

slide_19
slide_20

本单元动手实践:创建基础公式字段、引用父记录数据的跨对象公式,以及在真实场景中使用日期公式。

学习目标 — 完成本单元后,你将能够:

  • 创建基础公式字段
  • 构建引用父记录字段的跨对象公式
  • 使用日期公式进行基于时间的计算

基础公式字段(Basic Formula Fields)

slide_21

让我们动手构建几个基础公式。你的销售团队想一眼看到他们正在跟进的机会(Opportunity)的佣金是多少。要计算佣金,我们把机会记录上的金额(Amount)乘以当前佣金率,再把结果四舍五入到两位小数。

创建自定义字段的步骤:

  1. 从 Setup 打开对象管理器(Object Manager),选择 Opportunity。
  2. 选择 字段和关系(Fields & Relationships)。
  3. 点击 新建(New)。
  4. 选择 公式(Formula),点击 下一步(Next)。
  5. 字段标签(Field Label)输入 Commission。
  6. 公式返回类型选择 货币(Currency)——此时会出现"小数位(Decimal Places)"新选项。
  7. 小数位保持 2。
  8. 点击 下一步。

接下来构建公式:先加入机会的 Amount 字段,再加一个乘号运算符,随后输入基准佣金比例。

  1. 选择 高级公式(Advanced Formula)。
  2. 点击 插入字段(Insert Field),选择 Amount,点击 插入(Insert)。
  3. 点击 插入运算符(Insert Operator),选择 * 乘(Multiply)。
  4. 在 * 之后输入 0.06(6% 佣金)。公式应为:Amount * 0.06。
  5. 点击 检查语法(Check Syntax)——会提示"合并且字段或函数中无语法错误"。
  6. 描述(Description)输入 Base commission for Amount of opportunity。
  7. 保持勾选 将空字段视为零(Treat blank fields as zeroes)——因为公式用的是数字,我们希望任何用到的空字段都设为零而非空。
  8. 点击 下一步,接受默认的字段级安全与页面布局,点击 保存(Save)。

恭喜!你的第一个公式字段已经就位。到 Opportunities 列表视图里,通过"选择要显示的字段"把 Commission 加入可见列,你就能看到这些 Commission 字段被一个简单的公式字段自动填充了。即使是最简单的公式,也能提供有价值的信息。

关键原则:用真实数据(包括边界情况)测试;用 BLANKVALUE 处理空字段;添加描述,让其他管理员理解逻辑;考虑字段级安全性(谁能看到这些数据)。

跨对象公式(Cross-Object Formulas)

slide_22

让我们再来一个——这次从父对象拉取信息。一个跨越两个相关对象(通过查找关系 lookup relationship)、并引用这些对象上的合并字段(merge field)的公式,被称为跨对象公式(cross-object formula)。

销售团队看到机会上的佣金后大受鼓舞,现在他们想在联系人(Contact)记录上看到客户(Account)的行业(Industry),这样与联系人沟通时就不用再去打开客户记录了。

创建步骤:

  1. 返回对象管理器,选择 Contact。
  2. 选择 字段和关系 → 新建 → 公式 → 下一步。
  3. 字段标签输入 Account Industry,返回类型选择 文本(Text)。
  4. 选择 高级公式,点击 插入字段,先选 Account,再选 Industry,点击 插入。公式为:Account.Industry。
  5. 点击 检查语法——报错了!Error: Field Industry is a picklist field. Picklist fields are only supported in certain functions.

原来 Industry 是选项列表。要在公式里使用它,必须把它转换成文本。还记得文本函数吗?用 TEXT 函数:把光标放在 Account.Industry 前,在函数列表里输入 t 并选择 TEXT,插入后把参数 value 替换成 Account.Industry,最终公式为 TEXT(Account.Industry)。再次检查语法——这次没有错误了。

  1. 描述输入 Contact's Account Industry。
  2. 选择 将空字段视为空(Treat blank fields as blanks)——因为用的字段不是数字,留空也没关系。
  3. 点击 下一步、下一步、保存。

打开一个联系人查看详情,就能看到 Account Industry 字段了。销售团队欢呼!

跨对象公式的语法是 ParentObject__r.FieldName__c(在 Contact 上引用父级 Account,即 Account.Industry)。限制:最多可向上引用 10 层关系;可以引用标准和自定义字段;但不能向下引用子记录。跨对象公式消除了跨相关记录重复数据的需要——保持"单一事实来源"。

处理日期(Time for Dates)

slide_23

服务团队主管听说了你为销售团队做的出色工作,想知道能否加一个字段来显示工单(Case)已开启多少天。当然可以!

创建步骤:

  1. 从 Setup 打开对象管理器,选择 Case。
  2. 选择 字段和关系 → 新建 → 公式 → 下一步。
  3. 字段标签输入 Days Open,返回类型选择 数字(Number),小数位选择 0。
  4. 选择 高级公式。
  5. 从函数里选择 TODAY(给出当前日期值),点击 插入所选函数。
  6. 从"插入运算符"里选择 - 减(Subtract)。
  7. 从函数里选择 DATEVALUE,插入后把参数 expression 替换为 Date/Time Opened 字段。公式为:TODAY() - DATEVALUE(CreatedDate)。
  8. 点击 检查语法,描述输入 Number of days the case has been open,保持"将空字段视为零"勾选。
  9. 点击 下一步、下一步、保存。

现在查看一些工单,Days Open 字段已被填充。日期公式能回答"何时"的问题:

  • 距关闭还有几天:CloseDate - TODAY()(负数 = 已逾期,正数 = 即将到来)
  • 是否今年:YEAR(CloseDate) = YEAR(TODAY())
  • 当前阶段天数:TODAY() - DATEVALUE(Stage_Change_Date__c)
  • 下个周年日:DATE(YEAR(TODAY()), MONTH(StartDate), DAY(StartDate))
  • 从日期取季度:CEILING(MONTH(CloseDate)/3)(返回 1–4 对应 Q1–Q4)

日期公式支撑管道可见性(这个机会有多旧了?)、SLA 追踪(距违约还有几天)和自动化报表(哪个季度、哪个财年)。不过——看完新字段数据后,你发现了一个问题,我们将在下一单元用逻辑函数来解决它。

在公式中使用逻辑(03 Use Logic in Formulas)

slide_24
slide_25

本单元掌握公式中的逻辑表达式——用 IF 构建决策树,用 CASE 简化复杂比较,并创建基于数据做出智能选择的公式。

学习目标 — 完成本单元后,你将能够:

  • 使用 IF 函数构建逻辑表达式
  • 使用 CASE 函数进行更简洁的多值比较
  • 在真实公式场景中应用逻辑

开始使用逻辑(Let's Get Logical)

slide_26

上一单元你创建了一个显示工单已开启天数的字段——用当前日期减去 Date/Time Opened。如果工单仍处于开启状态,这没问题;但如果工单已经关闭了呢?那就应该用 Date/Time Opened 减去 Date/Time Closed。我们需要的正是逻辑。

IF 函数判断一个表达式是真还是假,由你决定为真时返回什么值、为假时返回什么值。其语法为 IF(logical_test, value_if_true, value_if_false)——它接收三个输入:logical_test 是要评估的条件表达式,value_if_true 是真时的值,value_if_false 是假时的值。

更新 Days Open 公式的步骤:

  1. 在 Case 的字段里选择 Days Open,点击 编辑(Edit),把描述改为 Number of days the case was or has been open。
  2. 点击 高级公式,把光标放到公式最前面(TODAY 之前)。
  3. 插入 IF 函数,再插入 ISBLANK 函数,把 ISBLANK 的参数 expression 替换为 Date/Time Closed 字段。
  4. 把 value_if_true 替换为原公式 TODAY() - DATEVALUE(CreatedDate)。
  5. 把 value_if_false 替换为 DATEVALUE(ClosedDate) - DATEVALUE(CreatedDate)(用 DATEVALUE 格式化日期时间)。

最终公式为:IF(ISBLANK(ClosedDate), TODAY() - DATEVALUE(CreatedDate), DATEVALUE(ClosedDate) - DATEVALUE(CreatedDate))。点击检查语法并保存。

搞定!服务团队欣喜若狂,已经开始制作报表来展示他们如何缩短工单保持开启的时间。

IF 是逻辑的基础,AND/OR 让条件更丰富,嵌套则创建决策树。一个复合条件示例:IF(AND(Amount__c > 10000, Stage__c = "Closed Won"), "High Value Win", "Standard")。三者结合,就构成了声明式逻辑。

CASE 函数的用武之地(The Case for CASE Functions)

slide_27

还记得你为销售团队在 Opportunity 上创建的 Commission 字段吗?他们很爱它!但……他们想给佣金加一个阶梯(scale)。佣金表如下:

  • ≤ $50,000:4%
  • > $50,000 且 ≤ $150,000:6%
  • ≥ $150,000:8%

这是 CASE 函数的绝佳场景。CASE 函数把给定表达式与一系列值做比较:如果表达式等于某个值,就返回对应的结果;如果都不相等,就返回 else_result。其语法为 CASE(expression, value1, result1, value2, result2, ..., else_result)。

这里的技巧在于:每个 IF 函数返回真或假,但 CASE 不接受 true/false 作为值,IF 必须返回一个有效值(如数字)。所以我们用 1 表示真、0 表示假,把 CASE 的 expression 设为 1。当某个 IF 返回 1(即 Amount 落在对应区间)时,CASE 就返回对应的佣金(Amount 乘以佣金百分比)。

映射关系:

  • value1 = IF(Amount <= 50000, 1, 0) → result1 = Amount * 0.04
  • value2 = IF(AND(Amount > 50000, Amount <= 150000), 1, 0) → result2 = Amount * 0.06
  • else_result = Amount * 0.08(无需再写大于等于 15 万的判断,因为这是唯一剩下的可能)

最终公式为:

CASE(1,
  IF(Amount <= 50000, 1, 0), Amount * 0.04,
  IF(AND(Amount > 50000, Amount <= 150000), 1, 0), Amount * 0.06,
  Amount * 0.08
)

点击检查语法并保存。回到 Opportunities 列表就能看到佣金更新了。销售团队再次刮目相看——如果他们以后要加更多佣金阶梯,你可以随时添加。

通用原则:当你在对单个字段匹配多个离散值时,用 CASE 代替深层嵌套 IF——它更可读、更少出错、更易维护。典型场景包括把选项列表转成数字用于评分/排序、把状态码映射为显示名称、基于离散值分配类别。

公式逻辑——关键要点(Formula Logic — Key Takeaways)

slide_28

回顾本模块学到的公式工具包:

  • 基础:公式字段是动态的、被计算出来的、始终最新,且不消耗存储;选择正确的返回类型是关键的第一步。
  • 运算符:数学 + - * / ^ 做计算;逻辑 = <> < > && || 做比较与决策;文本 & 做拼接。
  • 函数:日期时间 TODAY()、YEAR()、MONTH();逻辑 IF()、CASE()、AND()、OR()、ISBLANK();数学 ROUND()、ABS()、MAX()、MIN()、MOD();文本 LEFT()、RIGHT()、MID()、FIND()、TRIM();高级 BLANKVALUE()、ISPICKVAL()、REGEX()。
  • 跨对象:可向上引用父字段最多 10 层,语法为 ParentObject__r.FieldName__c。

最佳实践:始终用 BLANKVALUE 处理 NULL;用 CASE 替代深层 IF 嵌套;用真实数据(包括边界情况)测试;用描述为公式写文档。你现在已经掌握了用字段、运算符和函数"驯服"公式的基本技能,几乎可以创建任何你能想象到的公式——用公式生成各种数据洞察,而你才只是刚刚触及皮毛。


文章来源:Trailhead - Quick Data Insights with Formulas