Deli putem


ForAll Funkciju

Odnosi se na: Canvas aplikacije Copilot Studio Desktop teku aplikacije zasnovane na modelima Power Platform CLI Dataverse funkcije Power Pages

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, dobijena tabela je 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, onda ne postoji zapis u tabeli rezultata za taj ulazni zapis. U ovom slučaju, u tabeli rezultata ima manje zapisa od izvorne tabele.

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 da izmenite tabelu koja predstavlja temu 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 ClearCollectForAll unutar funkcije zato što se lako mogu koristiti za čuvanje promenljivih koje su osetljive na taj efekat. 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 povratne vrednosti mogu biti velike i koristiti značajne resurse ako se vraćaju za svaki zapis u tabeli ForAll . Možda ćete takođe uočiti ForAll da ove povratne vrednosti nisu ono što očekujete jer mogu paralelno da funkcionišu i mogu da razdvoje numeričke efekte tih funkcija od dobijanja rezultata. Ako se povratna ForAll vrednost iz ne koristi, što je često slučaj sa funkcijama za izmenu podataka, onda se povratna vrednost neće kreirati i ne postoje problemi sa resursima ili redosledom. Međutim ForAll , ako koristite rezultat neke od funkcija koje vraćaju izvor podataka, pažljivo razmislite o tome kako ćete struktur brojiti rezultat i isprobajte ga prvo u malim skupovima podataka.

Alternative

Mnoge funkcije u programskom dodatku Power Apps mogu da obrađuju više vrednosti odjednom pomoću 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, koja bi mogla ForAll . To može da eliminiše potrebu za korišćenjem ForAll u mnogim slučajevima, može da bude efikasnije i lakše je za čitanje.

Druga razmatranja je da ForAll nije moguće izbrisati dok druge funkcije mogu biti, kao što je Filter.

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)

  • Tabela - Obavezno. Tabela na koju treba reagovati.
  • Formula - Obavezno. Formula za izračunavanje svih zapisa tabele.

Primeri

Izračunavanja

Sledeći primeri koriste Squaresizvor podataka:

Primer kvadrata.

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( Kvadrati, Sqrt( Vrednost )

Skrt( kvadrati )
Izračunava kvadratni koren od kolone Vrednost za sve zapise tabele unosa. Funkcija Sqrt može da se koristi i sa tabelom sa jednom kolonom, što omogućava izvršavanje ovog primera bez korišćenja ForAll. Primer funkcije Sqrt.
ForAll( Kvadrati, Power( Vrednost, 3 ) Izračunava kub od kolone Vrednost za sve zapise tabele unosa. Power funkcija ne podržava tabele sa jednom kolonom. Stoga, ForAll morate da koristite u ovom slučaju. Primer funkcije Power.

Korišćenje veze

Sledeći primeri koriste Expressionsizvor podataka:

Primer izraza.

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“). Primer sa vrednošću
ForAll(Expressions, MicrosoftTranslator.Translate(Value, "fr")) Za sve zapise u tabeli Expressions, prevedite sadržaj kolone Value na španski (skraćeno „fr“). Primer sa vrednošću

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 tretira svaku tabelu kao vrednost, omogućavajući im da teku kroz formule i lako se koriste.

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, pažljivo razmislite ako 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 nije moguće delegirati kopiranje, ograničjući količinu podataka koja se može premestiti.

Sledeći primeri koriste Productsizvor podataka:

Primer izvora podataka o proizvodima.

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:

Primer derivata tabele.

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. U ovom trenutku nije moguće delegirati ShowColumns i AddColumns , tako da je stvarni broj proizvoda koje treba poručiti ograničen. Ako znate da je veličina ovog rezultata uvek relativno mala, ovaj pristup je u redu.

Pošto nismo kreirali kopiju, ne postoji dodatna kopija informacija za upravljanje ili zakašnje.

ForAll na zahtev

Drugi pristup je korišćenje funkcije ForAll za zamenu funkcija oblikovanja 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 nije ForAll moguće izbrisati. Procenjuje se samo prvi deo tabele "Proizvodi", što može biti problem ako je ova 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 interakcije korisnika velike brzine, možda ćete želeti da keširajte 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 se ne mogu delegirati. Kao rezultat, količina podataka koja se može premeštati na ovaj način je ograničena.

Prikupljanje u okviru ForAll

Na kraju, možemo da izvršimo prikupljanje direktno u okviru ForAll:

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

Ponovo, funkciju ForAll trenutno nije moguće delegirati. Ako je naša tabela "Proizvodi" velika, ForAll pogledajte samo prvi skup zapisa i možda će nam nedostajati neki proizvodi koji treba da se poruče. Međutim, za tabele za koje znamo da su i dalje male, ovaj pristup je u redu.

Imajte na umu da ne hvatamo rezultat ForAll. Pozivi funkcije "Prikupljanje" upućeni u okviru funkcije vraća izvor podataka NewOrder za sve zapise, što može da sabira brojne podatke ako ih hvatamo.

Mapiranje tabele u komponenti

Pogledajte Mapiranje tabela.