Notă
Accesul la această pagină necesită autorizare. Puteți încerca să vă conectați sau să modificați directoarele.
Accesul la această pagină necesită autorizare. Puteți încerca să modificați directoarele.
Se aplică la: Aplicații
pânză Copilot Studio
Desktop fluxuri
model aplicații bazate pe modele
Power Platform ClI
Dataverse funcții
Power Pages
Calculează valorile și execută acțiuni pentru toate înregistrări într-un tabel.
Descriere
Funcția ForAll evaluează o formulă pentru toate înregistrările dintr-un tabel. Formula poate să calculeze o valoare și/sau să efectueze acțiuni, cum ar fi modificarea datelor sau lucrul cu o conexiune. Utilizați funcția With pentru a evalua formula pentru o singură unică.
Utilizați funcția Secvență cu funcția ForAll pentru a itera pe baza unui contor.
Câmpurile înregistrării procesate în prezent sunt disponibile în cadrul formulei. Utilizați operatorul ThisRecord sau pur și simplu faceți referire la câmpuri după nume, așa cum ați face cu orice altă valoare. Operatorul Ca poate fi, de asemenea, utilizat pentru a denumi înregistrarea care este procesată, ceea ce poate face formula dvs. să fie mai ușor de înțeles și înregistrările imbricate să fie accesibile. Pentru informații suplimentare, consultați exemplele de mai jos și lucrul cu domeniul de aplicare al înregistrărilor.
Valoare returnată
Rezultatul fiecărei formule de evaluare este returnat într-un tabel în aceeași ordine cu tabelul de intrare.
Dacă rezultatul formulei este o singură valoare, tabelul rezultat este un tabel cu o singură coloană. Dacă rezultatul formulei este o înregistrare, tabelul rezultat conține înregistrări cu aceleași coloane ca înregistrarea rezultatelor.
Dacă rezultatul formulei este o valoare necompletată , atunci nu există nicio înregistrare în tabelul de rezultate pentru acea înregistrare de intrare. În acest caz, există mai puține înregistrări în tabelul de rezultate decât tabelul sursă.
Acțiuni de luat
Formula poate include funcții care acționează, cum ar fi modificarea înregistrărilor unei surse de date cu funcțiile Patch și Collect. Formula poate apela, de asemenea, metode la conexiuni. Se pot efectua mai multe acțiuni pentru fiecare înregistrare folosind operator;. Nu puteți modifica tabelul care este subiectul funcției ForAll .
Când scrieți formula dvs., rețineți că înregistrările pot fi procesate în orice ordine și, atunci când este posibil, în paralel. Prima înregistrare a tabelului poate fi procesată după ultima înregistrare.
Aveți grijă să evitați comandarea dependențelor. Din acest motiv, nu puteți utiliza funcțiile UpdateContext, Clear și ClearCollect dintr-o ForAll funcție, deoarece acestea ar putea fi utilizate cu ușurință pentru a reține variabile care ar putea fi susceptibile la acest efect. Puteți să folosiți Collect, dar ordinea în care se adaugă înregistrările nu este definită.
Mai multe funcții care modifică sursele de date, inclusiv Collect, Remove și Update returnează sursă de date modificată ca valoare returnată. Aceste valori returnate pot fi mari și consumă resurse semnificative dacă sunt returnate pentru fiecare înregistrare a tabelului ForAll . De asemenea, este posibil să descoperiți că aceste valori returnate nu sunt așa cum vă așteptați, deoarece ForAll pot funcționa în paralel și pot separa efectele secundare ale acestor funcții de obținerea rezultatului lor. Dacă valoarea returnată nu ForAll este utilizată, care este adesea cazul cu funcții de modificare a datelor, atunci valoarea returnată nu va fi creată și nu există probleme de resurse sau comenzi. Dar dacă utilizați rezultatul unei ForAll și al uneia dintre funcțiile care returnează o sursă de date, gândiți-vă cu atenție cum structurați rezultatul și încercați-l mai întâi pe seturi mici de date.
Alternative
Multe funcții din Power Apps pot procesa mai multe valori simultan, utilizând un tabel cu o singură coloană. De exemplu, funcția Len poate procesa un tabel de valori text, returnând un tabel de lungimi, în același mod, care ForAll ar putea. Acest lucru poate elimina necesitatea de a utiliza ForAll în multe cazuri, poate fi mai eficient și este mai ușor de citit.
O altă considerație este că ForAll nu este delegabil în timp ce alte funcții pot fi, cum ar fi Filtrare.
Delegare
Atunci când se folosește cu o sursă de date, această funcție nu poate fi delegată. Doar prima porțiune a sursei de date va fi regăsită, apoi se va aplica funcția. Este posibil ca rezultatul să nu reprezinte întreaga situație. Poate apărea un avertisment la momentul creării, pentru a vă aminti de această limitare și pentru a sugera comutarea la alternative ce se pot delega, atunci când este posibil. Pentru mai multe informații, consultați prezentarea generală a delegării.
Sintaxă
ForAll(Tabel, Formulă)
- Tabel - Obligatoriu. Tabelul în care trebuie acționat.
- Formula - Obligatoriu. Formula de evaluat pentru toate înregistrările Tabel.
Exemple
Calcule
Următoarele exemple utilizează Pătratesursă de date:
Pentru a crea această sursă de date ca o colecție, setați proprietatea OnSelect a unui Buton pentru a controla această formulă, deschideți modul Previzualizare, apoi selectați butonul:
ClearCollect( Squares, [ "1", "4", "9" ] )
| Formulă | Descriere | Rezultat |
|---|---|---|
|
ForAll( Pătrate, Sqrt( Valoare ) Sqrt(Patrate) |
Pentru toate înregistrările tabelului de intrare, se calculează rădăcina pătrată a coloanei Valoare. Funcția Sqrt poate fi utilizată și cu un tabel cu o singură coloană, făcând posibilă efectuarea acestui exemplu fără a utiliza ForAll. |
|
| ForAll( Pătrate, Power( Valoare, 3 ) ) | Pentru toate înregistrările tabelului de intrare, se ridică la puterea a treia coloana Valoare. Funcția Power nu acceptă tabele cu o singură coloană. Prin urmare, ForAll trebuie utilizat în acest caz. |
|
Utilizarea unei conexiuni
Următoarele exemple utilizează Expresiisursă de date:
Pentru a crea această sursă de date ca o colecție, setați proprietatea OnSelect a unui Buton pentru a controla această formulă, deschideți modul Previzualizare, apoi selectați butonul:
ClearCollect( Expressions, [ "Hello", "Good morning", "Thank you", "Goodbye" ] )
Acest exemplu folosește și o conexiune Microsoft Translator. Pentru a adăuga această conexiune la aplicația dvs., consultați articolul despre cum să gestionați conexiunile.
| Formulă | Descriere | Rezultat |
|---|---|---|
| ForAll(Expresii, MicrosoftTranslator.Translate(Valoare, "es")) | Pentru toate înregistrările din tabelul Expresii, traduceți conținutul coloanei Valoare în spaniolă (prescurtat "es"). |
|
| ForAll(Expresii, MicrosoftTranslator.Translate(Valoare, "fr")) | Pentru toate înregistrările din tabelul Expresii, traduceți conținutul coloanei Valoare în franceză (prescurtat "fr"). |
|
Copierea unui tabel
Uneori, trebuie să filtrați, să modelați, să sortați și să manipulați datele. Power Apps furnizează multe funcții pentru a face acest lucru, cum ar fi Filter, AddColumns și Sort. Power Apps tratează fiecare tabel ca valoare, permițându-i să curgă prin formule și să fie consumat cu ușurință.
Și uneori doriți să faceți o copie a acestui rezultat pentru o utilizare ulterioară sau doriți să mutați informațiile de la o sursă de date la alta. Power Apps furnizează funcția Collect pentru copierea datelor.
Dar înainte de a face acea copie, gândiți-vă cu atenție dacă este necesar. Multe situații pot fi rezolvate filtrând și modelând sursa de date subiacentă la cerere cu o formulă. Între dezavantajele realizării unei copii se numără:
- Două copii ale acelorași informații înseamnă că una dintre ele poate fi nesincronizată.
- Realizarea unei copii poate consuma o mare parte din memoria computerului, lățimea de bandă a rețelei și/sau timp.
- Pentru majoritatea surselor de date, copierea nu poate fi delegată, limitând volumul de date care poate fi mutat.
Următoarele exemple utilizează Produsesursă de date:
Pentru a crea această sursă de date ca o colecție, setați proprietatea OnSelect a unui Buton pentru a controla această formulă, deschideți modul Previzualizare, apoi selectați butonul:
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 }
)
)
Scopul nostru este să lucrăm cu un tabel derivat care să includă numai elementele în care s-a solicitat mai mult decât este disponibil și pentru care trebuie să plasăm o comandă:
Putem realiza această sarcină în mai multe moduri, toate producând același rezultat, cu diferite avantaje și dezavantaje.
Tabel modelare la cerere
Nu faceți o copie! Putem folosi următoarea formulă oriunde avem nevoie:
// 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"
)
Un domeniu de aplicare a înregistrărilor este creat de funcțiile Filter și AddColumns pentru a efectua operații de comparație și scădere, respectiv, cu câmpurile "Cantitate solicitată" și "Cantitate valabilă" ale fiecărei înregistrări.
În acest exemplu, funcția Filter poate fi delegată. Acest lucru este important, întrucât poate găsi toate produsele care îndeplinesc criteriile, chiar dacă acestea sunt doar câteva înregistrări dintr-un tabel de milioane. În acest moment, ShowColumns și AddColumns nu pot fi delegate, deci numărul real de produse care trebuie comandate este limitat. Dacă știți că dimensiunea acestui rezultat este întotdeauna relativ mică, această abordare este în regulă.
Și pentru că nu am făcut o copie, nu există nicio copie suplimentară a informațiilor de gestionat sau de căzut în afara datei.
ForAll la cerere
O altă abordare este să utilizați funcția ForAll pentru a înlocui funcțiile de formă de tabel:
ForAll( Products,
If( 'Quantity Requested' > 'Quantity Available',
{
Product: Product,
'Quantity To Order': 'Quantity Requested' - 'Quantity Available'
}
)
)
Această formulă poate fi mai simplă pentru ca unii oameni să citească și să scrie.
Nicio parte din delegabilă ForAll . Doar prima parte a tabelului Produse este evaluată, care ar putea fi o problemă dacă acest tabel este mare. Întrucât Filter ar putea fi delegată în exemplul anteriro, ar putea funcționa mai bine cu seturi mari de date.
Colectați rezultatul
În unele situații, poate fi necesară o copie a datelor. Poate fi necesar să mutați informațiile de la o sursă de date în alta. În acest exemplu, comenzile sunt plasate printr-un tabel Comandă nouă în sistemul unui furnizor. Pentru interacțiunile cu utilizatorul de mare viteză, se recomandă să memorați în cache o copie locală a unui tabel, astfel încât să nu existe latență de server.
Folosim același tabel pentru a modela, așa cum arată cele două exemple anterioare, dar colectăm rezultatul într-o colecție:
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 nu pot fi delegate. Ca urmare, cantitatea de date care pot fi mutate în acest mod este limitată.
Colectați în ForAll
În cele din urmă, putem efectua Colectarea direct în ForAllcadrul :
Clear( NewOrder );
ForAll( Products,
If( 'Quantity Requested' > 'Quantity Available',
Collect( NewOrder,
{
Product: Product,
'Quantity To Order': 'Quantity Requested' - 'Quantity Available'
}
)
)
)
Din nou, funcția ForAll nu poate fi delegată în acest moment. Dacă tabelul nostru Produse este mare, ForAll uitați-vă doar la primul set de înregistrări și este posibil să pierdem unele produse care trebuie comandate. Dar pentru tabelele pe care le cunoaștem sunt mici, această abordare este în regulă.
Rețineți că nu capturăm rezultatul .ForAll Funcția Collect calls made from within it returnează sursa de date NewOrder pentru toate înregistrările, care ar putea adăuga până la numeroase date dacă le-am captura.
Mapați tabelul într-o componentă
Consultați Mapare tabele.