Dijeli putem


ForAll (opis funkcije)

Odnosi se na: Aplikacije od gotovih gradivnih elemenata Tokovi radne površine CLI aplikacije stvorene prema Power Platform modelu

Izračunava vrijednosti i izvršava radnje za sve zapise u tablici.

Opis

Funkcija ForAll procjenjuje formulu za sve zapise u tablici. Formula može izračunati neku vrijednost i/ili izvoditi radnje, poput izmjene podataka ili rada s nekom vezom. Koristite funkciju With za procjenu formule za jedan zapis.

Koristite funkciju Sequence s funkcijom ForAll za ponavljanje na temelju zbroja.

Polja zapisa koja se trenutno obrađuju dostupna su unutar formule. Upotrijebite ThisRecord operator ili jednostavno spomenite polja imenom na isti način kao i bilo koju drugu vrijednost. Za imenovanje zapisa koji se obrađuje možete upotrijebiti i As operator, a to vam može pomoći učiniti formulu razumljivijom, a ugniježđene zapise pristupačnijima. Više informacija potražite u primjerima u nastavku i radu u djelokrugu zapisa.

Povratna vrijednost

Rezultat svakog procjenjivanja formule vraća se u tablicu istim redoslijedom kao ulazna tablica.

Ako je rezultat formule jedna vrijednost, dobivena tablica bit će jednostupčana. Ako je rezultat formule zapis, rezultirajuća tablica sadrži zapise s istim stupcima kao i zapis rezultata.

Ako je rezultat formule prazna vrijednost, tada nema zapisa u tablici rezultata za taj ulazni zapis. U ovom će slučaju biti manje zapisa u tablici rezutlata nego u izvornoj tablici.

Poduzimanje akcije

Formula može uključivati funkcije koje poduzimaju akciju, poput izmjene zapisa nekog izvora podataka funkcijama Patch i Collect. Formula također može pozivati metode na vezama. Za svaki zapis može se izvesti više radnji korištenjem operatora ;. Ne možete mijenjati tablicu koja podliježe funkciji ForAll.

Prilikom pisanja formule imajte na umu da se zapisi mogu obrađivati bilo kojim redoslijedom i, kad je to moguće, paralelno. Prvi zapis tablice može se obraditi nakon posljednjeg zapisa.

Pazite da izbjegnete ovisnosti redoslijeda. Iz tog razloga ne možete koristiti funkcije UpdateContext, Clear i ClearCollect unutar funkcije ForAll jer bi ih se lako moglo koristiti za čuvanje varijabli koje bi bile osjetljive na to dejstvo. Možete koristiti funkciju Collect, ali redoslijed dodavanja zapisa nije definiran.

Nekoliko funkcija koje mijenjaju izvore podataka, uključujući Collect, Remove i Update, kao povratnu vrijednost vraćaju izmijenjeni izvor podataka. Te povratne vrijednosti mogu biti velike i trošiti značajne resurse ako se vrate za svaki zapis tablice ForAll. Također, možete otkriti da te povratne vrijednosti nisu ono što očekujete jer funkcija ForAll može raditi paralelno i može odvojiti nuspojave tih funkcija od dobivanja rezultata. Ako nije upotrijebljena povratna vrijednost funkcije ForAll, što je često slučaj s funkcijama izmjene podataka, tada se neće stvoriti povratna vrijednost i nije potrebno brinuti o resursima ili redoslijedu. Ali, ako koristite rezultat funkcije ForAll i jednu funkciju koja vraća neki izvor podataka, dobro razmislite kako strukturirati rezultat i prvo isprobajte na malim skupovima podataka.

Alternative

Mnoge funkcije u aplikaciji Power Apps mogu istovremeno obrađivati više vrijednosti pomoću jednostupčane tablice. Na primjer, funkcija Len može obraditi tablicu tekstnih vrijednosti, vraćajući tablicu dužina, na isti način na koji bi to radila funkcija ForAll. To može eliminirati potrebu za uporabom funkcije ForAll u mnogim slučajevima, može biti učinkovitije i lakše za čitanje.

Još jedna stvar je ta što se ForAll ne može delegirati dok druge funkcije poput Filter mogu.

Delegacija

Kad se koristi uz izvor podataka, ta se funkcija ne može delegirati. Dohvatit će se samo prvi dio izvora podataka, a zatim će se primijeniti funkcija. Rezultat možda neće predstavljati potpunu priču. Upozorenje će se možda pojaviti u vrijeme stvaranja sadržaja da bi vas podsjetilo na to ograničenje i predložilo prebacivanje na rješenja koja je moguće delegirati kad god je to moguće. Dodatne informacije potražite u odjeljku Pregled delegiranja.

Sintaksa

ForAll( Table, Formula )

  • Table – obavezno. Tablica na koju se djeluje.
  • Formula – obavezno. Formula koju treba procijeniti za sve zapise tablice.

Primjeri

Izračuni

Sljedeći primjeri koriste Squaresizvor podataka:

Primjer kvadrata.

Da biste stvorili ovaj izvor podataka kao zbirku, postavite svojstvo OnSelect kontrole Button prema ovoj formuli, otvorite način pretpregleda, a zatim odaberite gumb:

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

Formula Opis Rezultat
ForAll( Squares, Sqrt( Value ) )

Sqrt( Squares )
Za sve zapise ulazne tablice izračunava kvadratni korijen stupca Value. Funkcija Sqrt može se koristiti i s tablicom s jednim stupcem, što omogućuje izvođenje ovog primjera bez korištenja ForAll-a. Primjer za Sqrt.
ForAll( Squares, Power( Value, 3 ) ) Za sve zapise ulazne tablice diže stupac Value na treću potenciju. Funkcija Power ne podržava jednostupčane tablice. Stoga se u ovom slučaju ForAll mora upotrijebiti. Primjer za Power.

Korištenje veze

Sljedeći primjeri koriste Expressionsizvor podataka:

Primjer izraza.

Da biste stvorili ovaj izvor podataka kao zbirku, postavite svojstvo OnSelect kontrole Button prema ovoj formuli, otvorite način pretpregleda, a zatim odaberite gumb:

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

U ovom primjeru se također koristi veza Microsoft Translator. Da biste ovu vezu dodali svojoj aplikaciji, pogledajte članak o tome kako upravljati vezama.

Formula Opis Rezultat
ForAll( Expressions, MicrosoftTranslator.Translate( Value, "es" ) ) Za sve zapise u tablici Expressions prevedite sadržaj stupca Value na španjolski (skraćeno „es”). Primjer s vrijednošću „es”.
ForAll( Expressions, MicrosoftTranslator.Translate( Value, "fr" ) ) Za sve zapise u tablici Expressions prevedite sadržaj stupca Value na francuski (skraćeno „fr”). Primjer s vrijednošću „fr”.

Kopiranje tablice

Ponekad trebate filtrirati, oblikovati, sortirati i manipulirati podatcima. Servis Power Apps pruža brojne funkcije za to, kao što su Filter, AddColumns i Sort. Servis Power Apps postupa sa svakom tablicom kao sa vrijednosti i omogućava joj da teče kroz formule i lako se iskoristi.

A ponekad želite kopirati ovaj rezultat za kasniju upotrebu ili želite premjestiti podatke s jednog izvora podataka na drugi. Aplikacija Power Apps koristi funkciju Collect za kopiranje podataka.

Ali prije nego što napravite tu kopiju, dobro razmislite je li potrebna. Mnoge se situacije mogu riješiti filtriranjem i oblikovanjem temeljnog izvora podataka na zahtjev pomoću formule. Neki od nedostataka izrade kopije su sljedeći:

  • Dvije kopije istih podataka znače da jedna od njih može ispasti iz sinkronizacije.
  • Izrada kopije može potrošiti velik dio računalne memorije, mrežnog pojasa i/ili vremena.
  • Za većinu izvora podataka kopiranje se ne može delegirati, što ograničava koliko podataka se može premjestiti.

Sljedeći primjeri koriste Productsizvor podataka:

Primjer izvora podataka proizvoda.

Da biste stvorili ovaj izvor podataka kao zbirku, postavite svojstvo OnSelect kontrole Button prema ovoj formuli, otvorite način pretpregleda, a zatim odaberite gumb:

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š je cilj raditi s izvedenom tablicom koja sadrži samo one stavke gdje je zatraženo više nego što je dostupno i za koje je potrebno naručiti:

Primjer izvedene tablice.

Ovaj zadatak možemo obaviti na nekoliko različitih načina, a svi oni daju jednak rezultat, uz različite prednosti i nedostatke.

Oblikovanje tablice na zahtjev

Ne pravite tu kopiju! Sljedeću formulu možemo upotrijebiti bilo gdje:

// 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"
)

Djelokrug zapisa stvara se funkcijama Filter i AddColumns koje izvode operacije usporedbe, odnosno oduzimanja, s poljima 'Quantity Requested' i 'Quantity Available' svakog zapisa.

U ovom se primjeru funkcija Filter može delegirati. Ovo je važno jer se mogu pronaći svi proizvodi koji zadovoljavaju kriterije, čak i ako je to samo nekoliko zapisa u tablici koja ih sadrži milijune. U ovom trenutku, funkcije ShowColumns i AddColumns nije moguće delegirati, pa će stvarni broj proizvoda koji se trebaju naručiti biti ograničen. Ako znate da će veličina ovog rezultata uvijek biti relativno mala, ovaj je pristup u redu.

Budući da nismo napravili kopiju, ne postoji dodatni primjerak podataka kojim bi se upravljalo ili koji bi zastario.

ForAll na zahtjev

Drugi pristup je upotreba funkcije ForAll kako bi se zamijenile funkcije za oblikovanje tablice:

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

Ova će formula možda nekim ljudima biti jednostavnija za čitanje i pisanje.

Nijedan dio funkcije ForAll ne može se delegirati. Samo će se prvi dio tablice Proizvodi procjenjivati, što bi moglo predstavljati problem ako je ta tablica velika. Budući da se funkcija Filter mogla delegirati u prethodnom primjeru, mogla bi bolje funkcionirati s velikim skupovima podataka.

Prikupljanje rezultata

U nekim situacijama može biti potrebna kopija podataka. Možda ćete trebati premjestiti podatke iz jednog izvora podataka u drugi. U ovom se primjeru narudžbe postavljaju putem tablice NewOrder na sustavu dobavljača. Za potrebe korisničke interakcije velike brzine možda ćete željeti predmemorirati lokalni primjerak tablice kako ne bi bilo kašnjenja poslužitelja.

Koristimo isti oblik tablice kao u prethodna dva primjera, ali rezultat bilježimo u zbirku:

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 se delegirati. Kao rezultat toga, količina podataka koja se može premjestiti na ovaj način ograničena je.

Collect unutar ForAll

Na koncu, možemo izvesti funkciju Collect izravno unutar funkcije ForAll:

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

Opet, funkcija ForAll trenutačno se ne može delegirati. Ako je naša tablica Products velika, funkcija ForAll potražit će samo prvi skup zapisa i možda će nam nedostajati neki proizvodi koje je potrebno naručiti. No, za tablice za koje znamo da će ostati malene, ovaj je pristup u redu.

Imajte na umu da ne bilježimo rezultat funkcije ForAll. Pozivi funkcije Collect obavljeni unutar nje vratit će izvor podataka NewOrder za sve zapise, što bi moglo rezultirati brojnim podatcima ako bismo ih bilježili.

Mapiranje tablice u komponenti

Pogledajte Mapiranje tablica.