Ограничения на заявката: Ограничения за делегиране и заявки

Разбиране на делегирането

Power Apps Работи най-добре с бек-енд източник на данни, когато заявката Power Fx може да бъде напълно преведена в еквивалентна заявка, която може да се изпълни на източник на данни. Power Apps изпраща заявка, която източник на данни разбира, заявката се изпълнява на източник на данни и резултатите от заявката се връщат в нея Power Apps. Например, източник на данни може да свърши работата по филтриране на данните в източник на данни и да върне само редовете, които отговарят на критериите за филтриране. Когато това работи правилно, казваме, че заявката е делегирана на източник на данни, за да свърши работата на заявката.

Power Fx Заявките обаче не винаги могат да бъдат преведени в еквивалентни заявки във всички източници на данни. Например Dataverse поддържа повече функции за заявки от Excel. Dataverse поддържа оператора за заявки "in" (членство), а Excel не. Казваме, че заявката не може да се делегира, ако заявката използва функция, която източник на данни не поддържа. По принцип, ако някоя част от израз на заявка не може да се делегира, ние не делегираме никаква част от заявката.

Когато една заявка не може да се делегира, Power Apps получава само първите 500 записа от източник на данни и след това изпълнява действията в заявката. Това ограничение може да бъде увеличено до 2000 записа Промяната на ограничението ограничава размера на резултата до 500 записа Power Apps , за да се запази добрата производителност на Power Apps. Установихме чрез експериментиране, че наборите от резултати, по-големи от тези размери, въвеждат проблеми с производителността за приложението ви и Power Apps като цяло.

Това ограничение обаче може да бъде проблем, тъй като заявката може да върне неправилни резултати, ако данните в източник на данни надвишават 500/2000 записа. Например, помислете за примера, при който вашият източник на данни има 10 милиона записа и заявката ви трябва да работи с последната част от данните. (Например, фамилните имена, които започват с "Z") Вашата заявка обаче има неделегиран оператор в нея (например различен.) В този случай получавате само първите 500/2000 записа и имате неправилни резултати.

Създайте вашите Power Fx заявки, като използвате делегираните таблици за вашия източник на данни. Трябва да използвате само функции за заявки, които могат да бъдат делегирани. Това е единственият начин да поддържате приложението си добре и да гарантирате, че потребителите имат достъп до цялата информация, от която се нуждаят.

Вземете под внимание предупрежденията на делегациите, които определят местата, където делегирането не е възможно. Ако работите с малки набори от данни (по-малко от 500 записа), можете да използвате всякакви източник на данни и формули, защото приложението може да обработва данни локално, ако формулата не може да бъде делегирана.

Бележка

Предупрежденията за делегация ви помагат да управлявате приложението си, така че да има правилни резултати. Ако данните във вашия източник на данни надвишават 500 записа и дадена функция не може да бъде делегирана, Power Fx ще маркира формулата със синьо подчертаване.

Източници на данни с възможност за делегиране

Делегирането се поддържа само за определени таблични източници на данни. Ако източник на данни поддържа делегиране, то документация за конектор очертава тази подкрепа. Например, тези таблични източници на данни са най-популярни и поддържат делегиране:

Импортирани работни книги на Excel (с помощта на Добавете статични данни към приложението си източник на данни), колекциите и таблиците, съхранявани в контекстови променливи, не изискват делегиране. Всички тези данни вече са в паметта и пълният език на Power Apps може да се приложи.

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

Следващата стъпка е да се използват само онези формули, които могат да бъдат делегирани. Тук са включени елементите на формулата, които могат да бъдат делегирани. Въпреки това, всеки източник на данни е различен и не всички поддържат всички тези елементи. Проверете за вашите конкретни формули за предупреждения за делегиране.

Функции за филтриране

Филтър, търсене , първи и справка могат да бъдат делегирани.

В рамките на функциите 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() не зависят от колоните на записа и следователно връщат една и съща стойност за всички записи. Тези стойности могат да бъдат изпращани до източник на данни като константа и няма да блокират делегирането.

Предишният списък не включва тези забележителни елементи:

Ограничения на заявката

Нива на справки

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. Изберете Настройки.
  2. Под Общи, променете Ограничение на ред данни настройка от 1 до 2000.

В някои случаи знаете, че 2000 (или 1000 или 1500) ще задоволят нуждите на вашия сценарий. С внимание можете да увеличите този номер, за да отговаря на вашия сценарий. С увеличаването на този брой, ефективността на приложението ви може да се понижи, особено за широки таблици с много колони. Все пак най-добрият отговор е да делегирате колкото можете повече.

За да сте сигурни, че приложението ви може да мащабира до големи набори от данни, намалете тази настройка до 1. Всичко, което не може да бъде делегирано, връща един-единствен запис, който трябва да бъде лесен за откриване при тестване на приложението ви. Това може да помогне за избягване на изненади, когато се опитвате да вземете доказателство за концепция за производство.

Предупреждения за изтриване

За да улесните разбирането какво е и не е делегиран, Power Apps осигурява предупреждение (жълт триъгълник), когато създавате формула, която съдържа нещо, което не може да бъде делегирано.

Предупрежденията за делегиране се появяват само във формули, които работят върху делегируеми източници на данни. Ако не виждате предупреждение и смятате, че формулата ви не се делегира правилно, проверете типа на източник на данни спрямо списъка с делегирани източници на данни по-горе в тази статия.

Примери

За този пример, автоматично ще генерирате приложение за три екрана въз основа на таблица на SQL Server с име [dbo].[Fruit]. За информация как да генерирате приложението можете да приложите подобни принципи в статията за Dataverse SQL Server.

Приложение с три екрана.

Свойството Елементи на галерията е зададено на формула, която съдържа функциите SortByColumns и Search, като и двете могат да бъдат делегирани.

В полето за търсене въведете "Apple".

Маркиращите точки се появяват за момент в горната част на екрана, докато приложението комуникира със SQL Server за обработка на заявката за търсене. Показват се всички записи, които отговарят на критериите за търсене, дори ако източник на данни съдържа милиони записи.

Контрола за търсене на въвеждане на текст.

Резултатите от търсенето включват "Apples" и "Pineapple", защото функцията Search преглежда навсякъде в текстова колона. Ако искате да намерите само записи, които съдържат думата за търсене в началото на името на плода, можете да използвате друга функция за делегиране, Филтър, с по-сложна дума за търсене. (За простота премахнете обаждането SortByColumns.)

Премахване на обаждането SortByColumns.

Новите резултати включват "Apples", но не "Pineapple". Жълтият триъгълник обаче се появява до галерията (и в миниатюрата на екрана, ако лявата лента за навигация показва миниатюри), а синя вълнообразна линия се появява под част от формулата. Всеки от тези елементи показва предупреждение. Ако задържите курсора на мишката върху жълтия триъгълник до галерията, се появява това съобщение:

Задръжте курсора на мишката над предупреждение за делегиране.

SQL Server е делегируем източник на данни и Filter е делегируема функция, но Mid и Len не може да бъде делегиран на никой източник на данни.

Но работи, нали? Е, вид. И затова това е предупреждение, а не червена, вълнообразна клечка.

  • Ако таблицата съдържа по-малко от 500 записа, формулата работи перфектно. Всички записи бяха внесени в устройството и Filter се прилага локално.
  • Ако таблицата съдържа повече от 500 записа, формулата няма да върне запис 501 или по-висок, дори ако отговаря на критериите.

Вижте също

Влияние на използването на функции, които не могат да се делегират, и неподходящи ограничения на ред данни за заявки върху работата
Съвети и най-добри практики за използване на делегиране

Бележка

Можете ли да ни споделите повече за езиковите си предпочитания за документацията? Попълнете кратко проучване. (имайте предвид, че това проучване е на английски език)

Проучването ще отнеме около седем минути. Не се събират лични данни (декларация за поверителност).