ForAll функция

Отнася се за: Приложения за платно Copilot Studio Работен плот потоци Модел-управлявани приложения Power Platform CLI Dataverse функции Power Pages

Изчислява стойности и изпълнява действия за всички записи в таблица.

Описание

Функцията ForAll изчислява формула за всички записи в таблица. Формулата може да изчисли стойност и / или да извърши действия, като например промяна на данни или работа с връзка. Използвайте With function за изчисляване на формулата за един запис.

Използвайте функцията Sequence с функциятаForAll, за да итерирате на базата на брой.

Полетата от записа, които се обработват в момента, са достъпни във формулата. Използвайте оператора ThisRecord или просто посочете полета по име, както при всяка друга стойност. Операторът As може също така да бъде използван за задаване на име на записа, който се обработва, което може да помогне вашата формула да стане по-лесна за разбиране и вложените записи да са достъпни. За повече информация вижте примерите по-долу и работа с обхвата на запис.

Стойност на връщане

Резултатът от всяка оценка на формулата се връща в таблица, в същия ред като таблицата за въвеждане.

Ако резултатът от формулата е една стойност, получената таблица е таблица с една колона. Ако резултатът от формулата е запис, получената таблица съдържа записи със същите колони като записа на резултата.

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

Предприемане на действие

Формулата може да включва функции, които предприемат действия, като например промяна на записите на източник на данни с Patch и Collect функции. Формулата може също да извика методи на връзки. На един запис могат да се извършват множество действия с помощта на ; оператор. Не можете да променяте таблицата, която е обектът ForAll на функцията.

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

Внимавайте да не поръчате зависимости. Поради тази причина не можете да използвате функциите UpdateContext, Clear и ClearCollect във ForAll функция, тъй като те лесно могат да се използват за задържане на променливи, които биха били податливи на този ефект. Можете да използвате Collect, но редът, в който се добавят записи, е неопределен.

Няколко функции, които променят източниците на данни, включително Collect, Remove и Update, върнете променената източник на данни като тяхната възвръщаема стойност. Тези върнати стойности могат да бъдат големи и да консумират значителни ресурси, ако бъдат върнати за всеки запис на таблицата ForAll . Може също да установите, че тези върнати стойности не са тези, които очаквате, тъй като ForAll могат да работят паралелно и може да отделят страничните ефекти на тези функции от получаването на резултата от тях. Ако върнатата стойност от ForAll не се използва, което често се случва с функциите за промяна на данни, връщането на стойността няма да бъде създадено и няма проблеми с ресурсите или поръчките. Но ако използвате резултата от една ForAll от функциите, която връща източник на данни, помислете внимателно как структурирате резултата и първо го изпробвайте за малки набори от данни.

Алтернативи

Много функции в Power Apps могат да обработват повече от една стойност едновременно с помощта на таблица с една колона. Например функцията Len може да обработи таблица с текстови стойности, връщайки таблица с дължини по същия начин, който ForAll би могъл. Това може да премахне необходимостта от използване ForAll в много случаи, може да бъде по-ефективно и по-лесно за четене.

Друго съображение е, че ForAll не може да се раздели, докато може да има други функции, като например Филтър.

Делегиране

Когато се използва с източник на данни, тази функция не може да се делегира. Ще се извлече само първата част на източника на данни, след което ще се приложи функцията. Резултатът може да не е завършен. Може да се покаже предупреждение в момента на създаване, за да ви напомни за това ограничение и да предложи превключване към алтернативи с възможност за делегиране, ако е възможно. За повече информация вж. прегледа на делегирането.

Синтаксис

ForAll(Таблица, Формула)

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

Примери

Изчисления

Следващите примери използват Squaresизточник на данни:

Пример за квадрати.

За да създадете тази източник на данни като колекция, задайте свойството OnSelect на контролата Бутон на тази формула, отворете режим за преглед и след това изберете бутона:

ClearCollect( Squares, [ "1", "4", "9" ] )

Формула Описание Резултат
ForAll( Квадрати, Sqrt( Стойност )

Sqrt ( квадрати )
За всички записи на входната таблица изчислява квадратния корен на колона стойност. Функцията Sqrt може да се използва и с таблица с една колона, което прави възможно изпълнението на този пример без използване на ForAll. Пример за Sqrt.
ForAll( Квадрати, Мощност( Стойност, 3 ) За всички записи на входната таблица повдига колоната стойност на трета степен. Функцията Power не поддържа таблици с една колона. Следователно, ForAll трябва да се използва в този случай. Пример за мощност.

Използване на връзка

Следващите примери използват Expressionsизточник на данни:

Пример за изрази.

За да създадете тази източник на данни като колекция, задайте свойството OnSelect на контролата Бутон на тази формула, отворете режим за преглед и след това изберете бутона:

ClearCollect( Expressions, [ "Hello", "Good morning", "Thank you", "Goodbye" ] )

Този пример също използва връзка с Microsoft Translator. За да добавите тази връзка към приложението, вижте статията за това как да управлявате връзки.

Формула Описание Резултат
ForAll(Изрази, MicrosoftTranslator.Translate(Стойност; "es")) За всички записи в таблицата изрази преведете съдържанието на стойност колона на испански (съкратено "es"). Пример със стойност
ForAll(Изрази, MicrosoftTranslator.Translate(Стойност, "fr")) За всички записи в таблицата изрази преведете съдържанието на стойност колона на френски (съкратено "fr"). Пример със стойност

Копиране на таблица

Понякога е необходимо да филтрирате, оформите, подредите и манипулирате данните. Power Apps предоставя много функции, с които да го направите, като например Filter, AddColumns и Sort. Power Apps третира всяка таблица като стойност, което й позволява да преминава през формули и да се използва лесно.

А понякога искате да направите копие на този резултат за по-късно използване или искате да преместите информация от един източник на данни в друг. Power Apps осигурява Collect функция за копиране на данни.

Но преди да направите това копие, помислете внимателно, ако е необходимо. Много ситуации могат да бъдат разрешени чрез филтриране и оформяне на основните източник на данни при поискване с формула. Някои от недостатъците при създаването на копие включват:

  • Две копия на една и съща информация означават, че едно от тях може да не се синхронизира.
  • Създаването на копие може да използва голяма част от компютърната памет, мрежовата честотна лента и/или много време.
  • За повечето източници на данни копирането не може да бъде делегирано, като се ограничава количеството данни, които могат да бъдат преместени.

Следващите примери използват Productsизточник на данни:

Пример за източник на данни на продукт.

За да създадете тази източник на данни като колекция, задайте свойството OnSelect на контролата Бутон на тази формула, отворете режим за преглед и след това изберете бутона:

ClearCollect( Products,
    Table(
        { Product: "Widget",    'Quantity Requested': 6,  'Quantity Available': 3 },
        { Product: "Gadget",    'Quantity Requested': 10, 'Quantity Available': 20 },
        { Product: "Gizmo",     'Quantity Requested': 4,  'Quantity Available': 11 },
        { Product: "Apparatus", 'Quantity Requested': 7,  'Quantity Available': 6 }
    )
)

Нашата цел е да работим с производна таблица, която включва само елементите, за които е поискано повече, отколкото е налично, и за които трябва да направим поръчка:

Пример за производна таблица.

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

Оформяне на маса при поискване

Не правете това копие! Можем да използваме следната формула навсякъде, където имаме нужда:

// Table shaping on demand, no need for a copy of the result
ShowColumns(
    AddColumns(
        Filter( Products, 'Quantity Requested' > 'Quantity Available' ),
        "Quantity To Order", 'Quantity Requested' - 'Quantity Available'
    ),
    "Product",
    "Quantity To Order"
)

Обхват на записа е създаден от Filter и AddColumns функции за изпълнение на операциите за сравняване и изваждане, съответно, с „Заявено количество“ и „Количество на разположение“ полета на всеки запис.

В този пример функцията Filter може да бъде делегирана. Това е важно, тъй като в него могат да се намерят всички продукти, които отговарят на критериите, дори ако това е само няколко записа от таблица с милиони. За момента ShowColumns и AddColumns не могат да бъдат делегирани, така че действителният брой продукти, които трябва да бъдат поръчани, е ограничен. Ако знаете, че размерът на този резултат винаги е сравнително малък, този подход е наред.

И тъй като не сме направили копие, няма допълнително копие на информацията, за да управляваме или да не сме актуални.

ForAll при поискване

Друг подход е да използвате функцията ForAll , за да заместите функциите за оформяне на таблици:

ForAll( Products,
    If( 'Quantity Requested' > 'Quantity Available',
        {
            Product: Product,
            'Quantity To Order': 'Quantity Requested' - 'Quantity Available'
        }
    )
)

Тази формула може да бъде по-проста за някои хора да четат и пишат.

Никоя част от нея ForAll не може да се отегчи. Оценява се само първата част от таблицата "Продукти ", което може да е проблем, ако тази таблица е голяма. Тъй като филтър може да бъде делегиран в предишния пример, може да работи по-добре с големи масиви от данни.

Съберете резултата

В някои ситуации може да се изисква копие на данни. Може да имате нужда да преместите информация от един източник на данни в друг. В този пример поръчките се правят чрез таблица NewOrder на системата на доставчик. За взаимодействия с потребителите с висока скорост може да искате да кеширате локално копие на таблица, така че да няма закъснение на сървъра.

Ние използваме същата оформяне на таблицата като предишните два примера, но улавяме резултата в колекция:

ClearCollect( NewOrder,
    ShowColumns(
        AddColumns(
            Filter( Products, 'Quantity Requested' > 'Quantity Available' ),
            "Quantity To Order", 'Quantity Requested' - 'Quantity Available'
        ),
        "Product",
        "Quantity To Order"
    )
)
ClearCollect( NewOrder,
    ForAll( Products,
        If( 'Quantity Requested' > 'Quantity Available',
            {
                Product: Product,
                'Quantity To Order': 'Quantity Requested' - 'Quantity Available'
            }
        )
    )
)

ClearCollect и Collect не могат да бъдат делегирани. В резултат на това количеството данни, което може да бъде преместено по този начин, е ограничено.

Събиране в рамките на ForAll

И накрая, можем да извършим Събиране директно в ForAll:

Clear( NewOrder );
ForAll( Products,
    If( 'Quantity Requested' > 'Quantity Available',
        Collect( NewOrder,
            {
                Product: Product,
                'Quantity To Order': 'Quantity Requested' - 'Quantity Available'
            }
        )
    )
)

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

Имайте предвид, че не заснемаме резултата от ForAll. Извикванията на функцията Collect , направени от нея, връщат източника на данни NewOrder за всички записи, което може да добави множество данни, ако ги заснемем.

Таблица на картата в компонент

Вижте Таблици с карти.