Общие сведения о делегированииUnderstand delegation

PowerApps поддерживает целый ряд эффективных и полезных функций для фильтрации, сортировки и форматирования таблиц с данными, такие как Filter, Sort, AddColumns и многие другие.PowerApps includes a powerful set of functions for filtering, sorting, and shaping tables of data: Filter, Sort, and AddColumns functions to name just a few. Эти функции помогают обеспечить пользователям доступ именно к той информации, которая им необходима.With these functions, you can provide your users with focused access to the information they need. Для тех, у кого есть опыт работы с базами данных, использование этих функций можно сравнить с составлением запросов к базе.For those with a database background, using these functions is the equivalent of writing a database query.

Залогом создания эффективных приложений является минимизация объема данных, которые необходимо загружать на устройства.The key to building efficient apps is to minimize the amount of data that needs to be brought to your device. Иногда необходимы лишь несколько из миллионов записей или одно обобщенное (статистическое) значение, которое характеризует тысячи элементов в базе.Perhaps only a handful of records from a sea of millions are needed, or a single aggregate value can represent thousands of records. Кроме того, возможно, достаточно будет извлечь лишь первый набор записей, а остальные можно загружать по требованию пользователя.Or perhaps only the first set of records can be retrieved, and the rest brought in as the user gestures that they want more. Учитывая эти моменты, можно существенно сократить потребность в процессорной мощности, памяти и полосе пропускания, необходимых приложению, что, в свою очередь, ускорит его реагирование на действия пользователей, причем даже на телефонах, подключенных к Интернету через сотовый канал связи.Being focused can dramatically reduce the processing power, memory, and network bandwidth needed by your app, resulting in snappier response times for your users, even on phones connected via a cellular network.

Делегирование позволяет минимизировать объемы данных, передаваемые через сеть, не жертвуя при этом функциональными возможностями формул PowerApps.Delegation is where the expressiveness of PowerApps formulas meets the need to minimize data moving over the network. Вкратце делегирование означает передачу службой PowerApps обязанностей по обработке данных источнику вместо переноса данных в приложение для локальной обработки.In short, it means that PowerApps will delegate the processing of data to the data source, rather than moving the data to the app for processing locally.

Такая возможность существует не всегда, и, как объясняется в этой статье, не все функции и возможности формул PowerApps можно делегировать каждому источнику данных.Where this becomes complicated, and the reason this article exists, is because not everything that can be expressed in a PowerApps formula can be delegated to every data source. Язык PowerApps аналогичен языку формул Excel и предполагает полный и мгновенный доступ ко всему содержимому книги в памяти, включая широкий набор функций для работы с числами и текстом.The PowerApps language mimics Excel's formula language, designed with complete and instant access to a full workbook in memory, with a wide variety of numerical and text manipulation functions. Благодаря этому возможности языка PowerApps намного шире, чем те, что поддерживаются большинством источников данных, включая такие мощные и функциональные СУБД, как SQL Server.As a result, the PowerApps language is far richer than most data sources can support, including powerful database engines such as SQL Server.

Для работы с большими наборами данных необходимо использовать источники и формулы, которые можно делегировать.Working with large data sets requires using data sources and formulas that can be delegated. Только так можно сохранить работоспособность приложения на высоком уровне и обеспечить пользователям доступ ко всей необходимой им информации.It is the only way to keep your app performing well and ensure users can access all the information they need. Обращайте внимание на обозначенные синей точкой рекомендации, которые появляются в ситуации, когда делегирование невозможно.Take heed of blue-dot suggestions that flag places where delegation is not possible. Если вы работаете с небольшими наборами данных (до 500 записей), можно использовать любые источники данных и формулы, так как обработку можно выполнять локально даже в том случае, если формулу нельзя делегировать.If you're working with small data sets (less than 500 records), you can use any data source and formula as processing can be done locally if the formula cannot be delegated.

Делегируемые источники данныхDelegable data sources

Полный список источников данных, поддерживающих делегирование (с описанием возможных ограничений), см. в этом списке.See the delegation list for the full list of which data sources support delegation and to what extent.

Мы постоянно расширяем поддержку делегирования для существующих источников, а также добавляем новые.We are continuing to add delegation support to existing data sources, as well as add more data sources.

Импортированные книги Excel (для которых используется источник Add static data to your app — добавление статических данных в приложение), коллекции и таблицы, хранимые в переменных контекста, не требуют делегирования.Imported Excel workbooks (using the "Add static data to your app" data source), collections, and tables stored in context variables don't require delegation. Все эти данные уже находятся в памяти и поддерживают все функциональные возможности языка PowerApps.All of this data is already in memory, and the full PowerApps language can be applied.

Делегируемые функцииDelegable functions

Следующий этап заключается в использовании только тех формул, которые можно делегировать.The next step is to use only those formulas that can be delegated. Здесь указаны элементы формул, поддерживающие делегирование.Included here are the formula elements that could be delegated. Тем не менее следует помнить, что источники данных различаются, и не все они поддерживают приведенные здесь элементы.However, every data source is different, and not all of them support all of these elements. Обращайте внимание на отмеченные синими точками рекомендации непосредственно в формулах.Check for blue-dot suggestions in your particular formula.

Этот список со временем будет меняться.These lists will change over time. Мы расширяем поддержку делегирования и на другие функции и операторы.We're working to support more functions and operators with delegation.

Функции фильтрацииFilter functions

Функции Filter, Search и LookUp можно делегировать.Filter, Search, and LookUp can be delegated.

В функциях Filter и LookUp для выбора соответствующих записей в столбцах таблицы можно использовать следующие операторы и функции:Within the Filter and LookUp functions, the following can be used with columns of the table to select the appropriate records:

Также можно использовать части формул, которые возвращают константные значения для всех записей.Portions of your formula that evaluate to a constant value for all records can also be used. Например, результат выполнения формулы Left(Language(), 2) не зависит от содержимого столбцов записи и возвращает одинаковое значение для всех записей.For example, Left( Language(), 2 ) does not depend on any columns of the record and therefore returns the same value for all records. По сути, это постоянное значение.It is effectively a constant. Значения переменных контекста, коллекций и сигналов могут не быть постоянными, что не позволяет делегировать функции Filter и LookUp.Use of context variables, collections, and signals may not be constant and therefore will prevent Filter and LookUp from being delegated.

Вот несколько важных функций, которых нет в списке выше.Some notable items missing from the above list:

Функции сортировкиSorting functions

Функции Sort и SortByColumns можно делегировать.Sort and SortByColumns can be delegated.

В функции Sort формулой может быть только имя одного столбца, и она не может содержать другие операторы или функции.In Sort, the formula can only be the name of a single column and can't include other operators or functions.

Агрегатные функцииAggregate functions

Sum, Average, Min и Max можно делегировать.Sum, Average, Min, and Max can be delegated. Сейчас делегирование поддерживает ограниченное число источников данных. Дополнительные сведения см. в статье Делегируемые источники данных.Only a limited number of data sources support this delegation at this time, check the delegation list for more details.

Функции подсчета, такие как CountRows, CountA и Count невозможно делегировать.Counting functions such as CountRows, CountA, and Count cannot be delegated.

Другие агрегатные функции, такие как StdevP и VarP также невозможно делегировать.Other aggregate functions such as StdevP and VarP cannot be delegated.

Другие функцииOther functions

Все остальные функции не поддерживают делегирование. Ниже перечислены некоторые из них.All other functions do not support delegation, including these notable functions:

Вы можете использовать функции AddColumns и LookUp для объединения данных из двух таблиц в одну (в контексте баз данных это называется операцией соединения).A common pattern is to use AddColumns and LookUp to merge information from one table into another, commonly referred to as a Join in database parlance. Пример.For example:

  • AddColumns(Products, "Имя поставщика", LookUp(Suppliers, Suppliers.ID = Product.SupplierID).Name)AddColumns( Products, "Supplier Name", LookUp( Suppliers, Suppliers.ID = Product.SupplierID ).Name )

В то время как источники данных Products и Suppliers могут поддерживать делегирование, а функция LookUp является делегируемой, функцию AddColumns делегировать нельзя.Even though Products and Suppliers may be delegable data sources and LookUp is a delegable function, the AddColumns function is not delegable. Результаты выполнения всей формулы ограничены первой частью источника данных Products.The result of the entire formula will be limited to the first portion of the Products data source.

Поскольку функция LookUp и ее источник данных являются делегируемыми, совпадение со значением Suppliers может быть найдено в любом месте источника данных (каким бы большим он ни был).Since the LookUp and its data source are delegable, a match for Suppliers can be found anywhere in the data source, even if it is large. Потенциальным недостатком в этой ситуации является тот факт, что функция LookUp совершает отдельные обращения к источнику данных для каждой записи из первой части источника Products, что повышает нагрузку на сеть.A potential downside is that LookUp will made separate calls to the data source for each of those first records in Products, causing a lot of chatter on the network. Если источник Suppliers достаточно мал и меняется не очень часто, вы можете кэшировать данные из него в приложении, вызывая функцию Collect при его запуске (с помощью события OnVisible на начальном экране), и обращаться с помощью функции LookUp к кэшированной информации.If Suppliers is small enough and does not change often, you could cache the data source in your app with a Collect call when the app starts (using OnVisible on the opening screen) and do the LookUp to it instead.

Ограничения для неделегируемых функцийNon-delegable limits

Формулы, которые нельзя делегировать, обрабатываются локально.Formulas that cannot be delegated will be processed locally. Это позволяет использовать все функциональные возможности формул PowerApps.This allows for the full breadth of the PowerApps formula language to be used. Однако есть и обратная сторона медали: все данные необходимо сначала загрузить на устройство, что может существенно увеличить сетевой трафик.But at a price: all the data must be brought to the device first, which could involve retrieving a large amount of data over the network. Это занимает некоторое время, создавая впечатление, что приложение работает медленно или даже перестало отвечать на запросы.That can take time, giving the impression that your app is slow or possibly hung.

Чтобы избежать этого, в PowerApps установлено ограничение на объем данных, обрабатываемых локально: не более 500 записей.To avoid this, PowerApps imposes a limit on the amount of data that can be processed locally: 500 records. Мы выбрали именно это число, чтобы обеспечить полный доступ к небольшим наборам данных и в то же время дать возможность оптимизировать обработку больших наборов на основе частичных результатов.We chose this number so that you would still have complete access to small data sets and you would be able to refine your use of large data sets by seeing partial results.

Очевидно, этот фактор необходимо учитывать, чтобы не вводить пользователей в заблуждение.Obviously care must be taken when using this facility as it can be confusing for users. Представим ситуацию, в которой функция Filter используется в формуле выборки, которую нельзя делегировать, для фильтрации источника данных, содержащего более миллиона записей.For example, consider a Filter function with a selection formula that cannot be delegated, over a million record data source. Поскольку фильтрация будет выполняться локально, проверены будут лишь первые 500 записей из миллиона.Since the filtering will be done locally, only the first 500 records of the million records will be scanned. Если нужная запись находится под номером 501 (или 500 001), она не будет обработана и функция Filter ее не вернет.If the desired record is record 501, or 500,001, it will not be considered or returned by Filter.

Еще одним потенциальным источником путаницы являются статистические функции.Another place where this can be confusing is aggregate functions. Представим функцию Average, примененную к тому же самому источнику данных с миллионом записей.Take Average over a column of that same million record data source. Поскольку делегирование функции Average пока не поддерживается, усреднение будет выполнено только по первым 500 записям.Since Average cannot yet be delegated, only the first 500 records will be averaged. Этот фактор необходимо учитывать: в противном случае пользователь приложения ошибочно посчитает полным результат обработки лишь части набора.Care must be taken or a partial answer could be misconstrued as a complete answer by a user of your app.

Рекомендации, отмеченные синими точкамиBlue dot suggestions

Чтобы вам было проще понять, что можно и что нельзя делегировать, в интерфейсе создания формул появляются отмеченные синими точками рекомендации, когда формула содержит компоненты, не поддерживающие делегирование.To make it easier to know what is and is not being delegated, the authoring experience provides blue dot suggestions when a formula contains something that cannot be delegated.

Такие синие точки отображаются только для формул, которые работают с делегируемыми источниками данных.Blue dots are only shown on formulas that operate on delegable data sources. Если вы не видите подобной рекомендации и считаете, что формула не делегируется надлежащим образом, проверьте, есть ли ваш источник в списке делегируемых источников данных выше.If you don't see a blue dot and you believe your formula is not being properly delegated, check the type of data source against the list of delegable data sources above.

ПримерыExamples

В этом примере мы используем таблицу SQL Server, содержащую список товаров (названий фруктов): [dbo].[Products].In this example, we will use a SQL Server table that contains products, in particular fruits, names [dbo].[Products]. На новом экране с помощью PowerApps можно создать простое приложение из трех экранов, подключенное к этому источнику данных:On the New screen, PowerApps can create a basic three screen app connected to this data source:

Обратите внимание на формулу в свойстве Items (Элементы) коллекции.Note the formula for the Gallery's Items property. В ней используются функции SortByColumns и Search, обе из которых являются делегируемыми.It is using SortByColumns and Search functions, both of which can be delegated.

Введем в текстовом поле слово Apple (Яблоко).Let's type "Apple" into the search text-input control. Внимательный пользователь заметит вверху экрана точки, которые появляются, когда начинается обработка нового поискового запроса.If we are very observant, we will momentarily see marching dots on the top of the screen while the new entry in the new search is processed. Они указывают на то, что приложение устанавливает соединение с сервером SQL Server:The marching dots indicate that we are communicating with the SQL Server:

Поскольку все компоненты являются делегируемыми, то даже в том случае, если таблица [dbo].[Products] содержит миллионы записей, мы увидим все соответствия нашему запросу, прокручивая результаты в коллекции.Because this is all delegable, even if the [dbo].[Products] table contains millions of records, we will still find them all, paging through them in the gallery as the user scrolls through the results.

В списке найденных записей вы увидите как Apple, так и Pineapple (Ананас).You will notice that we are seeing a match for both "Apple" and "Pineapple". Функция Search ищет указанное слово во всем содержимом текстового столбца.The Search function will find a search term anywhere in a text column. Предположим, нам нужно найти только те записи, в которых указанное слово встречается только в начале названия фрукта.If instead, let's say we wanted to only find the search term at the beginning of the fruit's name. Для этого можно было бы использовать другую делегируемую функцию, Filter, с более сложным поисковым запросом (чтобы упростить его, мы уберем обращение к функции SortByColumns):We can use another delegable function, Filter, with a more complicated search term (for simplicity we'll remove the SortByColumns call):

Мы получили нужный результат: в списке отображаются только яблоки (Apple), а ананасов (Pineapple) нет.This appears to be working, only "Apples" is correctly showing now and "Pineapple" is not. Однако мы видим синюю точку рядом с коллекцией и синюю волнистую линию, которой подчеркнута часть формулы.However, there is a blue dot showing next to the gallery and there is a blue wavy line under a portion of the formula. Синяя точка есть даже на эскизе экрана.There is even a blue dot showing in the screen thumbnail. Если навести указатель мыши на точку рядом с коллекцией, мы увидим такое сообщение:If we hover over the blue dot next to the gallery, we see the following:

Хотя мы используем функцию Filter, которая является делегируемой, и источник данных SQL Server, который также поддерживает делегирование, формулу, которой мы воспользовались в функции Filter, делегировать нельзя.Although we are using Filter which is a delegable function, with SQL Server which is a delegable data source, the formula we used within Filter is not delegable. Функции Mid и Len не делегируются никаким источникам данных.Mid and Len cannot be delegated to any data source.

Но мы ведь получили нужные результаты?But it worked, didn't it? В некотором смысле — да.Well, kind of. Именно поэтому мы увидели синюю точку вместо желтого значка предупреждения и красной волнистой линии, указывающей на ошибку.And that is why this is a blue dot instead of a yellow hazard icon and red wavy error. Если таблица [dbo].[Products] содержит менее 500 записей, мы получили нужный результат.If the [dbo].[Products] table contains less than 500 records, then yes, this worked perfectly. Все эти записи были загружены на устройство, и функция Filter была применена локально.All records were brought to the device and the Filter was applied locally.

Если же, однако, таблица содержит более 500 записей, в коллекции будут отображены только фрукты, названия которых начинаются со слова Apple, из числа первых 500 записей таблицы.If instead this table contains more than 500 records, then only fruit which begin with "Apple" in the first 500 records of the table will be displayed in the gallery. Если, например, в таблице под номером 501 (или 500 001) если фрукт Apple, Fuji, мы его не увидим.If "Apple, Fuji" appears as a name in record 501 or 500,001 it will not be found.