Функција ФорАлл
Односи се на: Апликације платна Токови на радној површини Апликације Power Pages Power Platform засноване на моделу ЦЛИ
Израчунава вредности и обавља радње за све записе у табели.
Опис
Функција ForAll процењује формулу за све записе у табели. Формула може израчунати вредност и/или извршити радње, попут мењања података или рада са везом. Користите функцију With да израчунате формулу за један запис.
Користите функцију 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 није могуће делегирати, док је друге функције, попут Filter, могуће.
Делегирање
Када ову функцију користите уз извор података, не можете је делегирати. Само први део извора података ће бити преузет, а затим примењена функција. Резултат можда не представља комплетну слику. Упозорење може да се приказује у тренутку креирања као подсетник на ово ограничење и да вам предложи прелазак на алтернативне опције које је могуће делегирати, где је то могуће. Више информација потражите у прегледу делегирања.
Синтакса
За све ( табела , формула )
- Табела - Обавезно. Табела на коју треба реаговати.
- Формула - Обавезно. Формула за оцену свих записа табеле.
Примери
Израчунавања
Следећи примери користе Squares извор података:
Да бисте креирали овај извор података као колекцију, подесите својство OnSelect контроле Дугме на ову формулу, отворите режим прегледа, а затим изаберите дугме:
ClearCollect( Squares, [ "1", "4", "9" ] )
Формула | Опис | Резултат |
---|---|---|
ФорАлл ( квадрати, сqрт( вредност ) ) Скрт ( квадрати ) |
Израчунава квадратни корен од колоне Вредност за све записе табеле уноса. Сqрт функција се такође може користити са табелом са једном колоном, што омогућава да се овај пример изврши без коришћења ФорАлл. | |
ФорАлл ( квадрата, моћ( вредност, 3 ) | Израчунава куб од колоне Вредност за све записе табеле уноса. Функција Power не подржава табеле са једном колоном. Стога, ForAll мора да се користи у овом случају. |
Коришћење везе
Следећи примери користе Expressions извор података:
Да бисте креирали овај извор података као колекцију, подесите својство OnSelect контроле Дугме на ову формулу, отворите режим прегледа, а затим изаберите дугме:
ClearCollect( Expressions, [ "Hello", "Good morning", "Thank you", "Goodbye" ] )
Овај пример такође користи Microsoft везу преводиоца . Да бисте додали ову везу у апликацију, погледајте чланак о томе како да управљате везама.
Формула | Опис | Резултат |
---|---|---|
ФорАлл (Изрази, МицрософтТранслатор.Транслате( вредност, "ес")) | За све записе у табели Изрази, преведите садржај колоне Вредност на шпански (скраћено „es“). | |
ФорАлл (Изрази, МицрософтТранслатор.Транслате( Вредност, "фр")) | За све записе у табели Изрази, преведите садржај колоне Вредност на шпански (скраћено „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 није могуће делегирати. Само први део табеле Производи ће бити израчунат, што би могло представљати проблем ако је табела велика. Зато што је Filter било могуће делегирати у претходном примеру, то може боље да ради са великим скуповима података.
Прикупи резултат
У неким ситуацијама може бити потребна копија података. Можда ћете морати да преместите информације из једног извора података у други. У овом примеру, наруџбине се постављају путем табеле 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'
}
)
)
)
ЦлеарЦоллецт и Цоллецт се не могу делегирати. Као резултат, количина података која се може премештати на овај начин је ограничена.
Прикупљајте унутар ForAll
Коначно, можемо да изводимо Collect директно унутар 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 за све записе, који би могли да додају бројне податке да смо их снимали.
Мапирање табеле у компоненти
Погледајте Мапирање табела.