Funkcija ForAll
Važi za: Canvas aplikacije Desktop flows Model-driven apps Power Pages Power Platform CLI
Izračunava vrednosti i obavlja radnje za sve zapise u tabeli.
Opis
Funkcija ForAll procenjuje formulu za sve zapise u tabeli. Formula može izračunati vrednost i/ili izvršiti radnje, poput menjanja podataka ili rada sa vezom. Koristite funkciju With da izračunate formulu za jedan zapis.
Koristite funkciju Sequence sa funkcijom ForAll za ponavljanje na osnovu broja.
Polja zapisa koji se trenutno obrađuje su dostupna u formuli. Koristite operator ThisRecord ili jednostavno stavite referencu na polja po nazivu kao i bilo koju drugu vrednost. Možete i da koristite operator As za imenovanje zapisa koji se obrađuje što može da pomogne da vaša formula bude lakša za razumevanje i učini ugnežđene zapise dostupnima. Više informacija potražite u primerima u nastavku i članku o radu sa opsegom zapisa.
Vraćena vrednost
Rezultat svakog izračunavanja formule vraća se u tabelu, istim redosledom kao i tabela unosa.
Ako je rezultat formule jedna vrednost, rezultujuća tabela će biti tabela sa jednom kolonom. Ako je rezultat formule zapis, rezultirajuća tabela sadrži zapise sa istim kolonama kao i zapis rezultata.
Ako je rezultat formule prazna vrednost, tada u tabeli rezultata za taj ulazni zapis nema zapisa. U ovom slučaju će biti manje zapisa u tabeli sa rezultatima nego u tabeli izvora.
Preduzimanje radnje
Formula može uključivati funkcije koje preduzimaju radnju, poput menjanja zapisa izvora podataka pomoću funkcija Patch i Collect. Formula takođe može pozvati metode na vezama. Višestruke radnje se mogu izvesti po zapisu koristeći ; operatora. Ne možete promeniti tabelu koja je predmet funkcije ForAll.
Kada pišete formulu, imajte na umu da se zapisi mogu obrađivati bilo kojim redosledom i, kada je to moguće, paralelno. Prvi zapis tabele može se obraditi nakon poslednjeg zapisa.
Pazite da ne izbegavate naručivanje zavisnih elemenata. Iz tog razloga, ne možete da koristite funkcije UpdateContext, Clear i ClearCollect unutar funkcije ForAll jer bi lako mogle da se koriste za držanje promenljivih koje bi bile podložne ovom efektu. Možete koristiti Collect, ali redosled dodavanja zapisa nije definisan.
Nekoliko funkcija koje menjaju izvore podataka, uključujući Collect, Remove i Update, vraćaju izmenjeni izvor podataka kao svoju vraćenu vrednost. Ove vraćene vrednosti mogu biti velike, a mogu i da troše značajne resurse ako se vrate za svaki zapis tabele ForAll. Možda ćete otkriti i da ove vraćene vrednosti nisu ono što očekujete, jer ForAll može da upravlja paralelno i može odvojiti nuspojave ovih funkcija od pribavljanja njihovog rezultata. Ako se povratna vrednost funkcije ForAll ne koristi, što je često slučaj sa funkcijama za promenu podataka, tada se povratna vrednost neće kreirati i nema brige zbog resursa ili redosleda. Ali ako koristite rezultat iz ForAll i jednu od funkcija koja vraća izvor podataka, dobro razmislite kako struktuirate rezultat i prvo ga isprobajte na malim skupovima podataka.
Alternative
Mnogo funkcija Power Apps može istovremeno da obrađuje više od jedne vrednosti pomoću upotrebe tabele sa jednom kolonom. Na primer, funkcija Len može da obradi tabelu tekstualnih vrednosti, vraćajući tabelu dužina, na isti način kao što bi to mogla funkcija ForAll. Ovo može eliminisati potrebu za korišćenjem ForAll u mnogim slučajevima, može biti efikasnije i čitljivije.
Drugo pitanje je to što ForAll nije moguće delegirati, dok je druge funkcije, poput Filter, moguće.
Delegiranje
Kada ovu funkciju koristite uz izvor podataka, ne možete je delegirati. Samo prvi deo izvora podataka će biti preuzet, a zatim primenjena funkcija. Rezultat možda ne predstavlja kompletnu sliku. Upozorenje može da se prikazuje u trenutku kreiranja kao podsetnik na ovo ograničenje i da vam predloži prelazak na alternativne opcije koje je moguće delegirati, gde je to moguće. Više informacija potražite u pregledu delegiranja.
Sintaksa
ForAll( Tabela, Formula )
- Table – Obavezno. Tabela na koju treba reagovati.
- Formula – Obavezno. Formula za izračunavanje svih zapisa tabele.
Primeri
Izračunavanja
Sledeći primeri koriste Squares izvor podataka:
Da biste kreirali ovaj izvor podataka kao kolekciju, podesite svojstvo OnSelect kontrole Dugme na ovu formulu, otvorite režim pregleda, a zatim izaberite dugme:
ClearCollect( Squares, [ "1", "4", "9" ] )
Formula | Opis | rezultat |
---|---|---|
ForAll( Squares, Sqrt( Value ) ) Sqrt( Squares ) |
Izračunava kvadratni koren od kolone Vrednost za sve zapise tabele unosa. Funkcija Sqrt se takođe može koristiti sa tabelom sa jednom kolonom, što olakšava izvođenje ovog primera bez korišćenja forAll-a . | |
ForAll( Squares, Power( Value, 3 ) ) | Izračunava kub od kolone Vrednost za sve zapise tabele unosa. Funkcija Power ne podržava tabele sa jednom kolonom. Stoga, ForAll mora da se koristi u ovom slučaju. |
Korišćenje veze
Sledeći primeri koriste Expressions izvor podataka:
Da biste kreirali ovaj izvor podataka kao kolekciju, podesite svojstvo OnSelect kontrole Dugme na ovu formulu, otvorite režim pregleda, a zatim izaberite dugme:
ClearCollect( Expressions, [ "Hello", "Good morning", "Thank you", "Goodbye" ] )
Ovaj primer takođe koristi vezu Microsoft Translator. Da biste dodali ovu vezu u aplikaciju, pogledajte članak o tome kako da upravljate vezama.
Formula | Opis | rezultat |
---|---|---|
ForAll( Expressions, MicrosoftTranslator.Translate( Value, "es" ) ) | Za sve zapise u tabeli Expressions, prevedite sadržaj kolone Value na španski (skraćeno „es“). | |
ForAll( Expressions, MicrosoftTranslator.Translate( Value, "fr" ) ) | Za sve zapise u tabeli Expressions, prevedite sadržaj kolone Value na španski (skraćeno „fr“). |
Kopiranje tabele
Ponekad je potrebno da filtrirate, oblikujete, sortirate i manipulišete podacima. Power Apps pruža brojne funkcije za to, poput Filter, AddColumns i Sort. Power Apps svaku tabelu posmatra kao vrednost, omogućavajući joj da teče kroz formule i lako se koristi.
A ponekad želite da napravite kopiju ovog rezultata za kasniju upotrebu ili želite da premestite informacije sa jednog izvora podataka u drugi. Power Apps pruža funkciju Collect za kopiranje podataka.
Ali pre nego što napravite tu kopiju, dobro razmislite da li je potrebna. Mnoge situacije se mogu rešiti filtriranjem i oblikovanjem osnovnog izvora podataka na zahtev pomoću formule. Neki od nedostataka pravljenja kopije uključuju:
- Dve kopije istih podataka znače da jedna od njih može ispasti iz sinhronizacije.
- Izrada kopije može zauzeti veliki deo memorije računara, opsega mreže i/ili vremena.
- Za većinu izvora podataka, kopiranje ne može biti delegirano, ograničavajući koliko se podataka može premestiti.
Sledeći primeri koriste Products izvor podataka:
Da biste kreirali ovaj izvor podataka kao kolekciju, podesite svojstvo OnSelect kontrole Dugme na ovu formulu, otvorite režim pregleda, a zatim izaberite dugme:
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 }
)
)
Naš cilj je da radimo sa tabelom izvoda koja uključuje samo one predmete gde je traženo više nego što je dostupno i koje je potrebno da naručimo:
Ovaj zadatak možemo da obavimo na nekoliko različitih načina, koji svi daju isti rezultat, uz različite prednosti i nedostatke.
Oblikovanje tabele na zahtev
Nemojte praviti tu kopiju! Sledeću formulu možemo koristiti gde god nam je potrebno:
// 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"
)
Opseg zapisa je kreiran od strane funkcija Filter i AddColumns za obavljanje operacija poređenja i oduzimanja, po tom redu, sa poljima „Zahtevana količina“ i „Dostupna količina“ svakog zapisa.
U ovom primeru se funkcija Filter može delegirati. Ovo je važno, jer se u tabeli od milion zapisa mogu naći svi proizvodi koji ispunjavaju kriterijume, čak i ako je to samo nekoliko zapisa. Funkcije ShowColumns i AddColumns se ne mogu delegirati, tako da će stvarni broj proizvoda koji treba naručiti biti ograničen. Ako znate da će veličina ovog rezultata uvek biti relativno mala, ovaj pristup je u redu.
A zato što nismo napravili kopiju, ne postoji dodatna kopija informacije kojom bi se upravljalo ili koja bi postala zastarela.
ForAll na zahtev
Drugi pristup je upotreba funkcije ForAll za zamenu funkcija za oblikovanje tabele:
ForAll( Products,
If( 'Quantity Requested' > 'Quantity Available',
{
Product: Product,
'Quantity To Order': 'Quantity Requested' - 'Quantity Available'
}
)
)
Ova formula može nekim ljudima biti jednostavnija za čitanje i pisanje.
Nijedan deo ForAll nije moguće delegirati. Samo prvi deo tabele Proizvodi će biti izračunat, što bi moglo predstavljati problem ako je tabela velika. Zato što je Filter bilo moguće delegirati u prethodnom primeru, to može bolje da radi sa velikim skupovima podataka.
Prikupljanje rezultata
U nekim situacijama može biti potrebna kopija podataka. Možda ćete morati da premestite informacije iz jednog izvora podataka u drugi. U ovom primeru, narudžbine se postavljaju putem tabele NewOrder u sistemu dobavljača. Za korisničke interakcije velike brzine možda bi trebalo da keširate lokalnu kopiju tabele kako ne bi bilo kašnjenja servera.
Koristimo isto oblikovanje tabele kao prethodna dva primera, ali rezultat snimamo u kolekciju:
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 i Collect ne mogu biti delegirane. Kao rezultat, količina podataka koja se može premeštati na ovaj način je ograničena.
Prikupljajte unutar ForAll
Konačno, možemo da izvodimo Collect direktno unutar ForAll:
Clear( NewOrder );
ForAll( Products,
If( 'Quantity Requested' > 'Quantity Available',
Collect( NewOrder,
{
Product: Product,
'Quantity To Order': 'Quantity Requested' - 'Quantity Available'
}
)
)
)
Opet, funkcija ForAll se trenutno ne može delegirati. Ako je naša tabela Proizvodi velika, ForAll će pogledati samo prvi skup zapisa i možda će propustiti neke proizvode koje je potrebno naručiti. Ali za tablice za koje znamo da će ostati male, ovaj pristup je u redu.
Imajte na umu da mi ne beležimo rezultat funkcije ForAll. Pozivi funkciji Collect upućeni iz nje vratiće izvor podataka NewOrder za sve zapise, koji bi mogli da dodaju brojne podatke da smo ih snimali.
Mapiranje tabele u komponenti
Pogledajte Mapiranje tabela.