Ограничения на заявките: Делегиране и ограничения на заявките
Разбиране на делегирането
Power Apps Работи най-добре с бекенд източник на данни, когато заявката Power Fx може да бъде напълно преведена в еквивалентна заявка, която може да се изпълни в източник на данни. Power Apps изпраща заявка, която източник на данни разбира, заявката се изпълнява към източник на данни и резултатите от заявката се връщат Power Apps. Например източник на данни може да свърши работата по филтриране на данните в източник на данни и да върне само редовете, които отговарят на критериите за филтриране. Когато това работи правилно, казваме, че заявката е делегирана на източник на данни, за да свърши работата по заявката.
Заявките обаче Power Fx не винаги могат да бъдат преведени в еквивалентни заявки за всички източници на данни. Например, Dataverse поддържа повече функции за заявки от Excel. Dataverse поддържа оператора за заявка "in" (членство), а Excel не. Казваме, че заявката не може да се делегира, ако заявката използва функция, която източник на данни не поддържа. По принцип, ако някоя част от израз на заявка не може да се делегира, ние не делегираме никоя част от заявката.
Когато заявката не може да се делегира, Power Apps получава само първите 500 записа от източник на данни и след това изпълнява действията в заявката. Това ограничение може да бъде увеличено до 2,000 записа Промяната на ограничението Power Apps ограничава размера на резултата до 500 записа, за да се запази добрата производителност. Power Apps Чрез експерименти установихме, че наборите от резултати, по-големи от тези размери, създават проблеми с ефективността на приложението ви и Power Apps като цяло.
Това ограничение обаче може да бъде проблем, тъй като заявката може да върне неправилни резултати, ако данните в източника на данни надвишават 500/2000 записа. Например, помислете за примера, при който вашият източник на данни има 10 милиона записа и вашата заявка трябва да работи с последната част от данните. (Например фамилните имена, които започват с "Z") В заявката Ви обаче има оператор, който не може да се делегира (например различен). В този случай получавате само първите 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 (включително !)
- В
Бележка
В се делегира само за колони на базата източник на данни. Например, ако източник на данни е таблица Акаунти тогава
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() не зависят от колоните на записа и следователно връщат една и съща стойност за всички записи. Тези стойности могат да бъдат изпращани до източник на данни като константа и няма да блокират делегирането.
Предишният списък не включва тези забележителни елементи:
- Ако
- *, /, Mod
- Операции за предаване на колони Текст,Стойност ...
- Concatenate (включително &)
- ExactIn
- Функции за манипулиране на низ: Lower, Upper, Left, Mid, Len, ...
- Сигнали: Location, Acceleration, Compass, ...
- Нестабилни: Rand, ...
- Колекции
Ограничения на заявките
Нива на търсене
Power Apps поддържа две нива на търсене. Това означава, че Power Fx изразът на заявката може да има най-много две справочни функции в себе си. Това ограничение е за запазване на производителността. Ако изразът на заявката включва справка, Power Apps първо прави заявка, за да получи основната таблица. След това прави втора заявка, която разширява първата таблица с информацията за справка. Ние подкрепяме още едно ниво отвъд това като максимум. За офлайн обаче поддържаме само едно ниво на разширяване на търсенето.
Оценка на израза - свойството на обекта трябва да бъде от лявата страна "LHS" на оператора за равенство
Важно е да поставите свойството на обект, който трябва да бъде сравнен, в израз от лявата страна "LHS" на уравнение. За илюстрация, в примера по-долу свойството на обекта "ИД на бизнес единица". Name е стойност на свойство и трябва да бъде поставена в LHS на израза, който ще бъде изчислен. Следният израз е последен:
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.
Свойството Елементи на галерията е зададено на формула, която съдържа функциите SortByColumns и Search, като и двете могат да бъдат делегирани.
В полето за търсене въведете "Apple".
Маркиращите точки се появяват за момент в горната част на екрана, докато приложението комуникира със SQL Server за обработка на заявката за търсене. Показват се всички записи, които отговарят на критериите за търсене, дори ако източник на данни съдържа милиони записи.
Резултатите от търсенето включват "Apples" и "Pineapple", защото функцията Search преглежда навсякъде в текстова колона. Ако искате да намерите само записи, които съдържат думата за търсене в началото на името на плода, можете да използвате друга функция за делегиране, Филтър, с по-сложна дума за търсене. (За простота премахнете обаждането SortByColumns.)
Новите резултати включват "Apples", но не "Pineapple". Жълтият триъгълник обаче се появява до галерията (и в миниатюрата на екрана, ако лявата лента за навигация показва миниатюри), а синя вълнообразна линия се появява под част от формулата. Всеки от тези елементи показва предупреждение. Ако задържите курсора на мишката върху жълтия триъгълник до галерията, се появява това съобщение:
SQL Server е делегируем източник на данни и Filter е делегируема функция, но Mid и Len не може да бъде делегиран на никой източник на данни.
Но работи, нали? Е, вид. И затова това е предупреждение, а не червена, вълнообразна клечка.
- Ако таблицата съдържа по-малко от 500 записа, формулата работи перфектно. Всички записи бяха внесени в устройството и Filter се прилага локално.
- Ако таблицата съдържа повече от 500 записа, формулата няма да върне запис 501 или по-висок, дори ако отговаря на критериите.
Вижте също
Влияние на използването на функции, които не могат да се делегират, и неподходящи ограничения на ред данни за заявки върху работата
Съвети и най-добри практики за използване на делегиране
Бележка
Можете ли да ни споделите повече за езиковите си предпочитания за документацията? Попълнете кратко проучване. (имайте предвид, че това проучване е на английски език)
Проучването ще отнеме около седем минути. Не се събират лични данни (декларация за поверителност).