公式(6)高级

学习目标

完成本单元后,您将能够:

  • 实现高级公式以匹配复杂的用例。
  • 写干净,易于理解的公式。

先进的公式

我们已经在这个模块中看到了很多复杂的公式。然而,将业务问题转化为基于公式的解决方案并不总是容易的。这个单位有几个提示从概念到现实的公式。

把它写出来

当你有一个公式的想法,在你拉起高级公式编辑器之前,用日常语言思考。首先问自己你的目标是什么,然后对话描述。

此示例来自Salesforce Trailblazer社区:假设您的目标是确保如果系统管理员以外的任何人将机会标记为“已关闭丢失”,则必须提供解释。

对于这个例子,我们假设你已经有了自定义的选项列表字段Loss Reason,并填充了失去机会的有效理由。由于没有人能够在不提供理由的情况下保存记录,因此我们使用验证规则公式来实现我们的目标。

用简单的语言,你的公式是:

当机会阶段由非系统管理员的人员更改为“已关闭丢失”时显示错误,并且丢失原因为空。

在写出公式之后,查找与本模块中使用的函数相对应的关键字“and”,“or”,“if”。这些功能是更大,更复杂的公式的基石。在用例中识别它们可以帮助你实现这样的公式。

要检查用户不是系统管理员,请插入$ Profile.Name,这是一个合并字段,表示对记录进行编辑的配置文件。要检查StageName是否已更新,请使用ISCHANGED()。如果字段的当前值不同于以前的值,则ISCHANGED()返回true。

您可以使用ISPICKVAL()检查其余的需求。有关ISPICKVAL()的更多信息,请参阅在公式中使用选取列表。

  1. 在安装程序中,使用快速查找框来查找 Object Manager.
  2. 点击 Opportunity | Validation Rules.
  3. 点击 New.
  4. 在 Rule Name,输入 Loss Reason Required.
  5. 在 Error Condition Formula, 输入以下公式:
    AND(
      $Profile.Name <> "System Administrator",
      ISCHANGED(StageName),
      ISPICKVAL(StageName, "Closed Lost"),
      ISPICKVAL(Loss_Reason__c, "")
    )
  6. 在 Error Message, 输入 Opportunities can’t be marked Closed Lost without providing a Loss Reason.
  7. 对于错误位置,请选择 Field 和 Loss Reason.
  8. 点击 Save.

现在,只要不是系统管理员的用户将机会标记为“关闭丢失”,就会显示错误消息。

使用清除间距和格式

使用适当的间距和格式时,公式更易于阅读和理解。当我们使用文本公式时,我们写了一个公式,根据国家,收入和来源动态地给一个潜在客户分配评分。

IF(AND(AnnualRevenue > 1000000, CONTAINS(CASE(Country,
"United States", "US", "America", "US", "USA", "US", "US", "US",
"NA"), "US")), IF(ISPICKVAL(LeadSource, "Partner Referral"),
"Hot", IF(OR(ISPICKVAL (LeadSource, "Purchased List"),
ISPICKVAL(LeadSource, "Web")), "Warm”, "Cold")), "Cold")
虽然这个公式在语法上是正确的,但几乎不可能说出它的作用或逻辑的工作方式。由于空格和返回在公式中无关紧要,因此使公式更易于使公式更具可读性。这是相同的公式,但用缩进和返回清理。
IF(
  AND(AnnualRevenue > 1000000,
  CONTAINS(CASE(Country, "United States", "US", "America",
    "US", "USA", "US", "US", "US", "NA"), "US")),
  IF(
    ISPICKVAL(LeadSource, "Partner Referral"), "Hot",
    IF(
      OR(
        ISPICKVAL(LeadSource, "Purchased List"),
        ISPICKVAL(LeadSource, "Web")
      ), "Warm”, "Cold"
    )
  ), "Cold"
)

虽然格式化公式没有硬性和快速的规则,但是我们建议您在每次嵌套逻辑语句时使用两个空格缩进。当你正确和一致的缩进,很容易看到你正在使用哪个函数,并避免不匹配的括号。

另一种使逻辑语句易于阅读的方法是使用逻辑运算符而不是函数。当您使用&&而不是AND()或||时而不是OR(),读取公式的人更容易遵循逻辑流程。这里再一次用&&和||表示相同的公式而不是AND()和OR()。

IF(
  AnnualRevenue > 1000000 &&
  CONTAINS(CASE(Country, "United States", "US", "America", "US", 
    "USA", "US", "US", "US", "NA"), "US"),
  IF(
    ISPICKVAL(LeadSource, "Partner Referral"), "Hot",
    IF(
      ISPICKVAL(LeadSource, "PurchasedList") ||
      ISPICKVAL(LeadSource, "Web"),
      "Warm", "Cold"
    )
  ), "Cold"
)

把事情简单化

在编写复杂的公式时,很容易陷入嵌套的逻辑语句和对其他字段的引用。通常,最简单的公式是最好的公式。

如果机会的关闭日期不在当前月份,此验证规则公式返回true

OR (
CloseDate < DATE( YEAR(TODAY()), MONTH(TODAY()), 1), 
IF (
AND (
MONTH (TODAY() ) =1, 
CloseDate > DATE( YEAR(TODAY() ), MONTH(TODAY() ), 31)),
true, 
IF (
AND (
MONTH (TODAY() ) =2, 
CloseDate > DATE( YEAR(TODAY() ), MONTH(TODAY() ), 28)), 
true,
IF (
AND (
MONTH (TODAY() ) =3, 
CloseDate > DATE( YEAR(TODAY() ), MONTH(TODAY() ), 31)), 
true,
IF (
AND (
MONTH (TODAY() ) =4, 
CloseDate > DATE( YEAR(TODAY() ), MONTH(TODAY() ), 30)),
true,
IF (
AND (
MONTH (TODAY() ) =5, 
CloseDate > DATE( YEAR(TODAY() ), MONTH(TODAY() ), 31)),
true, 
IF (
AND (
MONTH (TODAY() ) =6, 
CloseDate > DATE( YEAR(TODAY() ), MONTH(TODAY() ), 30)),
true,
IF (
AND (
MONTH (TODAY() ) =7, 
CloseDate > DATE( YEAR(TODAY() ), MONTH(TODAY() ), 31)),
true,
IF (
AND (
MONTH (TODAY() ) =8, 
CloseDate > DATE( YEAR(TODAY() ), MONTH(TODAY() ), 31)),
true,
IF (
AND (
MONTH (TODAY() ) =9, 
CloseDate > DATE( YEAR(TODAY() ), MONTH(TODAY() ), 30)),
true,
IF (
AND (
MONTH (TODAY() ) =10, 
CloseDate > DATE( YEAR(TODAY() ), MONTH(TODAY() ), 31)),
true,
IF (
AND (
MONTH (TODAY() ) =11, 
CloseDate > DATE( YEAR(TODAY() ), MONTH(TODAY() ), 30)),
true,
IF (
AND (
MONTH (TODAY() ) =12, 
CloseDate > DATE( YEAR(TODAY() ), MONTH(TODAY() ), 31)),
true, false
)))))))))))))
这个复杂的检查确定关闭日期是早于当前月的第一天,还是晚于本月的最后一天。但实际上,这一天根本不重要:如果关闭日期的月份和年份与当月份的月份和年份相同,则是同一月份。所以我们可以将公式改写为:
NOT( 
  AND( 
    MONTH( CloseDate ) = MONTH( TODAY() ), 
    YEAR( CloseDate ) = YEAR( TODAY() ) 
  ) 
)
这个新版本更具可读性,只能编译为200个字符,而原始公式则超过3,000个。如果你的公式看起来比它应该更复杂,那很可能是 – 从不同的角度来解决问题来简化事情。

公式(5)文本

学习目标

完成本单元后,您将能够:

  • 描述什么是文本类型。
  • 将文本值转换为其他数据类型或从其他数据类
  • 描述使用文本类型的公式的用例。
  • 使用文本类型创建一个公式。

公式中的文本介绍

有时,让您的组织中的信息一目了然,最简单的方法就是将其显示为文本。使用文本返回类型的公式可以连接文本值,将数字和日期转换为文本,或者有条件地显示文本。

你可以做的最简单的事情是将两个文本字符串与运算符&连接起来。例如,您可以通过组合名字和姓氏来显示联系人的全名。

FirstName & " " & LastName
将文本值放在一起时,请考虑必要的空格,以便字符串不会显示为废话 – “Jane Doe”比“JaneDoe”更具可读性。
 

常见的文本函数和操作符

Salesforce带有许多功能和操作员,可以使用公式中的文本进行工作。使用公式,可以将其他数据类型转换为文本并将文本值连接在一起,或在文本字段中搜索特定的字符串。

转换为文本值和从文本值转换

TEXT()将百分比,数字,日期,日期/时间,选取列表或货币字段转换为文本。 TEXT()返回没有任何格式,逗号或货币符号的输出。例如,TEXT(percent_value),如果percent_value设置为30%,则返回0.3。

当TEXT()收到日期或日期/时间值时,它返回一个带有标准日期或日期/时间格式的字符串。例如,如果date_value对应于2015年3月17日,则TEXT(date_value)返回2015-03-17。对于datetime_value 2015年3月17日下午5点,TEXT(datetime_value)返回2015-03-17 17:00:00Z。 Z表示GMT-TEXT()返回的时间总是返回格林尼治标准时间的日期/时间值,而不是当前用户或组织的时区。

您也可以使用VALUE()以另一种方式转换值,该值使用Text值并返回一个Number。如果VALUE()接收到的值不是一个数字,包括小数点或减号(负号)以外的任何特殊字符,则会显示#Error!例如,如果text_value是$ 500,则VALUE(text_value)将返回一个错误。如果text_value为空,则VALUE()也会返回错误。

其他文字功能

如果文本以compare_text开头,则BEGINS(text,compare_text)返回true。如果compare_text是文本中的任何位置,则CONTAINS(text,compare_text)将返回true。这些功能对于根据文本字段有条件地显示信息很有用。

函数SUBSTITUTE(text,old_text,new_text)用new_text替换old_text的任何实例,就像文本编辑器中的find和replace函数一样。

Salesforce包含其他用于处理公式中文本和格式化的函数。有关更多信息,请参阅Salesforce联机帮助中的公式运算符和函数。

在公式中使用文本类型

分配客户评级

通常,使用文本返回类型的公式显示很难量化的信息。例如,您可以使用文本公式来确定铅是热,暖还是冷。我们将编写一个既使用条件逻辑又使用ISPICKVAL()函数来返回主角评分的公式。

在这个例子中,我们根据其收入,国家和来源对潜在客户进行评估。

  • Hot—AnnualRevenue大于100万美元,Country是美国,LeadSource是合作伙伴推荐。
  • Warm—AnnualRevenue 大于100万美元,Country是美国,LeadSource是购买清单或Web。
  • Cold—帐户不符合任何这些条件。

此公式使用一系列IF(),AND()和OR()语句来检查这些条件,并使用ISPICKVAL()评估Lead Source字段。该公式还使用CASE()语句来检查国家/地区。如果该国是美国,美国,美国或美国,则CASE()声明将返回美国。否则,它返回NA(不适用)。

选择树帮助我们更容易地遵循公式的逻辑流程。

This choice tree helps us visualize the lead rating formula.
  1. 在安装程序中,使用快速查找框来查找 Object Manager.
  2. 点击 Lead | Fields & Relationships 然后单 New.
  3. 选择Formula 并单击 Next.
  4. 在 Field Label, 输入 Rating. 字段名称自动填充。
  5. 选择 Text 并单击 Next.
  6. 输入以下公式:
    IF(
      AnnualRevenue > 1000000 &&
      CONTAINS(CASE(Country, "United States", "US", "America", "US", 
        "USA", "US", "US", "US", "NA"), "US"),
      IF(
        ISPICKVAL(LeadSource, "Partner Referral"), "Hot",
        IF(
          ISPICKVAL(LeadSource, "PurchasedList") ||
          ISPICKVAL(LeadSource, "Web"),
          "Warm", "Cold"
        )
      ), "Cold"
    )

根据潜在客户的特征,新配方字段评分显示“热”,“热”或“冷”。

用CASE()显示图像

带有文本返回类型的公式对于不仅仅是文本而言是有用的 – 您也可以使用它们来显示图像。图像使信息一目了然,抓住用户的眼睛不仅仅是文本。让我们编写一个公式,使用您刚刚创建的评级字段以图形方式显示潜在客户评分为零星,一星,三星或五颗恒星。

IMAGE()函数最多需要四个参数。 IMAGE(image_url,alternate_text,height,width)以可选的height和width参数指定的尺寸显示由image_url指定的图像。如果图像无法显示,则该功能显示alternate_text。

如果主角评级是

  • Hot, 公式显示五颗星
  • Warm,公式显示三颗星
  • Cold, 公式显示一颗星

如果主角等级为空白,则公式不会显示星号。

使用文本返回类型和名称星级创建公式字段。在高级公式编辑器中,输入:

IMAGE(
  CASE(Rating__C,
    "Hot", "/img/samples/stars_500.gif",
    "Warm", "/img/samples/stars_300.gif",
    "Cold", "/img/samples/stars_100.gif",
    "/img/samples/stars_000.gif"),
"Unknown")
此公式使用内置于Salesforce中的图像,但是您可以使用自己的图像,方法是首先从“文档”选项卡上载图像。

文本示例

  1. 此公式使用美国帐户的帐单州/省字段将其分类为北,南,东,西或中央。
    IF(ISBLANK(BillingState), "None",
    IF(CONTAINS("AK:AZ:CA:HA:NV:NM:OR:UT:WA", BillingState), "West",
    IF(CONTAINS("CO:ID:MT:KS:OK:TX:WY", BillingState), "Central",
    IF(CONTAINS("CT:ME:MA:NH:NY:PA:RI:VT", BillingState), "East",
    IF(CONTAINS("AL:AR:DC:DE:FL:GA:KY:LA:MD:MS:NC:NJ:SC:TN:VA:WV", BillingState), "South",
    IF(CONTAINS("IL:IN:IA:MI:MN:MO:NE:ND:OH:SD:WI", BillingState), "North", "Other"))))))
  2. 该公式嵌入HYPERLINK()函数的链接。一般来说,HYPERLINK(url,display_text,target)显示一个到display_text的链接。可选的目标参数决定了单击链接时网页的显示方式。如果您将目标保留为空白,则默认情况下链接会在新的浏览器窗口中打开。
    HYPERLINK("https://www.salesforce.com", "Salesforce")
  3. 此公式接受Email字段并使用它来创建一个URL。该公式使用FIND()和SUBSTITUTE()在电子邮件地址中查找@符号,并用www替换它的左侧所有内容。
    SUBSTITUTE(Email, LEFT(Email, FIND("@", Email)), "www.")
    文本公式的常见错误

将值转换为文本。请确保在公式中使用它之前检查一个字段的类型。例如,以前的Salesforce管理员可能已经创建了一个将日期保存为文本值的自定义字段。如果是这种情况,可以使用TEXT()或DATEVALUE()来同时处理文本和日期值。

公式字段帮手

使用助手公式字段是使公式简洁易懂的好方法。辅助字段只做更大计算的一部分,并由结束公式字段引用。您可以使用任何公式类型的帮手公式字段,但现在我们来看一个示例。

假设您要编写名为Case_Category__c的文本公式,该公式根据案件已打开的时间长短显示案件的类别(绿色,黄色或红色)。通常情况下,你可能会写这样的东西。

IF(((NOT(IsClosed)) && (TODAY() - DATEVALUE(CreatedDate) > 20)), "RED",
 IF((NOT(IsClosed)) && (TODAY() - DATEVALUE(CreatedDate) > 10), "YELLOW",
 "GREEN"))
您可以通过将计算个案年龄的逻辑放入另一个公式字段来简化此公式。我们称这个字段为Case_Age_In_Days__c。
TODAY() - DATEVALUE(CreatedDate)
然后,我们可以像这样重写Case_Category__c。
IF(((NOT(IsClosed)) && (Case_Age_In_Days__c > 20)), "RED",
 IF((NOT(IsClosed)) && (Case_Age_In_Days__c > 10), "YELLOW",
 "GREEN"))
个公式不仅更短,更易于理解,而且还可以在需要计算案例年龄的任何地方重复使用助手公式。真棒!

公式(4)选项

学习目标

完成本单元后,您将能够:

  • 描述引用选取列表字段的公式的用例。
  • 在公式字段中使用选择列表功能。
  • 创建一个引用选项列表字段的公式。

在公式中使用选取列表的简介

选项列表字段允许您从预先填充的列表中选择一个值。虽然您无法撰写返回结果列表的公式,但您可能必须在公式字段中引用选取列表。

假设您需要验证规则,要求用户填写说明,如果他们选择“其他”作为帐户的类型。此验证规则公式要求用户填写文本字段“其他类型”(如果他们将帐户的“类型”设置为“其他”)。

ISPICKVAL(Type, "Other") &&
ISBLANK(Other_Type__c)
如果当“类型”设置为“其他”时,用户将Other_Type__c留为空白,则会触发验证规则,并且用户无法保存表单。

常见的选项列表函数和操作符

三个函数将picklist值作为所有公式字段中的参数:ISPICKVAL(),CASE()和TEXT()。

如果picklist_field的值与text_value匹配,则ISPICKVAL(picklist_field,text_value)返回true,否则返回false。您可以将ISPICKVAL()与PRIORVALUE()结合使用。您可以在分配规则,验证规则,字段更新和工作流程规则中使用此函数来查找字段的先前值。

例如,此验证规则可防止用户将案例的类型从先前选定的值更改为空白。

NOT(ISPICKVAL(PRIORVALUE(Type), "")) &&
ISPICKVAL(Type, "")

如果Type的先前值不为空且当前值为,则触发验证规则。

CASE()对于根据选取列表的值编写具有不同结果的公式很有用。带有Number返回类型的此公式根据其类型为案例分配优先级。

CASE(Type,
  "Electrical", 1,
  "Electronic", 2,
  "Mechanical", 3,
  "Structural", 4,
  "Other", 5,
5)

该公式将Type与每种情况进行比较,并在发现匹配时指定优先级。电子案例优先级为1,电子案例2,等等。

TEXT()将选取列表值转换为组织主语言的文本值,而不是当前用户的语言。在将选取列表值转换为文本值之后,可以在其上使用文本函数,例如BEGINS()和CONTAINS()。

例如,这个公式将一个案件的状态显示为一个句子。

"This case is " & TEXT(Status)
注意

您不能在多选选项列表上使用TEXT()。公式字段中不推荐多选择选项列表。

在公式中使用选项列表字段

基于选择列表创建验证规则

选项列表值通常决定了记录中的哪些其他字段是必需的。 ISPICKVAL()和CASE()可用于创建验证规则,以检查是否选择了某个选项列表值。例如,假设您希望用户在将案例的“状态”选项列表值更改为“已升级”时输入原因。

首先,在Case对象上创建自定义文本字段升级原因。

  1. 在安装程序中,使用快速查找框来查找 Object Manager.
  2. 点击 Case | Fields & Relationships 然后单击 New.
  3. 选择 Text Area 并单击 Next.
  4. 在 Field Label, 输入 Reason for Escalating.字段名称自动填充。
  5. 点击 Next.
  6. 再次单击 Next 然后单击 Save.

现在使用状态选项列表字段来设置升级原因的验证规则。

  1. 单击新创建的升级原因字段。
  2. 在验证规则下,单击 New.
  3. 在 Rule Name, 输入 Reason_Required.
  4. 在 Error Condition Formula, 输入以下验证规则:
    AND(
      ISPICKVAL(Status, "Escalated"),
      ISBLANK(Reason_for_Escalating__c)
    )
  5. 在 Error Message, 输入Please enter a reason for changing the case status to Escalated.
  6. 点击 Save.

验证规则确保如果状态设置为“升级”,升级原因不为空白。通过将案例状态更新为升级并保存记录来测试公式,而不输入升级原因。该窗体显示在升级原因字段下的错误消息。

Users who do not set a Reason for Escalating will see this error message.

指定联系人的优先级

如果您希望根据关联的帐户评分为联系人分配优先级,那么选项列表字段会怎样?对于此公式,我们使用联系人的帐户评级的交叉对象参考以及我们在复选框公式中使用基本逻辑中创建的行政复选框公式字段。 Executive是否检查联系人的标题是否包含“Executive”,“President”或“Chief”等字样。

因为有三种可能的账户评级 – 热,温或冷 – 以及执行检查或未检查的两种选择 – 总共有六种情况。我们将使用CASE()根据以下条件为每种可能性分配优先级。

Account.Rating Is_Executive_c 优先级
Hot Yes 1
Hot No 1
Warm Yes 1
Warm No 2
Cold Yes 2
Cold No 3

在名称为Priority并且类型为Number的联系人对象上创建一个公式字段。

  1. 在安装程序中,使用快速查找框来查找 Object Manager.
  2. 点击 Contact | Fields & Relationships 然后单击 New.
  3. 选择 Formula 并单击 Next.
  4. 在 Field Label, 输入 Priority. 字段名称自动填充。
  5. 选择 Number, 并将小数位数更改为0
  6. 点击 Next.
  7. 输入以下公式:
    CASE(Account.Rating,
      "Hot", 1,
      "Warm", IF(Is_Executive__c, 1, 2),
      "Cold", IF(Is_Executive__c, 2, 3),
    3)
    在这个公式中,我们在更大的CASE()语句中使用IF()语句来更有效地检查所有六种情况。

选项列表示例

  1. 此公式根据自定义选项列表字段合同状态和自定义日期字段合同激活日期返回帐户被激活后的天数。如果合同状态未激活,则该字段为空。
    IF(ISPICKVAL(Contract_Status__c, "Activated"),
      TODAY() - Contract_Activated_Date__c, null)
  2. 此公式在合同对象上使用自定义日期字段Payment Due Date和自定义选项列表字段Payment Status以及Paid和Unpaid选项。如果“付款状态”为“未付”且已超过付款到期日,公式字段将显示逾期付款!否则,该字段为空。
    IF(AND(Payment_Due_Date__c < TODAY(), 
      ISPICKVAL(Payment_Status__c,
      "UNPAID")),
      "Payment overdue!", null)
  3. 如果有人试图将潜在客户的状态从“已关闭 – 已转换”或“关闭 – 未转换”更改为“打开 – 未联系”,此验证规则使用ISPICKVAL()和PRIORVALUE()显示错误。
    ISPICKVAL(Status, "Open - Not Contacted") &&
    BEGINS(TEXT(PRIORVALUE(Status)), "Closed")
    如果用户将关闭状态从关闭状态更改为打开状态,则在尝试保存记录时会看到错误。
    The error message a user sees when they violate the validation rule.

挑选清单的常见错误

  • 唯一可以将选取列表字段作为所有公式字段中的参数的函数是ISPICKVAL(),CASE()和TEXT()。在其他函数中使用选项列表值会导致错误。例如,此复选框公式字段旨在显示一个复选框,用于指示潜在顾客源是否是“合作伙伴推荐”。等号运算符(=),但是,不支持选项列表字段,并且此公式导致一个错误。

    LeadSource = "Partner Referral"
    相反,使用ISPICKVAL()检查选择列表字段的值,或者在使用equals运算符之前使用TEXT()将选取列表值转换为文本。
    ISPICKVAL(LeadSource, "Partner Referral")
    TEXT(LeadSource) = "Partner Referral"

公式(3)日期

学习目标

完成本单元后,您将能够:

  • 描述日期和日期/时间类型。
  • 解释日期和日期/时间类型之间的区别。
  • 描述具有Date和Date / Time返回类型的公式的用例。
  • 使用Date和Date / Time类型创建一个公式。

日期和日期/时间公式简介

在管理您的组织时,日期和日期/时间字段非常适合显示联系人的出生日期,个案年龄或创建帐户的日期和时间。您可以使用公式来显示当前日期或查找两个日期之间的差异。

例如,此交叉对象公式将在其相关大小写的页面上将日期和时间创建为日期/时间值。

Account.CreatedDate

交叉对象公式显示来自不同对象上的一个对象的数据。在这种情况下,我们显示了case对象上的账户对象的CreatedDate。即使您的组织的成员无权访问字段所在的对象,也可以看到显示或引用跨对象字段的公式。有关交叉对象公式的更多信息,请参阅构建交叉对象公式的技巧

日期表示为日期或日期/时间值。日期值存储年,月和日。日期/时间值存储年,月,日和时间。时间存储为GMT,但显示在查看它的用户的时区中。在公式中处理日期/时间值时,将时区冲突保留在头脑中非常重要。时区混淆很容易导致公式字段中的逻辑错误和组织中的错误信息。

如果您减去两个日期值,则结果是整数。如果您减去两个日期/时间值,则结果为代表天数,小时数和分钟数的十进制值。例如,如果两个日期/时间值之间的差值是3.52,则两个日期之间有3天,12小时(一天的0.5天)和29分钟(一天的0.02天)。

通用日期和日期/时间函数和操作符

Salesforce提供了多种功能,可让您更轻松地处理日期和日期/时间值。您可以使用DATEVALUE()函数将日期/时间转换为日期,该函数采用日期/时间或文本值并返回日期。同样,DATETIMEVALUE()接受日期或文本值,并返回日期/时间值,并将时间设置为午夜格林尼治标准时间。

假设您想自定义公式字段显示日期2015年3月17日。您可以使用DATE()函数将日,月和年转换为所需的日期值。

DATE(2015, 03, 17)
DATETIMEVALUE()是将文本转换为与2015年3月17日格林尼治标准时间下午5点对应的日期/时间值的另一种方法。
DATETIMEVALUE("2015-03-17 17:00:00")
你也可以使用DATEVALUE(),它接受一个字符串并返回一个日期值。
DATEVALUE("2015-03-17")
注意

DATETIMEVALUE()采用日期或文本值,格式为YYYY-MM-DD,格林尼治时间为GMT。如果输入的值超出有效范围(例如2月29日的非闰年或大于12的月份),则公式字段会显示#Error!

要查找当前日期作为日期值,请使用TODAY()。要查找当前时刻为日期/时间值,请使用NOW()。这些功能对于查找将来或过去的日期或距今天另一日期有多少天有用。

要将日期值中的日,月或年作为数字,分别使用DAY(),MONTH()或YEAR()。

在公式中使用日期和日期/时间类型

日期值的最简单用法之一是查找两个日期之间的天数。当您从另一个日期值中减去一个日期值时,您将以天数为单位的差异作为数字。

例如,如果您想查找今天的日期和帐户的CreatedDate之间有多少天,请使用:

TODAY() - DATEVALUE(CreatedDate)
注意

请小心减去将来日期的过去日期。如果您逆转公式-DATEVALUE(CreatedDate) – TODAY() – 它将返回负值。

请注意,我们使用DATEVALUE()将CreatedDate(日期/时间值)转换为日期值,从而允许我们从TODAY()中减去CreatedDate。日期和日期/时间值不兼容。您不能从一个日期/时间减去一个日期,或者从一个日期减去一个日期/时间,而无需先转换其中一个值。

您还可以将日期添加到日期。要创建一个公式,它返回今天后三天的日期:

  1. 在安装程序中,使用快速查找框来查找 Object Manager.
  2. 点击 Account | Fields & Relationships 然后单击 New.
  3. 选择公式并单击 Next.
  4. 在 Field Label, 输入 Future Date. 字段名称自动填充。
  5. 选择 Date 并点击 Next.
  6. 输入以下公式:
    TODAY() + 3

    注意

    将日期添加到日期时,Salesforce会在小数点后忽略数字。所以TODAY()+ 3相当于TODAY + 3.4,而TODAY()+ 2相当于TODAY()+ 2.9。

很简单,对吧?当您想要将工作日添加到日期时,情况会变得更加复杂。对于此公式,我们使用CASE()函数向TODAY()添加3个工作日。 CASE()在某些方面与IF()类似。关键的区别在于IF()只检查一个逻辑语句,而CASE()检查一系列称为个案的语句。

CASE(expression,case1,result1,case2,result2,…,else_result)将表达式与case1进行比较。如果它们相等,则返回result1。如果它们不是,则将表达式与case2进行比较,依此类推。如果expression与任何情况都不匹配,则该语句返回else_result。

CASE()对于有很多可能结果的条件语句是有用的。尽管嵌套的IF()语句通常可以做同样的事情,但CASE()使复杂的公式更易于阅读和理解。

我们将使用CASE()来写一个公式,为TODAY()增加3个工作日。与CASE()一起工作的第一步是考虑案例。我们的配方可能会遇到几种不同的情况:

  • 如果 TODAY()是星期日,星期一或星期二,则增加3个工作日与 TODAY() + 3 相同。
  • 如果TODAY()是星期三,星期四或星期五,则增加3个工作日与TODAY()+ 5(3个工作日和2个周末)相同。
  • 如果TODAY()是星期六,则增加3个工作日与TODAY()+ 4(3个工作日和1个周末日)相同。

对于我们的公式工作,我们必须知道TODAY()是星期几。有没有快速的方法来找到星期几与一个内置函数,所以我们使用更先进的技巧。首先我们找到TODAY()和过去已知的星期天之间的天数。接下来我们使用MOD()来查找该数字的余数除以7,给我们一个对应于当前星期几的数字。对于我们的参考星期天,我们使用1900年1月7日,代表DATE(1900,1,7)。

我们的CASE()语句然后根据TODAY()的星期几决定结果。我们的最终公式如下所示:

CASE(
  MOD(TODAY() - DATE(1900, 1, 7), 7),
  3, TODAY() + 2 + 3,
  4, TODAY() + 2 + 3,
  5, TODAY() + 2 + 3,
  6, TODAY() + 1 + 3,
  TODAY() + 3
)
您可以使用此公式的变体将任意数量的工作日添加到日期。无论您添加多少个工作日,最多有七个案例,一个星期中的每一天。

日期和日期/时间示例

  1. 这个公式通过从下一个月的第一天减去一天来找出一个月的最后一天。
    IF(
      MONTH(Date__c) = 12,
      DATE(YEAR(Date__c), 12, 31),
      DATE(YEAR(Date__c), MONTH(Date__c) + 1, 1) - 1
    )
  2. 这个公式找出TODAY()和date_1之间的工作天数,使用类似于我们之前用来查找TODAY()星期几的技巧。首先,公式找出TODAY()与过去已知的星期一(本例中为1900年1月8日)之间的工作日数。我们将该数除以7,然后使用FLOOR()将其从几天转换为几周。然后,我们将它乘以5,将其从几周转换为工作日。该公式找出该金额与date_1与同一参考星期一之间的营业日数之间的差异。结果是TODAY()和Date_c之间的营业日数。
    (5 * (FLOOR((TODAY() - DATE(1900, 1, 8)) / 7)) + MIN(5, MOD(TODAY() - DATE (1900, 1, 8), 7)))
    -
    (5 * (FLOOR((Date__c - DATE(1900, 1, 8)) / 7)) + MIN(5, MOD(Date__c - DATE(1900, 1, 8), 7 )))
  3. 此公式使用IF(),AND(),OR()和NOT()将Num_Years__c添加到Date__c中,以确保它不会在闰年中返回2月29日。如果日期是闰年的2月29日,并且未来年不是闰年,则公式将返回到未来一年的3月1日。该公式使用MOD()来检查当前年份是否为闰年。如果一个年份可以被400整除,或者被4整除而不是100,那么它就是一个闰年。否则,这个公式会返回相同的日期。
    IF(
      AND(
        MONTH(Date__c) = 2,
        DAY(Date__c) = 29,
        NOT(
          OR(
            MOD(YEAR(Date__c), 400) = 0,
            AND(
              MOD(YEAR(Date__c), 4) = 0,
              MOD(YEAR(Date__c), 100) != 0
            )
          )
        )
      ),
      DATE(YEAR(Date__c) + Num_Years__c, 3, 1),
      DATE(YEAR(Date__c) + Num_Years__c,
      MONTH(Date__c), DAY(Date__c)
      )
    )

包含日期和日期/时间公式的常见错误

  • 在日期和日期/时间之间转换。日期和日期/时间数据类型不可互换。如果它被写入以返回日期/时间值,则具有日期返回类型的公式不起作用。要在日期和日期/时间之间转换,请使用内置函数DATEVALUE()和DATETIMEVALUE()。请记住,TODAY()将当前日期作为Date值返回,而NOW()将当前日期和时间作为Date / Time值返回。
  • 使用时区。日期和日期/时间值始终显示在正在查看它们的用户的时区中。日期/时间值被转换为格林尼治标准时保存的记录,然后在格林尼治时间以外的用户查看时再次转换。将日期转换为日期/时间时,时间始终是午夜格林尼治标准时间。使用TEXT()转换日期/时间值时,请务必考虑时区。将日期/时间转换为文本时,它将以格林尼治标准时间(以GMT结尾处的Z表示)返回时间。 TEXT()总是以GMT时间生成文本值,而不是组织的时区。
  • 闰年和无效的日期。当将文本转换为日期或日期/时间值或增加年,月,日的日期或日期/时间,确保您的结果仍然是一个有效的日期。例如,如果公式的结果是2015年6月31日,则公式字段将显示#Error!同样,如果您的公式返回2013年2月29日(非闰年),该字段将显示错误。确保您的配方包含闰年和不同的月份长度。

公式(2)数字

学习目标

完成本单元后,您将能够:

  • 描述什么数字,货币和公式返回类型是。
  • 解释数字,货币和百分比类型之间的差异。
  • 描述具有数字,货币和百分比类型的公式的用例。
  • 使用数字,货币和百分比类型创建公式。

数字,货币和公式中的百分比简介

当大多数人听到这个词的公式时,他们会想象一些涉及数字的东西。虽然Salesforce中的公式并非总是如此,但少数数据类型是基于数字的。这些数据类型中最简单的是数字类型。当您创建返回数字的公式字段时,您可以指定您的数字有多少个小数位,从0到18。
数字可以是正数也可以是负数,整数或小数。数字可以很好地用于测量,例如温度,长度和种群。然而,货币有它自己的数据类型。返回货币数据的公式与数字公式相似,只是货币值带有内置的货币符号。

 

注意

使用货币的自定义公式字段不与任何特定货币关联。如果您的组织启用了多币种,则货币公式的结果将以相关记录的货币显示。
百分数也是他们自己的数据类型 – 附有百分号的数字。百分比被存储为除以100的数字,意味着100%被表示为1,90%等于0.9,依此类推。
您可以在公式中混合和匹配这三种数值数据类型,但要记住它们之间的差异。请记住,无论您使用的是哪种类型,公式返回的值不能超过18位,包括小数点前后的数字。
公式返回类型 特点
Number 正数或负数,无论是整数还是小数。
Currency 带有货币符号的数字。
Percent 带百分号的数字,以数字除以100存储。

 

通用数字,货币和百分比函数和操作符

当你使用数字时,你经常使用某些函数和操作符。

数学运算符

返回数字,货币或百分比的公式中最常用的运算符是从最早的算术类开始就已经看到的数学符号。
您可以添加(+),减( – ),乘(*)或除(/)数值。您也可以在公式中使用指数(^)。这些操作员就像在计算器上一样工作。公式遵循操作顺序,您可以将操作分组在括号中。
您也可以使用大于(>),小于(<),小于或等于(<=)或大于或等于(> =)来比较两个数值。要检查两个数字是否相等,请使用=。要检查两个数字是否相等,请使用不等于,它可以写成!=或<>。

数学函数

公式编辑器还提供了其他一些数学函数。函数ROUND()将您给出的数值进行舍入。它使用半轮规则,意味着中途值总是四舍五入。例如,1.45到1.5,1.43到1.4。
此货币公式使用ROUND()计算折扣并将其舍入到两位小数,以便它是一个适当的货币数量。
ROUND(Price__c - Price__c * Discount__c, 2)
您还可以使用内置的运算符来执行其他几个数学函数,如绝对值,天花板或地板。要了解有关数学函数的更多信息,请参阅Salesforce联机帮助中的公式运算符和函数。

 

在公式中使用数字,货币和百分比

您可以在许多不同情况下使用公式中的数字,货币和百分比类型,从计算销售佣金百分比到总收入或利润。

为主体创建一个自定义字段

  1. 在安装程序中,使用快速查找框来查找 Object Manager.
  2. 点击 Account | Fields & Relationships 然后单击 New.
  3. 选择 Currency 并点击 Next.
  4. In Field Label, enter Principal. Field Name populates automatically.
  5. 在 Decimal Places,中输入2.由于这是货币数量,我们需要小数点后两位数字。
  6. 将长度更改为16.将其余选项保留为默认值,然后单击下一步。
  7. 再次单击下一步,然后单击保存。

我们将使用委托人有条件地计算利率,然后我们可以使用它来计算复合利息的金额。

计算百分比利息

对于这个帐户,假设如果本金余额低于$ 10,000,则利率为每年2%,即0.02。如果余额在$ 10,000和$ 100,000之间,则利率为3%,即0.03。如果余额超过$ 100,000,则利率为4%,即0.04。
给定委托人,我们使用IF()来决定适当的利率。
  1. 在 Object Manager, 单击 Account | Fields & Relationships 然后单击 New.
  2. 选择 Formula 并单击 Next.
  3. 在 Field Label, 输入 Interest Rate. 字段名称自动填充。
  4. 选择 Percent 并将小数位保留为默认值2。
  5. 点击 Next.
  6. 输入以下公式:
    IF(Principal__c < 10000, 0.02, 
      IF(Principal__c >= 10000 &&
        Principal__c < 100000, 0.03, 0.04))

     

    注意

    我们的if语句有一个缺口:尽管货币数量可能是负数,但我们假设Principal__c是正数。如果不是,这个账户有麻烦!
    现在我们有一个本金和一个利率 – 计算一个账户的累计利息所需的一切。

计算帐户的累计利息

我们将创建一个公式,该公式用于计算使用“委托人”的帐户的利息以及帐户已开立的年数。幸运的是,已经有一个计算账户利息的数学公式:A = Pe ^(rt),它使用下列变量。

变量 值
P 账户中的金额本金
e 数学常数 2.71828182845904
r 账户的年利率
t 帐户已开启的年数

现在我们只需要调整公式来适应我们的领域。

首先,在公式编辑器中插入字段Principal。我们要乘以e乘以利率的乘方,再乘以账户开立的年数。我们可以用EXP()函数来做到这一点。 EXP(数字)返回e增加到数字的幂。
对于利率,插入我们之前做出的领域Interest_Rate__c。要查找帐户已打开的年数,请从TODAY()中减去打开帐户的年份YearStarted,该TODAY()是一个返回当前日期的内置函数。因为YearStarted是一个Text值,所以首先必须使用VALUE()将其转换为Number,该值使用Text字符串并返回一个Number。我们还使用函数YEAR(),它从Date中抽取一年,在这种情况下是TODAY()返回的当前日期。

这给了我们最终的功能。

Principal__c * EXP(Interest_Rate__c * (YEAR(TODAY()) - VALUE(YearStarted)))
在公式编辑器中输入函数后,可以继续并单击下一步。在“字段安全性”页面上,单击“下一步”,然后单击“保存”以完成公式。
恭喜,您已经成功编写了一个计算公式,计算累积的,不断复利的帐户利息!您可以在任何帐户页面上看到它的行动。

 

数字公式示例

  1. 考虑到保证金的百分比,销售的商品数量和每件商品的价格,这个公式计算了毛利润。
    Margin_percent__c * Items_Sold__c * Price_Item__c
  2. 这个货币公式计算佣金,假设最高佣金为$ 500。鉴于存在定制百分比字段佣金和自定义货币字段销售额,此公式返回500美元和佣金百分比乘以销售额的较小金额。
    MIN(500, Sale__c * Commission__c)
  3. 数字公式对于完成基本的单位转换很有帮助。这个公式将摄氏温度转换成华氏温度。
    1.8 * Degrees_Celsius__c + 32
    这一个转换英里到公里。
    Miles__c / 0.6213711921

 

数字公式的常见错误

  • 除以零. 在编写基于数字的公式时,您习惯使用相同的数学规则。如果你的公式除以0,你会得到一个错误。当你分两个数时,确保分母不为零。当您将价值可能改变的另一个领域划分时,考虑除以零是特别重要的。如果您仍然想要用可能为零的数字进行除法,请使用IF()语句来保证您不会遇到错误。例如,此公式通过将年收入除以员工人数来计算帐户上每名员工的收入。如果员工为零,则公式将返回0,而不是运行到错误。
    IF(NumberOfEmployees <> 0, AnnualRevenue / NumberOfEmployees, 0)
  • 检查空字段. 通过使用=(equal)或者!=(not equal)运算符来检查一个字段是否为空可能是诱人的。但最好的做法是使用内置函数ISBLANK()。 ISBLANK()将任何字段作为参数,如果字段为空则返回true,否则返回false。在创建公式时,您可以选择将空白字段视为零或空白。默认情况下,选择空白字段为零。如果选择将空白字段视为空白,则只能使用ISBLANK()来检查字段是否为空。

公式(1)复选框

学习目标

完成本单元后,您将能够:

  • 描述复选框公式的返回类型是什么。
  • 使用IF(),AND(),NOT()和OR()函数十分方便。
  • 用复选框类型描述公式的用例。
  • 使用复选框类型创建一个公式。

公式字段介绍

公式是一个强大的工具,可以让您对组织数据执行计算和其他操作。使用公式,您可以嵌入超链接,使用现有字段执行算术运算,或使用条件逻辑显示金额。如果您以前从未使用过公式,那么在开始使用公式字段之前,请先阅读此公式。

公式中的复选框类型简介

说到复选框,您只有两个选择:选择或不选择。这对你的公式意味着什么?那么,复选框公式只是一个逻辑语句,可以是真或假。例如,如果您想知道账户至少有500名员工,则可以使用简单的复选框公式。

NumberOfEmployees >= 500
如果某个账户的员工数量超过或等于500人,则在该账户的页面上选中复选框大账户。否则,大型账户不被检查。
大多数情况下,公式中的逻辑陈述比这个复杂得多。要充分利用复选框公式数据类型,您需要一些基本的逻辑工具。

基本的逻辑运算符

逻辑函数是对几乎每个对话中已经使用的单词进行更加严格的适应性调整:和,或不,如果。例如,你知道,一个苹果是一个红色的水果,而一个香蕉是一个黄色的水果。如果你在杂货店里看到红色和水果的东西,你就要抢苹果。如果你正在寻找一些红色或水果的东西,你可以用苹果或香蕉。
您可以使用与NOT(),AND(),OR()和IF()函数相同类型的逻辑。

AND()

内建的AND()函数至少需要两个参数。当且仅当两个参数都为真时它才返回true。如果我们在桌子上看这个逻辑,可以很容易地看到这个逻辑。

第一个参数 = True 第一个参数 = False
第二个参数 = True True False
第二个参数= False False False
例如,假设您希望用户查看联系人并立即知道是否可以通过电子邮件或电话联系他们。如果有问题的联系人标记为“不呼叫”和“退出电子邮件”,我们想要选择另一个复选框,不要联系。因为我们希望只有当选择了“不呼叫”和“电子邮件退出”的联系人时,才能检查此复选框,我们使用AND()函数。
以与在Salesforce中创建任何其他公式字段相同的方式创建复选框公式。
  1. 从设置中,在快速查找框中输入联系人,然后选择联系 Contacts | Fields.
  2. 滚动到联系人自定义字段和关系部分,然后单击 New.
  3. 选择Formula 并单击Next。
  4. 在 Field Label, 中,输入 Do Not Contact. 字段名称自动填充。
  5. 选择 Checkbox 然后单击 Next.
  6. 复制下面的代码片段并将其粘贴到公式编辑器中。

    AND(DoNotCall, HasOptedOutOfEmail)
    一旦你完成,这是它在公式编辑器中的样子:
    The Do Not Contact checkbox formula
快速记录。我们在整个模块中给出的公式样本范围从相对简单到非常复杂。为了使您更容易,我们将给你所有的公式样本作为片段,而不是公式编辑器中的外观的截图。这将允许您将代码片段复制并粘贴到公式编辑器中。要复制代码段,只需将鼠标悬停在代码段上,直到右上角出现三个图标。然后使用“复制到剪贴板”图标复制代码段。
一如往常,确保您使用高级公式编辑器输入您的公式。您可以通过从公式编辑器中选择“高级公式”选项卡来访问“高级公式编辑器”。高级公式编辑器使您可以轻松访问您在整个模块中需要的各种功能和操作员。

注意

请记住,您可以将公式字段创建为自定义字段,但也可以将公式字段创建为验证规则。通过验证规则,您可以防止用户根据公式保存包含无效数据的记录。验证规则可以是强制执行数据质量的一种有效方法,但拥有巨大的权力则是一项重大的责任。你想要的最后一件事是不能保存记录的不幸的用户。所以明智地使用你的力量。在这里了解更多关于验证规则。
使用此公式,如果有人选择了“不呼叫”和“电子邮件退出”,则联系人卡片将显示另一个选中的复选框“不接触”。如果人员只选择其中一个,则不选中“不联系”框。

 

注意

有不止一种方法来编写AND()函数。你可以用AND()把它写成函数,或者把两个语句和&&联系起来,作为一个操作符。在这种情况下,AND(DoNotCall,HasOptedOutOfEmail)等同于DoNotCall && HasOptedOutOfEmail。请确保不要混淆&,它用&连接两个文本字符串来替换AND()。
如果你想检查两个以上的条件,不要担心,AND()运算符不限于两个。如果AND()运算符选择了“不要呼叫”,“电子邮件退出”和“传真退出”,则在“不联系”框中显示与联系人联系的条件。
AND(DoNotCall, HasOptedOutOfEmail, HasOptedOutOfFax)
使用此公式,只有在选中了“不呼叫”,“不要电子邮件”和“不传真”三个复选框时,才会选中“不接触”复选框。如果没有选中任何一个(或两个或全部三个),则不会在联系人页面上显示未选中。

OR()

OR()函数与AND()函数类似。它也至少需要两个参数。但是,与AND()不同,如果至少有一个条件为真,则OR()返回true,如果所有参数都为假,则返回false。

第一个参数 = True 第一个参数= False
第二个参数 = True True True
第二个参数 = False True False
我们来看看接触对象的另一个例子。假设你想要显示一个复选框,如果一个联系人是在一个组织的执行层。我们知道某人在执行层面上的头衔是以“首席”(如首席执行官,首席运营官等)开头,还是包含“总统”一词(如总裁,副总裁等)。注意我们是如何使用这个词或者描述这个问题的。这是一个很好的线索,你需要在这个公式中的OR()运算符。
为了使这个公式有效,我们将使用几个文本函数,你可以在使用文本公式中学到更多的知识:
  • BEGINS(text, compare_text)告诉你一个字符串(文本)是否以另一个字符串(compare_text)开始。
  • CONTAINS(text, compare_text) 告诉你一个字符串(text)是否包含另一个字符串(compare_text)。
使用复选框类型和名称是执行创建一个公式字段。输入下面的公式

OR(Begins(Title, "Chief"), CONTAINS(Title, "President"))
就像使用AND()函数一样,可以用多种方法编写OR()。你可以写BEGINS(Title , “Chief”) || CONTAINS(Title , “President”).

OR(), 像AND(), 可以有两个以上的参数。要检查联系人的标题是否包含“执行”一词,请尝试:

BEGINS(Title, "Chief") ||
CONTAINS(Title, "President") ||
CONTAINS(Title, "Executive")
NOT()
NOT()函数完全符合你所期望的:它改变了任何真的假,任何真的假。假设您想要在联系人的页面上显示一个复选框,指出联系人卡片是否缺少重要信息。对于这个例子,如果包含名字,姓氏,电话号码,电子邮件地址和邮寄地址,我们认为联系人完成。只有当这些字段都不为空时,公式才会计算为真。
要检查联系人是否有我们正在寻找的信息,请使用ISBLANK()函数。 ISBLANK()将一个字段作为参数,如果为空则返回true,如果填充则返回false。
NOT(
  ISBLANK(FirstName) || 
  ISBLANK(LastName) ||
  ISBLANK(Phone) ||
  ISBLANK(Email) ||
  ISBLANK(MailingAddress)
)

注意

由于函数和运算符之间的空格和返回值在公式中无关紧要,因此此处显示的换行符和空格不是必需的。但是,在公式中使用换行符和空格可以更容易阅读。它也可以帮助其他任何需要了解或更新公式的人。
在那里,你有它!您可以通过查看组织中的联系人来测试此公式。如果所有相关的联系信息都已完成,则联系人将被标记为已完成,并选中您创建的联系人完成复选框。如果我们选中的一个或多个字段为空,则复选框未被选中。
请注意,NOT()也可以写成简单的感叹号。使用这个符号,我们的公式看起来有点不同,但是具有相同的效果。
!(ISBLANK(FirstName) || 
ISBLANK(LastName) ||
ISBLANK(Phone) ||
ISBLANK(Email) ||
ISBLANK(MailingAddress))

IF()

可以使用IF()语句,而不是像AND()和OR()这样的逻辑运算符串联在一起。 IF()接受三个参数,格式为IF(test,result,alternate)。通俗地说:如果测试是真的,评估结果。否则,评估备用。

所以你回到杂货店,再一次找一个红色的水果。你知道如何用AND()和OR()写出这个场景,但是你也可以用IF()语句来思考它。首先,你拿起一块产品,检查是否是水果。如果是,请检查它是否是红色的。如果您使用IF()语句编写产品选择公式,则您的决策过程如下所示:

IF(Mystery_Produce = "Fruit", Mystery_Produce_Color = "Red", false)
您可以在公式中应用相同的基于if的逻辑。例如,您想知道联系人是否是主要联系人。我们将主要联系人定义为执行人员(使用之前创建的公式字段“执行”),并且位于市场营销部门中。你已经知道如何和ands和ors做到这一点。
Is_Executive__c && Department = "Marketing"
使用IF()语句,公式如下所示:
IF(Is_Executive__c, Department = "Marketing", false)
你可以嵌套IF()语句。 IF()语句中的任何参数都可以是另一个逻辑语句,包括另一个IF()语句。在这个例子中,我们将主要联系人定义为执行人员,除此之外,还有旧金山市场部或纽约销售部。我们将创建一个只有在满足这些条件时才被选中的复选框。
我们通过查看电话号码的区号来确定联系人所在的城市,415对应于旧金山,212对应纽约。使用ands和ors,公式如下所示:
Department = "Marketing" && 
Is_Executive__c &&
BEGINS(Phone, "(415)") ||
Department = "Sales" &&
Is_Executive__c &&
BEGINS(Phone, "(212)")

注意

逻辑运算符就像数学运算符一样,具有操作的顺序。 AND()总是在OR()之前被计算。您还可以将逻辑运算符分组在括号中,以便按特定顺序进行评估。
如果一个联系人满足作为主要联系人的所有要求,我们需要一个正确的公式。首先,我们要检查联系人是否使用我们之前创建的Is Executive复选框。如果联系人是主管人员,我们会检查该部门是否为销售人员。如果这是真的,那么我们要检查的最后一件事是电话号码的区号。另一方面,如果联系人是执行人员,但部门不是销售人员,则检查是否为营销。如果是这种情况,我们检查电话号码是否有旧金山地区代码。使用选择树来显示一系列IF()语句通常更容易。当你写一个使用IF()的公式的时候,先抽出一个是很好的第一步。
A choice tree representing our logical process
树的每个分支对应于我们公式的IF()语句中的条件。

IF(Is_Executive__c,
  IF(Department = "Sales", BEGINS(Phone, "(212)"), False),
  IF(Department = "Marketing", BEGINS(Phone, "(415)"), False))
在像这样的公式中,包含明确的换行符和空格是非常重要的。那么,后来谁读你的公式知道你的IF()语句是如何嵌套的。

复选框公式示例

  1. 如果概率小于50%(0.5),并且预期收入小于10,000,则此复选框公式将机会指定为小的机会。
    AND(Probability < 0.5, ExpectedRevenue < 10000)
  2. 如果优先级标记为高,情况未关闭,并且在一周内升级或未更新,则此公式将优先级标记为优先级。该公式根据放置括号的位置而有所不同。

    ISPICKVAL(Priority, "High") &&
    NOT(IsClosed) &&
    (IsEscalated || Days_Since_Last_Update__c > 7)
    例如,此公式使用略有不同的圆括号来检查案件是否高优先级,已关闭并升级,或者自案件上次更新以来已超过7天。
    (ISPICKVAL(Priority, "High") &&
    NOT(IsClosed) && IsEscalated)|| 
    Days_Since_Last_Update__c > 7
  3. 这个公式显示一个复选框,好的呼叫,检查是否可以拨打联系人。该公式检查联系人是否选择了“不要呼叫”。如果联系人没有,公式确保电话号码字段不是空白。
    IF(NOT(DoNotcall), NOT(ISBLANK(Phone)), false)

销售区域预测(3)

学习目标

完成本单元后,您将能够:

  • 区分预测和管道。
  • 定义您的销售流程。
  • 请解释为什么在Salesforce中检查您的预测非常重要。

现在,您的代表们已经融入了围绕公司目标的均衡区域,让我们利用预测的力量来构建更加辉煌的未来。预测不仅仅是报告中的内容。这是至关重要的知识,可以使您能够主动做出更好的业务决策。如果您可以学习如何有效地进行预测,而无需在电子表格中花费无数时间,则您将拥有内置的优势。

第一件事首先。什么是预测?

让我们确保我们在预测的同一页上,特别是在定义管道和预测之间的差异时。

  • Pipeline 是一个代表机会的综合视图,不管他们处于什么阶段。它包括了从最新的前景到这个机会的一切,准备签字。
  • Forecast 是管道的一个子集,仅包括预计在某个时间段内完成的交易,例如本季度。

虽然两者都很重要,但预测是决策的关键,因为它衡量了我们认为实际收入有多少。这种信息影响到重要的事情,如招聘甚至股票价格。

现在您已经开始预测,这里有最佳实践可以帮助您的销售团队做出更明智的决策。

定义您的销售流程

在开始预测之前,为您的销售周期建立一致的术语。如果您正在使用交易阶段,请确保“阶段2”意味着同样的事情,无论哪个销售代表报告。
接下来,标准化你的过程。在交易进入下一个阶段之前,哪些步骤至关重要?产品经理或领导是否应该在某一阶段进入?如果您不确定,请与顶级代表和销售负责人进行沟通,从头到尾定义这些步骤,然后将这些步骤传达给您的整个销售团队。
考虑使用销售路径自动引导销售周期的销售代表。不管你做了多少训练,有人会忘记一些事情(或许多人会忘记许多事情)。让自己更轻松,并将您的流程构建到Salesforce中。

持续检查预测

仔细查看您的预测数据很重要,包括与您的销售团队打电话。
Salesforce的商业销售RVP Richard Lind建议,一线经理应该问他们的团队这些问题,把交易放在正确的阶段,提高预测的准确性:
  • 前景是否有预算?
  • 他们的高管签了名?
  • 所有关键的决策者都已经确定和参与了吗
  • 我们是否有效量化了投资者的投资回报?
  • 是否有一个引人注目的事件推动时间表?

(你可以阅读理查德关于在Quotable上预测的全文。)

在Salesforce中跟踪您的预测

不要因为从电子表格运行每周电话或进行任何类型的预测而犯错误。即使是从Salesforce导出电子表格的一分钟,它也会变成静态的,陈旧的和不准确的。谁想根据旧数据做出决定?
更好的选择是运行您的电话,并根据Salesforce中的仪表板做出决定。 (提醒:仪表板是报表的可视化表示。)因为它们在Salesforce中,所以只要代表进行更改,您的数据就会实时更新。
如果您拥有更成熟或更复杂的销售团队,则最佳选择是Sales Cloud许可证中包含的协作预测工具。您可以自定义它以适应您的业务。根据收入或数量或两者进行季度或月度预测,并根据产品系列设置额外配额。它甚至允许经理判断。如果您认为销售代表的预测过高或过低,则可以覆盖最初的数字,并将结果上报至领导层,而不会丢失原始数据。您还可以根据收入,合同价值等,将合适的金额归功于销售覆盖率,并了解他们如何为您的数量做出贡献。

成功的时间

现在你知道了:

  1. 如何构建您的领地,以支持公司的目标,并通过给予他们一个公平的配额机会来激励每一个代表。
  2. 如何使用Salesforce(或AppExchange)管理您的地区并全年维护它们。
  3. 如何改进使用实时数据的预测和决策。

你现在拥有成功的基础设施,以及广泛的代表快乐的地图。所有你需要做的是按照步骤来达到你的目标!

销售区域预测(2)

学习目标

完成本单元后,您将能够:

  • 列出全年维护您的区域的方法。
  • 描述如何使用Salesforce Enterprise Territory Management来管理您的地区。

在最后一个单元中,您了解了创建均衡区域的所有信息,以确保销售代表获得成功,并实现公司目标。现在让我们来谈谈如何管理这些地区。

整年保持你的区域

区域不是一个“设定它,忘记它”类型的东西。你需要全年检查,确保他们仍然给你的销售团队取得成功所需的东西,并在必要时进行调整。可以肯定的是,也许这个夏威夷区域需要现场访问。在leis和luaus的梦想之间,注意这些最佳实践以保持头脑清醒。

经验是你的朋友

一个数据模型只能带你到目前为止,所以与你的销售主管谈谈,以获得这种制度性的,定性的知识。他们会知道哪些地区没有被淘汰,哪些地方需要调整。

回到数据

如有疑问,参考数据可帮助您调整地区。利用Salesforce的企业地域管理(ETM)工具,您可以获得显示每个地区的客户,哪些客户没有分配地区的报告,以及您可以从不同的地区获得多少收入。结合销售经理的意见,你准备好了!

最小化地区中断

更换地区对于一些销售代表来说是痛苦的,所以只有在他们真正无法工作的地方进行更改。如果您需要在年中调整,尽早沟通,尽量减少混淆。让代表和他们的管理者有时间来计划即将到来的变化,当时间翻转开关时,快速地做。您不希望销售代表在销售时转换区域。谨慎处理后期机会的客户。如果您必须转移这些客户,请给予您的代表足够的注意,以促进顺利过渡。

在Salesforce中管理区域

那么,你如何管理这些区域呢?首先,离开电子表格 – 是的,那个在屏幕上。从耗时的手动流程中退出,并采用Salesforce Enterprise Territory Management。它包含在Salesforce Classic的Enterprise和Unlimited版本中,并且可以让您在Salesforce中正确模拟您的区域。具体而言,您可以:

  • 建立您的地区模型: 使用不同的区域模型,并看到他们的影响,而不会触及你的真实数据。而当您选择部署模型时,它会自动分配您的客户。
  • 创建一个区域层次结构: 就像你在商业中需要一个组织结构图一样,区域需要层次结构。例如,您可以为美国创建一个主区域,分割成东部和西部的较小区域,这些区域可以分成较小的地区:加利福尼亚州,德克萨斯州,纽约州。您可以直接从该层次结构运行规则,即使它们对于每个区域都不相同。
  • 定义分配规则: 输入规则,以便知道哪些客户属于哪个区域。例如,x邮政编码,y收入和z行业中的客户属于地区A.这样,您不必手动执行此操作。如果您使用的是区域层次结构,则可以将相同的规则分配给层次结构中的每个区域,而无需手动添加和重新添加它们。
  • 促进团队销售: 帮助代表找到合适的人来完成交易的好方法是在一个区域内分配协作角色。这是激活团队销售的有效方法。

使用AppExchange管理区域

如果您需要专门的分配逻辑(如基于距离或驾驶时间的分配)或广泛的基于地图的区域操作,AppExchange为您提供了许多不错的选择。
AppExchange是官方的Salesforce应用程序商店。如果你觉得你需要一个更加定制的解决方案,那么你可以转向它,但是你不想自己构建它。而且由于是由Salesforce提供的,所以您期望从我们这里得到的所有东西,比如安全和信任,都会传递给产品。

销售区域预测(2)

学习目标

完成本单元后,您将能够:

  • 列出全年维护您的区域的方法。
  • 描述如何使用Salesforce Enterprise Territory Management来管理您的地区。

在最后一个单元中,您了解了创建均衡区域的所有信息,以确保销售代表获得成功,并实现公司目标。现在让我们来谈谈如何管理这些地区。

整年保持你的区域

区域不是一个“设定它,忘记它”类型的东西。你需要全年检查,确保他们仍然给你的销售团队取得成功所需的东西,并在必要时进行调整。可以肯定的是,也许这个夏威夷区域需要现场访问。在leis和luaus的梦想之间,注意这些最佳实践以保持头脑清醒。

经验是你的朋友

一个数据模型只能带你到目前为止,所以与你的销售主管谈谈,以获得这种制度性的,定性的知识。他们会知道哪些地区没有被淘汰,哪些地方需要调整。

回到数据

如有疑问,参考数据可帮助您调整地区。利用Salesforce的企业地域管理(ETM)工具,您可以获得显示每个地区的客户,哪些客户没有分配地区的报告,以及您可以从不同的地区获得多少收入。结合销售经理的意见,你准备好了!

最小化地区中断

更换地区对于一些销售代表来说是痛苦的,所以只有在他们真正无法工作的地方进行更改。如果您需要在年中调整,尽早沟通,尽量减少混淆。让代表和他们的管理者有时间来计划即将到来的变化,当时间翻转开关时,快速地做。您不希望销售代表在销售时转换区域。谨慎处理后期机会的客户。如果您必须转移这些客户,请给予您的代表足够的注意,以促进顺利过渡。

在Salesforce中管理区域

那么,你如何管理这些区域呢?首先,离开电子表格 – 是的,那个在屏幕上。从耗时的手动流程中退出,并采用Salesforce Enterprise Territory Management。它包含在Salesforce Classic的Enterprise和Unlimited版本中,并且可以让您在Salesforce中正确模拟您的区域。具体而言,您可以:

  • 建立您的地区模型: 使用不同的区域模型,并看到他们的影响,而不会触及你的真实数据。而当您选择部署模型时,它会自动分配您的客户。
  • 创建一个区域层次结构: 就像你在商业中需要一个组织结构图一样,区域需要层次结构。例如,您可以为美国创建一个主区域,分割成东部和西部的较小区域,这些区域可以分成较小的地区:加利福尼亚州,德克萨斯州,纽约州。您可以直接从该层次结构运行规则,即使它们对于每个区域都不相同。
  • 定义分配规则: 输入规则,以便知道哪些客户属于哪个区域。例如,x邮政编码,y收入和z行业中的客户属于地区A.这样,您不必手动执行此操作。如果您使用的是区域层次结构,则可以将相同的规则分配给层次结构中的每个区域,而无需手动添加和重新添加它们。
  • 促进团队销售: 帮助代表找到合适的人来完成交易的好方法是在一个区域内分配协作角色。这是激活团队销售的有效方法。

使用AppExchange管理区域

如果您需要专门的分配逻辑(如基于距离或驾驶时间的分配)或广泛的基于地图的区域操作,AppExchange为您提供了许多不错的选择。
AppExchange是官方的Salesforce应用程序商店。如果你觉得你需要一个更加定制的解决方案,那么你可以转向它,但是你不想自己构建它。而且由于是由Salesforce提供的,所以您期望从我们这里得到的所有东西,比如安全和信任,都会传递给产品。

销售区域预测(1)

学习目标

完成本单元后,您将能够:

  • 根据公司目标分配区域。
  • 使用多个标准来平衡地区。
领地管理是快乐,高效的团队的基石。它决定了团队是如何分裂的,谁追逐了哪个领导者,这有助于塑造每个人的目标。但是什么决定区域?如果你自己在想:“谁知道,当我到这里的时候就是这样的,”没关系,我们会假装我们没有听到你的声音。但我们不会假装没有更好的办法。
在本单元中,您将了解如何使用数据来映射有效的地区,这可以让您的公司在实现上市目标的过程中取得成功,同时激发并保留您的代表。

根据公司目标分配区域

将每个销售代表分配到地图的不同部分绝对是创建销售区域的最简单方式,但并不总是最有效的。相反,考虑你公司的上市策略和总体业务目标。今年贵公司的首要任务是什么?这怎么能在未来的5年里形成你的业务增长?
这里有几个问题可以帮助您了解贵公司的市场策略并确定区域管理流程。
  • 你今年想拓展新市场吗?
  • 您的产品是否适合新行业的客户?
  • 您是否发现某个行业的总体地址市场(TAM)比您预期的要大?
  • 你今年的目标是一定规模的公司吗?

如果您今年将产品推向亚太地区,请考虑一个专门针对亚太地区的销售团队。如果你在医疗保健和制造业发现了庞大的可寻址市场,那么这些市场可能值得拥有自己的团队。让你的公司的目标推动你与更多的销售人员投资,以及如何雕刻你的区域。

平衡你的区域

因此,您将您的区域划分为高层次,推动您公司最重要的目标。现在,你可以决定哪个代表主持哪个王国。 (如果这种力量让你觉得自己像皇室,又喝了一口茶,并帮助自己多一杯咖啡。)

使用多个因素来划分地区

现在有几种现成的方式可以划分区域,但只依靠一个就会产生问题。例如:

  • 你可以给每个代表一个邮政编码。大!但是,如果Seema在蒙大拿州人口稀少的地区有59007,而Marisol在旧金山的中心有94105? Seema的客户将不会像Marisol那么多。
  • 你可以给每个代表相同数量的客户。十分简单!但是,如果马克有45人是死亡的线索,只有5个可行的前景,拉蒙有50个可行的前景呢?马克的配额要困难得多。

你得到的图片 – 单独使用一个因素可能不会导致你想要的平等地区。所以你会怎么做?在你的公式中引入更多的因素。有些你可以考虑的是:

  • 公司数量
  • 地理
  • 公司规模(可以是员工人数或年收入)
  • 倾向购买
  • 行业

给代表增加配额

如果你仍然不能像你想要的那样让你的领地平等(实际上,它不会是100%完美的),那就试着调整配额,让事情更加平等。
配额是衡量成功的重要方式,但对于每个代表来说,配额并不需要完全一样。你有不同的经验和技能水平的销售代表。因此,请占领更大的地区,给予他们更高的配额,并把他们分配给经验丰富的代表,他们肯定会喜欢这个机会。对较小的地区重复,配额较小,新代表仍然需要削减牙齿。现在你已经有了全面的覆盖面,你的代表就是要设定他们的配额,并且积极地坚持要重复他们的成功。

为什么你需要最佳的地域管理

如果你仍然想知道:“我不能把所有的代表给我所有的代表同样多的平方英里吗?”(现在放下你的手,因为我们实际上看不到你!)是的,你可以在地图上覆盖一个网格,然后每天给它打电话。但是考虑一下:投入更多的精力和想法来管理你的区域可以在大路上得到回报。
Salesforce的商业销售高级副总裁Adam Gilberd概述了为什么值得花时间:

“为什么使用数据来确保每个AE在配额达成时都有相同的投篮?首先,它允许我们保留更多的代表。当有更多的人在做自己的人数或者接近的时候,我们的AE就会减少。更换经过培训的代表是非常非常昂贵的,在某些情况下,代价可能达到50万到100万美元。第二个原因是当你在所有的AE中平衡生产力,所有的生产都是相似的,这只是一个更健康的生意。你有更少的火灾担心熄火,你有更少的热点,你必须管理。”

(您可以阅读亚当的关于Quotable的文章的其余部分。)

通过创建真正平衡的地区,您可以调动整个销售团队,实现公司的目标。你平衡了从经理到经理的负担,包含失败的风险。也许最重要的是,你给每一个代表一枪成功。你是否已经开始得到那种温暖和模糊的感觉,只是想帮助你的代表取得成功?