Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Power Apps лучше всего работает с серверным источником данных, когда запрос Power Fx полностью преобразуется в эквивалентный запрос, выполняемый в этом источнике данных. Power Apps отправляет запрос, понятный источнику данных, источник данных выполняет запрос, и Power Apps получает результаты. Например, источник данных фильтрует данные и возвращает только те строки, которые соответствуют критериям фильтра. В этом случае запрос делегируется источнику данных.
Но запросы Power Fx не всегда могут быть преобразованы в эквивалентные запросы ко всем источникам данных. Например, Dataverse поддерживает больше функций запросов, чем Excel. Dataverse поддерживает оператор запроса "in" (членство), но Excel его не поддерживает. Запрос является неделигируемым, если он использует функцию, которую источник данных не поддерживает. Если какая-либо часть выражения запроса не подлежит делегированию, Power Apps не делегирует никакую часть запроса.
Если запрос является неделегируемым, Power Apps получает первые 500 записей из источника данных, а затем выполняет действия в запросе. Это ограничение можно увеличить до 2000 записей. Изменение ограниченияPower Apps ограничивает размер результата 500 записей, чтобы приложение работало хорошо. Наборы результатов большего размера могут вызвать проблемы с производительностью приложения и Power Apps.
Но это ограничение может стать проблемой, поскольку запрос может вернуть неверные результаты, если источник данных содержит более 500 или 2000 записей. Например, если источник данных содержит 10 миллионов записей и запрос должен работать с последней частью данных, например с фамилиями, начинающимися с буквы Z, а в запросе используется неделегируемый оператор, такой как distinct, вы получите только первые 500 или 2000 записей. Таким образом, вы получаете неправильные результаты.
Создавайте запросы Power Fx, используя делегируемые таблицы для своего источника данных. Используйте только те функции запроса, которые можно делегировать. Это единственный способ обеспечить производительность приложения и убедиться, что пользователи получают всю необходимую информацию.
Обращайте внимание на предупреждения о делегировании, которые показывают, где делегирование невозможно. Если вы работаете с небольшими наборами данных (менее 500 записей), можно использовать любой источник данных и формулу, так как приложение обрабатывает данные локально, если формула не делегирована.
Заметка
Предупреждения о делегировании помогают управлять приложением, чтобы оно возвращало правильные результаты. Если данные в источнике данных превышают 500 записей и функция не делегирована, Power Fx помечает формулу с синим подчеркиванием.
Делегирование источников данных
Делегирование работает только с определенными табличными источниками данных. Если источник данных поддерживает делегирование, его документация по соединителю объясняет эту поддержку. Эти популярные табличные источники данных поддерживают делегирование:
- Делегируемые функции и операции Power Apps для Microsoft Dataverse
- Делегируемые функции и операции Power Apps для SharePoint
- Делегируемые функции и операции Power Apps для SQL Server
- Делегируемые функции и операции Power Apps для Salesforce
Импортированные книги Excel (для которых используется источник Добавить статические данные для приложения), коллекции и таблицы, хранимые в переменных контекста, не требуют делегирования. Эти данные уже в памяти, поэтому вы используете полный язык Power Apps.
Делегируемые функции
Используйте только те формулы, которые можно делегировать. В этой статье перечислены элементы формул, которые можно делегировать. Все источники данных различаются, и не все они поддерживают все приведенные здесь элементы. Проверьте наличие предупреждений о делегировании в формуле.
Функции фильтрации
Функции Filter, Search, First и LookUp можно делегировать.
В функциях Filter и LookUp для выбора соответствующих записей в столбцах таблицы используйте следующие операторы и функции:
- And (включая &&), Or (включая ||), Not (включая !)
-
In> [!ПРИМЕЧАНИЕ]
In делегируется только для столбцов в базовом источнике данных. Например, если источник данных является таблицей Учетные записи, то
Filter(Accounts, Name in ["name1", "name2"])делегирует на источник данных для оценки. НоFilter(Accounts, PrimaryContact.Fullname in ["name1", "name2"])не делегируется, так как столбец Полное имя находится в другой таблице (PrimaryContact), отличной от Учетные записи. Выражение оценивается локально. - =, <>, >=, <=, >, <
- +, -
- TrimEnds
- IsBlank
- StartsWith, EndsWith
- Константные значения, одинаковые во всех записях, таких как свойства элемента управления, и глобальные и контекстные переменные.
Также можно использовать части формул, которые возвращают константные значения для всех записей. Например, результат выполнения формул Left( Language(), 2 ), Date( 2019, 3, 31 ) и Today() не зависит от содержимого столбцов записи, поэтому они возвращают одинаковое значение для всех записей. Эти значения отправляются в источник данных как константа и не блокируют делегирование.
Предыдущий список не включает следующие важные элементы:
- If
- *, /, Мод
- Операции приведения столбцов: Text, Value
- Concatenate (включая &)
- ExactIn
- Функции для работы со строками: Lower, Upper, Left, Mid, Len, ...
- Сигналы: Location, Acceleration, Compass, ...
- Меняющиеся значения: Rand, ...
- Коллекции
Делегирование и коллекции
При использовании With, UpdateContext или Set эти функции создают коллекции внутри системы. Коллекции являются статическим списком записей в памяти и не могут участвовать в делегировании. Предупреждение о делегировании не отображается.
Ограничения запросов
Поиск и развертывание уровней
Power Apps позволяет использовать до двух уровней подстановки. Выражение запроса Power Fx может включать не более двух функций подстановки для поддержания производительности. Если выражение запроса содержит подстановку, Power Apps сначала выполняется запрос к базовой таблице, затем выполняется второй запрос, чтобы развернуть первую таблицу со сведениями из подстановки. Один дополнительный уровень сверх этого поддерживается как максимум. В автономных сценариях поддерживается только один уровень расширения поиска.
Развертывание или объединение до 20 сущностей в одном запросе. Если вам нужно объединить более 20 таблиц в одном запросе, попробуйте по возможности создать представление на сервере данных.
Определение значения выражения: свойство сущности должно находиться слева от оператора равенства
Поместите свойство сравниваемой сущности в левую часть уравнения. Например, в следующем выражении свойство сущности 'Business unit ID'.Name находится с левой стороны и выражение работает:
Filter(
Budgets,
'Business unit ID'.Name = LookUp(
Users,
'Primary Email' = User().Email,
'Business Unit'
).Name,
DataCardValue37.Selected.'Date Range String'='Date Range String'
)
Однако это выражение не работает:
Filter(
Budgets,
LookUp(
Users,
'Primary Email' = User().Email,
'Business Unit'
).Name = 'Business unit ID'.Name,
'Date Range String'=DataCardValue37.Selected.'Date Range String'
)
Функции сортировки
Функции Sort и SortByColumns можно делегировать.
В функции Sort формулой может быть только имя одного столбца, и она не содержит другие операторы или функции.
Агрегатные функции
Некоторые агрегатные функции можно делегировать на основе поддержки серверной части. Такие функции, как Sum, Average, Min и Max можно делегировать. Функции подсчета, такие как CountRows и Count, также можно делегировать. Однако RemoveIf и UpdateIf имеют ограничения делегирования. Делегирование этих функций поддерживается лишь ограниченным числом источников данных. Дополнительные сведения см. в разделе Список делегирования.
Неделегируемые функции
Все остальные функции не могут делегировать. К заметным функциям относятся:
Ограничения для неделегируемых функций
Формулы, которые нельзя делегировать, обрабатываются локально. Локальная обработка позволяет использовать полный язык формул Power Apps. Но есть компромисс: все данные приходят на устройство в первую очередь, что может означать получение большого объема данных по сети. Этот процесс может занять некоторое время и привести к тому, что приложение будет казаться медленным или не отвечающим.
Чтобы избежать этого, в Power Apps ограничивается объем данных, обрабатываемых локально: по умолчанию не более 500 записей. Это ограничение позволяет полностью использовать небольшие наборы данных и работать с большими наборами данных, просматривая частичные результаты.
Будьте осторожны при использовании этой функции, так как она может запутать пользователей. Например, если используется функция Filter в формуле выборки, которую нельзя делегировать, для фильтрации источника данных с миллионом записей, сканируются только первые 500 записей. Если требуется запись 501 или 500 001, функция Filter их не находит или не возвращает.
Агрегатные функции также могут вызывать путаницу. Например, если вы используете Среднее для столбца в том же источнике данных из миллиона записей, Среднее не может быть делегировано, так как выражение не делегировано (см. предыдущее примечание). Усредняются только первые 500 записей. Если вы не осторожны, пользователь может подумать, что частичный ответ является полным ответом.
Изменение ограничения
Число записей по умолчанию равно 500, но вы можете изменить это число для приложения:
- Выберите Параметры.
- В Общее измените параметр Предельное число строк с 1 на 2000.
В некоторых случаях для вашего сценария достаточно 2000, 1000 или 1500 записей. Вы можете увеличить это число в соответствии со своими потребностями, но в этом случае производительность вашего приложения может снизиться, особенно для таблиц с большим количеством столбцов. Все же лучше делегировать как можно больше.
Чтобы убедиться, что приложение масштабируется до больших наборов данных, задайте для этого значения значение 1. Теперь все, что не может быть делегировано, возвратит одну запись. Это легко обнаружить при тестировании приложения. Это поможет избежать сюрпризов при переносе тестового приложения в рабочую среду.
Предупреждения о делегировании
Power Apps отображает предупреждение (желтый треугольник) при создании формулы, которую невозможно делегировать. Проще знать, что делегируется, а что нет.
Предупреждения о делегировании отображаются только для формул, которые используют делегируемые источники данных. Если вы не видите предупреждения, но считаете, что формула не делегируется надлежащим образом, проверьте тип вашего источника данных в списке делегируемых источников данных ранее в этой статье.
Примеры
В этом примере вы автоматически создаете приложение с тремя экранами на основе таблицы SQL Server с именем [dbo].[Fruit]. Чтобы узнать, как создать это приложение, применяйте аналогичные принципы из статьи о Dataverse для SQL Server.
Для свойства Items коллекции используется формула с функциями SortByColumns и Search. Обе функции можно делегировать.
В поле поиска введите "Apple".
В верхней части экрана на короткое время появятся точки, так как приложение взаимодействует с SQL Server для обработки поискового запроса. Отобразятся все записи, соответствующие критериям поиска, даже если источник данных содержит миллионы записей.
Результаты поиска включают "Apples" и "Pineapple", поскольку функция Search ищет по всему текстовому столбцу. Чтобы найти только те записи, которые содержат поисковой запрос в начале названия фрукта, используйте другую делегируемую функцию Filter для более конкретных критериев поиска. Для простоты удалите вызов SortByColumns.
Новые результаты включают "Apples", но не "Pineapple". Желтый треугольник появляется рядом с галереей и на эскизе экрана, если на левой панели навигации отображаются эскизы. Под частью формулы появляется синяя волнистая линия. Каждый из этих элементов указывает на предупреждение. Когда вы наводите указатель на желтый треугольник рядом с коллекцией, вы видите следующее сообщение:
SQL Server — это делегируемый источник данных, а Filter — делегируемая функция. Однако функции Mid и Len не делегируются никаким источникам данных.
Но это работает, не так ли? В некотором смысле. Поэтому это предупреждение, а не красная волнистая линия.
- Если таблица содержит не более 500 записей, формула дает правильный результат. Все эти записи загружаются на устройство, и функция Filter применяется локально.
- Если таблица содержит более 500 записей, формула не возвращает запись 501 и далее, даже если она соответствует критериям.