了解画布应用中的委派

Power Apps 包括一组功能强大的函数,可用于筛选、排序和整理画布应用中的数据表:FilterSortAddColumns 函数等。 可以使用这些函数,让用户重点访问其所需的信息。 对于具有数据库背景的用户来说,使用这些函数相当于编写数据库查询。

若要生成有效的应用,关键是尽量减少必须转到设备的数据量。 也许在成千上万条记录中,只需要少量记录;也许单个聚合值就可以代表数千条记录。 也许只有第一组记录可以检索,而其余记录是用户在需要更多记录的情况下通过笔势输入的。 进行重点访问可以大幅缩减应用所需的处理能力、内存和网络带宽,提高用户的响应速度,即使使用的是通过移动电话网络连接的手机。

若要通过 Power Apps 公式来尽量减少通过网络传输的数据,则需使用 委派。 简而言之,Power Apps 会将数据的处理委派给数据源,而不是将数据移到应用进行本地处理。

但这会很复杂,这也是写作本文的原因,因为并非所有能够在 Power Apps 公式中表示的内容都可以委派给所有数据源。 Power Apps 语言与 Excel 的公式语言类似,旨在让用户能够完整且即时地访问内存中的整个工作簿,并且提供各种数字和文本操作函数。 因此,Power Apps 语言要比大多数数据源能够支持的语言(包括强大的数据库引擎,例如 SQL Server)丰富得多。

处理大型数据集需要使用数据源和能够委派的公式。 若要让应用始终运行良好,同时要确保用户能够访问所需的全部信息,这是唯一的方式。 请注意,标识不可能委派的位置的委派警告。 如果处理的是小型数据集(不到 500 条记录),则可使用任何数据源和公式,因为当不能委派公式时,应用可以在本地处理数据。

备注

以前,委派警告在 Power Apps 中标记为“蓝点”建议,但此后,委派建议已经重新分类为警告。 如果数据源中的数据超过 500 条记录,则不能委派函数,Power Apps 可能不能检索所有数据,应用可能会得到错误的结果。 委派警告可帮助管理应用,使其得到正确的结果。

可委派的数据源

仅某些表格数据源支持委派。 如果数据源支持委派,其连接器文档会概括介绍该支持。 例如,这些表格数据源是最常用的,它们支持委派:

导入的 Excel 工作簿(使用 向应用添加静态数据 数据源)、集合以及存储在上下文变量中的表不需要委派。 所有此类数据都已在内存中,可以应用完整的 Power Apps 语言。

委派函数

下一步是仅使用那些可以委派的公式。 下面提供的是可以委派的公式元素。 但是,数据源各不相同,并非所有数据源都支持所有这些元素。 请在具体公式中查看委派警告。

这些列表会随时间而变化。 我们将努力为更多具有委派功能的函数和运算符提供支持。

Filter 函数

FilterSearchLookUp 可以委派。

FilterLookUp 函数中,可以对表的列使用以下项来选择相应的记录:

  • And(包括 &&)、Or(包括 ||)、Not(包括 !
  • In

    备注

    In is only delegated for columns on the base data source. 例如,如果数据源是 客户 表,则 Filter(Accounts, Name in ["name1", "name2"]) 委派给数据源进行评估。 但是,Filter(Accounts, PrimaryContact.Fullname in ["name1", "name2"]) 不会委派,因为 全名 列与 客户 列位于不同的表 (PrimaryContact) 上。 表达式在本地计算。

  • =<>>=<=><
  • +-
  • TrimEnds
  • IsBlank
  • StartsWithEndsWith
  • 所有记录中均相同的常量值,如控件属性和全局变量和上下文变量

还可使用公式中对所有记录的求值结果都是一个常量值的某些部分。 例如,Left( Language(), 2 )Date( 2019, 3, 31 )Today() 不依赖于记录的任何列,因此所有记录都会返回同一值。 这些值可以作为常数发送到数据源,不会阻止委派。

以上列表不包括这些值得注意的项:

排序函数

SortSortByColumns 可以委派。

Sort 中,公式只能是单个列的名称,不能包括其他运算符或函数。

聚合函数

可以委派 SumAverageMinMax。 目前仅有限数量的数据源支持此委派,请查看委派列表了解详细信息。

备注

如果没有委派表达式,其只能处理从数据源检索到的前 500 条记录(最多可配置 2000 条,参见更改限制),而不是委派处理数据源中的所有数据。

无法委派 CountRowsCountACount 等计数函数。

无法委派 StdevPVarP 等其他聚合函数。

表构形函数

AddColumnsDropColumnsRenameColumnsShowColumns 部分支持委派。 其参数中的公式可以委派。 不过,这些函数的输出有非委派记录限制。

如本例所示,开发者通常使用 AddColumnsLookUp 将一个表中的信息合并到另一个表中,用数据库术语来说,通常就是指“联接”:

AddColumns( Products, 
    "Supplier Name", 
    LookUp( Suppliers, Suppliers.ID = Product.SupplierID ).Name 
)

即使 产品供应商 是可委派的数据源且 LookUp 是可委派的函数,AddColumns 函数的输出也不可委派。 整个公式的结果仅限于 产品 数据源的第一部分。 由于 LookUp 函数及其数据源可以委派,因此可能会在数据源的任何位置找到 供应商 的匹配项,即使该数据源很大。

如果以这种方式使用 AddColumnsLookUp 必须分别对 产品 中每个第一条记录的数据源单独进行调用,这会引起大量的网络震颤。 如果 供应商 足够小并且不经常更改,则可以在 OnStart 中调用 Collect 函数来在您的应用启动时在应用中缓存数据源。 或者,您可以重组应用,以便仅在用户要求时才拉入相关记录。

非可委派函数

所有其他函数都不支持委派,包括以下重要函数:

非可委派限制

将在本地处理不可委派的公式。 这样就可以使用整套 Power Apps 公式语言。 但是也有代价:所有数据都必须先转到设备上,这可能需要通过网络检索大量的数据。 这可能需要一段时间,让人以为应用很慢或者可能已崩溃。

为了避免这种情况,Power Apps 对能够在本地处理的数据量进行了限制:默认情况下为 500 条记录。 我们选择此数字是为了让您仍然能够对小型数据集进行完整的访问,同时让您虽然只能看到部分结果,也能练习对大型数据集的使用。

显然,使用此工具时必须小心,因为这可能会让用户感到困惑。 例如,假设有一个 Filter 函数,其选择公式不能委派,需要对有一百万条记录的数据源应用该函数。 由于本地进行筛选,因此仅扫描了前 500 条记录。 如果所需记录是第 501 或第 500,001 个记录,则 Filter 不会考虑或返回该记录。

聚合函数还可能会造成混淆。 对上述包含百万记录的数据源的一个列运行 Average 函数。 在这种情况下,无法委派 平均值,因为未委派表达式(参见前面的说明),所以只能取前 500 条记录的平均值。 如果不小心,可能会将应用用户基于部分数据得出的答案误认为是基于完整数据得出的答案。

更改限制

500 是默认的记录数,但可为整个应用更改此数字:

  1. 选择 设置
  2. 常规 下,将 数据行限制 设置从 1 更改为 2000。

在某些情况下,您会发现 2,000(或者 1,000 或 1,500)即可满足方案的需求。 可以谨慎增大此数字以适应您的方案。 增大此数字,应用的性能可能会降低,特别是对于具有大量列的宽表。 尽管如此,仍是委派越多越好。

要确保应用可以扩展为大型数据集,请将此设置降低为 1。 现在,任何无法委派的内容将会返回一条记录,在测试应用时应该很容易被检测到。 这有助于在尝试将概念证明应用用于生产时防止意外发生。

委派警告

为使您更轻松了解可委派和不可委派的内容,Power Apps 会在您创建包含不可委派内容的公式时提供警告(黄色三角形)。

委派警告仅显示在针对可委派数据源进行运算的公式上。 如果没有看到警告,但您认为公式未进行适当的委派,请对照本主题前面部分的可委派数据源列表检查数据源的类型。

示例

对于此示例,将基于名为 [dbo].[Fruit] 的 SQL Server 表自动生成一个三屏应用。 有关如何生成应用的信息,可对 SQL Server 应用 Dataverse 相关主题中介绍的准则。

三屏应用。

库的 Items 属性设置为包含 SortByColumnsSearch 函数的公式,这两个函数都可以委派。

在搜索框中,键入 “Apple”

当应用与 SQL Server 进行通信来处理搜索请求时,一串移动的点会短暂出现在屏幕顶部附近。 将显示符合搜索条件的所有记录,即使数据源包含数百万条记录。

搜索文本输入控件。

搜索结果包括 “Apples”“Crab apples”“Pineapple”,因为 Search 函数会查找文本列中的所有位置。 如果只想查找在水果名称的开头包含搜索词的记录,可以使用另一个可委派函数 Filter,并添加更复杂的搜索词。 (为简单起见,请删除 SortByColumns 调用。)

删除 SortByColumns 调用。

新的结果包括 “Apples”,而不包括 “Crab apples”“Pineapple”。 但是,一个黄色的三角形将出现在图库旁边(如果左侧导航栏显示了缩略图,它还会出现在屏幕缩略图中),并且公式的一部分下方出现蓝色波浪线。 其中每个元素都表示一条警告。 如果将光标悬停在图库旁边的黄色三角形上,将显示此消息:

将光标悬停在委派警告上。

SQL Server 是可委派数据源,Filter 是可委派函数,但不能将 MidLen 委派到任何数据源。

但它确起作用了,不是吗? 嗯,在某种程度上可以这么说。 因此显示了这个警告,而不是红色波浪线。

  • 如果表包含 500 条以下的记录,该公式运算将会非常顺利。 所有记录都会转到设备,并在本地应用 Filter
  • 如果表包含超过 500 条记录,该公式不会返回第 501 条或以后的记录,即使它与条件匹配。

另请参阅

使用不可委派函数和不适当的数据行限制对性能的影响
使用委派的性能提示和最佳做法

备注

您能告诉我们您的文档语言首选项吗? 进行简短调查。(请注意,此调查是英文版调查)

此调查大约需要七分钟。 不会收集个人数据(隐私声明)。