定义用于聚合值的汇总列
汇总列帮助用户通过监控关键业务指标来获取数据见解。 汇总列包含一个根据与指定行相关的行计算所得的聚合值。 这包括常规表和活动表,如电子邮件和约会。
在更复杂的方案中,可以通过行层次结构聚合数据。 作为一名管理员或定制员,您可以通过使用 Power Apps 中的自定义工具来定义汇总列,而无需编写代码。
汇总列的优点和功能
汇总列的优点和功能包括:
- 可视编辑会更加容易。 通过使用列编辑器创建汇总列,就像您创建常规列一样。
- 聚合函数的广泛选择。 可以使用以下函数聚合数据:
SUM
、COUNT
、MIN
、MAX
和AVG
。 - 对聚合的完全筛选器支持。 在设置多个条件时,可为源表或相关表设置各种筛选器。
- 与用户界面的无缝集成。 可以将汇总列包含在窗体、视图、图表和报表中。
- 汇总列是解决方案组件。 您可以轻松地在环境之间将汇总列作为组件进行传输,并在解决方案中分发。
- 汇总列和计算列相辅相成。 可以使用汇总列作为计算列的一部分,反之亦然。
- 您可以配置汇总列来使用自定义控件。
汇总列的示例包括:
- 某位客户的开启商机的总预计收入
- 层次结构中所有客户的开启商机的总预计收入
- 商机(包括子商机)的总预计收入
- 由市场活动生成的合格潜在客户的总预计收入
- 层次结构中所有客户的优先级较高的开启案例的数量
- 客户所有优先级较高的开启案例的最早创建时间
每个汇总列创建带有 <columnname>_date
和 <columnname>_state
后缀模式的两个附加列。 _date
列包含日期/时间数据,_state
列包含整数数据。 _state
列有以下值:
值 | 州/省/市/自治区 | 描述 |
---|---|---|
0 | NotCalculated | 尚未计算列值。 |
1 | 计算 | 根据 _date 列中上次的更新时间计算列值。 |
2 | OverflowError | 列值计算导致溢出错误。 |
3 | OtherError | 列值计算失败,因为发生内部错误。 运行以下计算作业将有可能修复上述错误。 |
4 | RetryLimitExceeded | 列值计算失败,由于并行的最大数量与锁定冲突,导致超出了计算的最大重试次数。 |
5 | HierarchicalRecursionLimitReached | 列值计算失败,因为达到了计算限制的最大层次结构深度。 |
6 | LoopDetected | 列值计算失败,因为在行的层次结构中检测到了递归循环。 |
7 | CurrencyMissing | 列值计算失败,因为缺少所需的字段货币。 |
汇总计算
汇总由在后台异步运行的计划系统作业进行计算。 必须以管理员身份查看和管理汇总作业。
查看汇总作业
若要查看汇总作业:
- 登录 Power Apps,然后选择所需的环境。
- 选择设置(齿轮)> 高级设置。
- 选择设置 > 系统作业。
- 在视图选择器中,选择定期系统作业。
- 若要快速找到相关作业,可以通过系统作业类型进行筛选:批量计算汇总字段或计算汇总字段。
批量计算汇总字段
大规模计算汇总字段是一个定期作业,会为每一个汇总列创建。 它在创建或更新汇总列之后运行一次。 该作业在所有现有包含此列的记录中重新计算指定的汇总列值。 默认情况下,在创建或更新列后,该作业将运行 12 小时。 在修改了列时,该作业重置为在更新后 12 小时再次运行。 需要延迟 12 小时以确保在环境的非运营时间批量计算汇总字段运行。
我们建议管理员在创建或修改汇总列后,调整批量计算汇总字段作业的开始时间,以这样一种方式使它在非运营时间运行。 例如,在午夜运行作业以保证高效处理汇总列。
请注意,如果出现汇总列从未更新的情况,大规模计算汇总字段作业将不会针对该列再次运行,直到 10 年后。 此行为是特意这样设计的。 当与汇总字段关联的基础列中没有任何更新时,没有任何理由更频繁地运行此作业。
计算汇总列
计算汇总列是一个定期作业,进行指定表的现有行中所有汇总列的增量计算。 每个表只有一个计算汇总字段作业。 增量计算意味着在上一次批量计算汇总字段作业完成执行后,计算汇总字段作业才处理创建、更新或删除计算汇总字段作业流程的行。 默认最小定期设置为一小时。 在删除上一个汇总列时,创建并删除表上的第一个汇总列,并自动创建该作业。
联机重新计算选项
窗体上的汇总列显示计算器图像、汇总值和上次计算时间。 若要重新计算,请选择计算器图像,然后选择显示的重新计算按钮。
使用联机重计算选项时要注意(在表单中手动刷新):
- 对于您要求刷新的表和源行,您必须分别具有写入特权和写入访问权限。 例如,如果您要计算客户开放商机的预计收入,您无需拥有商机表的写入特权,只要客户表的即可。
- 此选项仅在联机模式中可用。 在脱机工作时,无法使用此选项。
- 在汇总刷新期间,最大行数限制为 50,000 个行。 万一遇到分层汇总,这适用于跨层次结构的相关行。 如果超过限制,将看到错误消息:无法联机执行计算,因为已达到 50,000 条相关行的计算限制。 当由系统作业自动重新计算汇总时,此限制不适用。
- 对于源行,最大层次结构深度限制为 10。 如果超过限制,将看到错误消息:无法联机执行计算,因为已达到 10 个源行的层次结构深度限制。 当由系统作业自动重新计算汇总时,此限制不适用。
修改汇总作业定期模式
作为系统管理员,则可修改汇总作业的定期模式、延迟、暂停或恢复汇总作业。 但是,您无法取消或删除汇总作业。
若要暂停、延迟、继续或修改定期模式,必须查看系统作业。 详细信息查看汇总作业
在导航栏上,选择操作并选择所需操作。
对于批量计算汇总字段作业,可选的有:继续、推迟和暂停。
对于计算汇总字段作业,可选项为:修改定期、继续、推迟和暂停。
示例
让我们看一下多个汇总列示例。 我们将使用(或不使用)层次结构从相关行中聚合行数据。 我们还将从相关活动和通过 ActivityParty 表与行间接相关的活动中聚合行数据。 在每个示例中,我们通过使用列编辑器来定义汇总列。 若要打开列编辑器,打开方案资源管理器,展开组件 > 表。 选择所需表并选择列。 选择新建。 在编辑器中,为列提供所需的信息,包括列类型和数据类型。 在选择数据类型后,在列类型中,选择汇总。 数据类型包含小数或整数、货币和日期/时间。 选择列类型旁边的编辑按钮。 这将进入汇总列定义编辑器。 汇总列定义包括三个组成部分:源表、相关表和聚合**。
在源表部分,您指定定义汇总列的表,以及是否通过层次结构进行聚合。 您可以添加带有多个条件的添加筛选器来指定想要用于汇总的层次结构中的行。
在相关表部分,您指定进行聚合的表。 当您选择汇总源表的层次结构时,此选项可选。 您可以添加带有多个条件的筛选器来指定计算中要使用的相关行。 例如,您包括来自于开启商机的大于 1,000 美元年收入的收入。
在聚合部分,您指定要计算的度量。 您可以选择可用的聚合函数,例如 SUM、COUNT、MIN、MAX 或 AVG。
在相关行中聚合行数据
在此示例中,不使用层次结构。 在相关开启商机中计算客户的总预计收入。
在层级结构的子行中聚合行数据
在此示例中,我们在结构层次中计算商机(包括子商机)的总预计收入。
在层级结构的相关行中聚合行数据
在此示例中,我们在层次结构中计算所有客户的开启商机的总预计收入。
在所有相关活动中聚合行数据
在此示例中,我们计算出所有与客户相关活动的总花费时间和账单。 这可以包括花费在电话、约会或自定义活动上的时间。
在较早版本中,可以为电话联络、传真或约会之类的单独活动定义汇总列。 但是为了达到下面例子中的结果,必须使用计算列来汇总数据。 现在,可以通过为活动表定义汇总列来一步完成所有事情。
通过活动方表,从所有相关活动和间接相关活动中聚合行数据
在此示例中,我们计数发送给客户的总电子邮件数,客户将在电子邮件的“至收件人”行或“抄送收件人”行上列出。 这是通过为汇总列定义中的活动方表指定筛选器中的参与类型来完成的。 如果您不使用筛选,计算中会使用所有可用的活动参与类型。
有关特定活动可用活动方表和参与类型的详细信息,请参阅 ActivityParty 表。
使用 AVG 运算符,从相关行中聚合行数据
在此示例中,我们计算得出所有与客户相关商机的平均预计收入。
以下示例演示了如何从客户层次结构的相关商机中计算平均预计收入。 层次结构中的每个级别都可以看到平均预计收入。
汇总列注意事项
使用汇总列时请注意某些条件和限制:
- 您最多可以为环境定义 200 个汇总列,最多为每个表定义 50 个汇总列。 每个环境的当前默认值和之前的最大值为 100,每个表为 10。 详细信息:定义环境或表中的最大汇总列数
- 通过汇总列更新无法触发工作流。
- 工作流等待条件无法使用汇总列。
- 不支持汇总列之上的汇总。
- 汇总无法引用使用其他计算列的计算列,即使其他计算列的所有列在当前表中。
- 如果汇总列使用依赖于有时限函数(
Now()
和IsUTCToday()
)的公式字段,汇总字段不会自动更新。 必须使用联机重新计算选项(在窗体上手动刷新)或重新计算按钮来计算最新的汇总列值。 - 汇总只能将筛选器应用到源表或相关表、简单列或非复杂计算列。
- 只能通过具有 1:N 关系的相关表执行汇总。 无法通过 N:N 关系执行汇总。
- 无法通过活动表或活动方表的 1:N 关系执行汇总。
- 业务规则、工作流或计算列始终使用汇总列上一次的计算值。
- 在系统用户上下文中聚合汇总列。 所有用户都可以看到相同的汇总列值。 通过限制可以访问汇总列的人员,您可以控制具有列级安全性 (FLS) 的汇总列可见性。 详细信息请参阅用于控制访问的列级安全性。
定义环境或表中的最大汇总列数
您最多可以为环境定义 200 个汇总列,最多为每个表定义 50 个汇总列。 每个环境的当前默认值和之前的最大值为 100,每个表为 10。
若要增加最大值,请按照以下步骤操作:
- 转到 Power Apps (make.powerapps.com),在左侧导航窗格上选择表,然后打开组织表。
- 选择 n 更多列表,然后在搜索框中键入 maxr。 选择 MaxRollupFieldsPerOrg 和 MaxRollupFieldsPerEntity 列,然后选择保存。
- 更改所需的 MaxRollupFieldsPerOrg(最多 200 个)和 MaxRollupFieldsPerEntity(最多 50 个)的值。
重要
如果环境的汇总列数超过 100 个,可能会导致汇总列的性能降低,并且存储消耗增加。
精确舍入
如果聚合列的精度大于汇总列的精度,则在执行聚合之前,聚合列精度向下舍入到汇总列的精度。 为了说明此行为,让我们看一下具体的例子。 让我们假定客户表上的汇总列具有两位小数的精度,该列用于计算相关商机的总预计收入。 商机 商机表上的收入列是四位小数精度的聚合列。 在我们的例子中,帐户有两个相关的商机。 预计收入的聚合总和计算如下所示:
- 预计 第一个商机的收入:$1000.0041
- 预计 第二个商机的收入:$2000.0044
- 预计收入总和 收入:$1000.00 + $2000.00 = $3000.00
如您所见,在执行聚合之前,聚合列的精度被舍入到两位小数。
与关联网格不同的行为
某些表窗体,如客户或联系人,包含现成的关联网格。 例如,客户窗体包含联系人、案例、商机和其他网格。 在客户窗体中显示的某些行直接关联到客户行;其他行通过与其他行的关系间接关联到客户行。 相比之下,汇总列聚合只使用在汇总列定义中明确定义的直接关系。 不考虑其他关系。 为了说明这种行为上的差异,让我们看一下以下示例。
- 帐户 A1 有一个主要联系人 P1。 案例 C1 与客户 A1 关联(C1.Customer 列 = A1),并且案例 C2 与联系人 P1 关联(C2.Customer 列 = P1)。
- A1 行的客户窗体中的案例网格具有两个案例:C1 和 C2。
- 客户表上的汇总列,称为“案例总数”,用于统计与客户关联的案例的数量。
- 在客户汇总列定义中,我们指定与客户具有客户关系的案例。 在聚合之后,案例总数等于 1(案例 C1)。 案例 C2 未包含在总计中,因为它与联系人(而不是客户)直接相关,并且不能在客户汇总列定义中显式定义。 因此,汇总操作返回的案例总数与在案例网格中显示的案例数量不匹配。