定义计算列以自动化计算
使用计算列以将您的业务流程中使用的手动计算自动化。
例如,销售员可能想知道商机的加权收入,这基于商机与概率乘积得到的预计收入。 或者,如果订单大于 500 美元,他们想要自动使用一个折扣。 计算列可以包含简单数学运算或条件运算(如大于或 if - else 等)产生的值。 您可以使用 Power Apps 完成这些操作,并且不需要编写代码。
功能
- 计算列使用来自于当前表或相关父表的列。
- 在条件部分和操作部分的当前表和相关父表列上表达式支持可用。 内置函数包括:
ADDHOURS、ADDDAYS、ADDWEEKS、ADDMONTHS、ADDYEARS、SUBTRACTHOURS、 SUBTRACTDAYS、SUBTRACTWEEKS、SUBTRACTMONTHS、SUBTRACTYEARS、DIFFINDAYS、 DIFFINHOURS、DIFFINMINUTES、DIFFINMONTHS、DIFFINWEEKS、DIFFINYEARS、CONCAT、TRIMLEFT 和 TRIMRIGHT。 详细信息:函数语法 - 丰富的条件支持提供分支和多个条件。 逻辑操作包括 AND 和 OR 运算符。
- 在操作部分,可视编辑功能包括现代 UI 和 intellisense。
- 计算列与窗体、视图、图表和报表的无缝集成实时可用。
- 您可以配置计算列来使用自定义控件。
方案
- 加权收入:预计收入乘以概率
- 净值:资产减去给定客户的负债
- 劳动力成本:保证工资达 40 个小时,加上额外的加班
- 联系电话:基于客户或联系人的商机电话号码
- 潜在顾客评分:提供对给定潜在顾客质量见解的单一列
- 跟进:通过基于优先级的指定天数跟进活动
重要
若要创建一个计算列,必须对字段安全配置文件表有写入特权。 如果计算列在计算中使用安全列,还应该考虑保护计算列,以防止没有足够权限的用户访问数据。 如果正在创建在计算中使用安全列的计算列,计算列编辑器将给您一个警告并建议您保护计算列。 详细信息:用于控制访问的列级安全性。
支持计算的列类型
- 文本
- 单选
- 是/否
- 整数
- 十进制数
- 货币
- 日期时间
创建计算列
登录到 Power Apps
在左侧导航窗格中选择解决方案。 如果项目不在侧面板窗格中,请选择 …更多,然后选择所需项目。
打开具有所需表的非托管解决方案。
选择列区域,然后在命令栏上选择新建列。
为列提供信息,包括显示名称、名称和数据类型。
如果数据类型是支持计算的列类型之一,您可以通过从行为下拉列表中选择已计算,使该列成为计算列。
保存和编辑链接将显示在下拉列表下。 将其选中。
此时会保存新列。 在列列表中,打开您在上一步中保存的列。
在编辑列窗格上,在行为下拉列表下,选择编辑。
在计算列定义编辑器中,注意已创建了新计算列,但未设置公式。 计算列定义包括两个部分:条件和操作。
- 在条件部分中,选择添加条件以指定表、列、运算符、类型和值。 在表的下拉框中,您可以选择当前表或相关表。 在列下拉框中,您可以选择表的所有可用列。 根据所选运算符,您可能需要提供类型和值。 您可以使用
AND
或OR
运算符指定多个条件。 指定条件完成后,选择复选标记 。 - 指定条件后,在操作部分中,选择添加操作以为计算列提供公式。 指定操作完成后,选择复选标记 。
备注
在您的“操作”内,您可以使用查找行中的数据。 您必须首先选择“查找”列,然后输入一个期间。 之后,您可以选择可用于相关表的一个列。 例如,如果是
<LookupFieldName>.<RelatedFieldName>
,可以选择:ParentAccountId.AccountNumber
。注意,如果已访问列中包含敏感数据,列级别安全性将会在相关表中被忽略,因此,我们还建议您保护计算列。
- 在条件部分中,选择添加条件以指定表、列、运算符、类型和值。 在表的下拉框中,您可以选择当前表或相关表。 在列下拉框中,您可以选择表的所有可用列。 根据所选运算符,您可能需要提供类型和值。 您可以使用
在计算列定义编辑器中,选择保存并关闭。
示例
让我们更详细地看一下计算列示例。
商机的加权收入
在此示例中,我们使用商机表的列根据商机概率来计算加权收入。 在商机表的列编辑器中,我们创建一个名为加权收入的列并指定列类型为计算和数据类型为货币。
在计算列定义编辑器中的条件部分,我们指定商机状态 = 打开。 在操作中,根据商机预计收入与商机概率乘积公式来计算加权收入。 以下屏幕截图显示如何分步定义加权收入计算列。
设置商机条件:
提供加权收入公式:
总共:
商机的跟进日期
在此示例中,当跟进商机时,我们使用商机的最初潜在顾客列来计算合适的日期。
在商机表的列编辑器中,我们创建一个名为跟进日期的列并指定类型为计算和数据类型为日期和时间。
在计算列定义编辑器的条件部分,我们指定两个条件:潜在顾客的购买期限和估计值。
在操作中,我们提供两个公式:
- 对眼前的商机跟进一周
- 对不可能立刻出现的商机跟进一个月。
以下屏幕截图显示如何分步定义跟进日期计算列。
设置最初潜在顾客的两个条件:
提供跟进一周的公式:
提供跟进一月的公式:
总共:
行创建的天数
在此示例中,我们使用 DIFFINDAYS 函数计算从行创建到现在的天数差。
创建名为计算天数差的新整数列。
提供计算天数差的公式
总共:
函数语法
以下表包含计算列的操作部分所提供的函数的语法的信息。
提示
将函数名称指定为大写字母。
函数语法 | 说明 | 返回类型 |
---|---|---|
ADDDAYS(整数、日期和时间) | 返回与给定日期和时间等同的新日期和时间,以及指定的天数。 | 日期和时间 |
ADDHOURS(整数、日期和时间) | 返回与给定日期和时间等同的新日期和时间,以及指定的小时数。 | 日期和时间 |
ADDMONTHS(整数、日期和时间) | 返回与给定日期和时间等同的新日期和时间,以及指定的月数。 | 日期和时间 |
ADDWEEKS(整数、日期和时间) | 返回与给定日期和时间等同的新日期和时间,以及指定的周数。 | 日期和时间 |
ADDYEARS(整数、日期和时间) | 返回与给定日期和时间等同的新日期和时间,以及指定的年数。 | 日期和时间 |
SUBTRACTDAYS(整数、日期和时间) | 返回与给定日期和时间等同的新日期和时间,减去指定的天数。 | 日期和时间 |
SUBTRACTHOURS(整数、日期和时间) | 返回与给定日期和时间等同的新日期和时间,减去指定的小时数。 | 日期和时间 |
SUBTRACTMONTHS(整数、日期和时间) | 返回与给定日期和时间等同的新日期和时间,减去指定的月数。 | 日期和时间 |
SUBTRACTWEEKS(整数、日期和时间) | 返回与给定日期和时间等同的新日期和时间,减去指定的周数。 | 日期和时间 |
SUBTRACTYEARS(整数、日期和时间) | 返回与给定日期和时间等同的新日期和时间,减去指定的年数。 | 日期和时间 |
DIFFINDAYS(日期和时间,日期和时间) | 返回两个日期和时间列之间的天数差。 如果两个日期和时间为同一天,此差为零。 | 整数 |
DIFFINHOURS(日期和时间,日期和时间) | 返回两个日期和时间列之间的小时差。 | 整数 |
DIFFINMINUTES(日期和时间,日期和时间) | 返回两个日期和时间列之间的分钟差。 | 整数 |
DIFFINMONTHS(日期和时间,日期和时间) | 返回两个日期和时间列之间的月数差。 如果两个日期和时间为同一个月,此差为零。 | 整数 |
DIFFINWEEKS(日期和时间,日期和时间) | 返回两个日期和时间列之间的周数差。 如果两个日期和时间为同一周,此差为零。 | 整数 |
DIFFINYEARS(日期和时间,日期和时间) | 返回两个日期和时间列之间的年数差。 如果两个日期和时间为同一年,此差为零。 | 整数 |
CONCAT(单行文本,单行文本… 单行文本) | 返回连接两个或多个字符串结果的字符串。 | 字符串 |
TRIMLEFT(单行文本、整数) | 返回包含一个含指定字符串,但第一字符不是 N 的字符串。 | 字符串 |
TRIMRIGHT(单行文本、整数) | 返回一个包含指定字符串,但最后一个字符不是 N 的字符串。 | String |
备注
所有 DIFF 都函数需要第一个日期和时间列和第二个日期和时间列具有相同的行为:用户当地时间、仅限日期或时区无关时区独立。 如果第二个列的行为与第一个列的行为不匹配,将显示错误消息,指示第二个列不能用于当前函数中。 详细信息:日期及时间列的行为和格式。
备注
不能输入日期作为计算列的日期值,例如 01/01/2015。 只能使用其他“日期/时间”列设置或比较日期和日期时间值。
在CONCAT函数中,可将文字字符串用作单行文本、包含单行文本的表列或者两者的组合。 例如:CONCAT(FirstName 或 LastName“是经理。”)。 如果文字字符串包含引号,请在前面每个引号前面加上反斜线 (\) 转义字符,例如:This string contains the \"quotation marks.\"
这可以确保不会将字符串中的引号看作分隔字符串的特殊字符。
以下示例显示如何使用TRIMLEFT和TRIMRIGHT函数: 他们包含由TRIMLEFT和TRIMRIGHT函数返回的初始字符串和结果字符串:
TRIMLEFT("RXX10-3456789",3),返回字符串 10-3456789
TRIMRIGHT("20-3456789RXX",3),返回字符串 20-3456789
注意事项
在使用计算列时,您应了解的某些条件和限制:
保存的查询、图表和可视化项最多可以有 50 个唯一的计算列。
在 Outlook 客户端脱机模式中,磁贴视图或表主窗体中不显示计算列值。
链接的计算列的最大数量是 5。
计算列无法引用本身或具有循环链。
如果您在多个条件条款中更改一个条件运算符,所有条件操作符将更新至该条件。 例如,在从句
IF (x > 50) OR (y ==10) OR (z < 5)
中,如果您将OR
运算符更改为AND
运算符,那么从句中的所有OR
运算符将变为AND
运算符。您可以通过查找父表的列来访问父级列,如
<LookupFieldName>.<FieldName>
。 多表查找列(例如客户,可以是客户或联系人)无法执行此操作。 但是,一些表有特定表的单个查找列,如ParentAccountid.
<FieldName>
或ParentContactid.
<FieldName>
。以下情况禁用排序:
- 包含父行列的计算列。
- 计算列包含一个逻辑列(如地址列)。
- 包含另一个计算列的计算列。
- 包含
Now()
函数的计算列。
计算列只可以跨两个表。
- 计算列可以包含来自另一个表(跨越两个表 – 当前表和父行)的列。
- 计算列不能包含另一个表中的计算列,该列还包含不同表中的另一个列(跨越三个表):
(当前表)计算列 ←(父行)计算列 1 ←(父行)计算列 2。
您无法触发计算列上的工作流或插件。
您无法将现有的简单列更改为计算列。 如果您的当前应用程序正在使用 JavaScript 或插件来计算列,在未创建新列的情况下,您无法使用计算列功能。
未对计算列触发重复检测规则。
汇总无法引用使用其他计算列的计算列,即使其他计算列的所有列在当前表中。
当货币计算列依赖于相关表的货币列时,系统使用相应的基础货币列值执行计算。 这是因为不同的表记录之间的汇率值和货币值可能不同。 例如,考虑
Opportunity
表上的计算列 -Account Revenue
,并且考虑Account Revenue
依赖于Account
表上的Annual Revenue
货币列,则Account Revenue
的计算如下:'Account Revenue' = ['Annual Revenue (Base)' * 'Exchange Rate on Opportunity table record']
或'Account Revenue' = [('Annual Revenue' / 'Exchange Rate on Account table record') * 'Exchange Rate on Opportunity table record']