Bendrinti naudojant


Funkcija ForAll

Taikoma: Drobės programos Darbalaukio srautai Modeliu pagrįstos programos Power Pages Power Platform CLI

Apskaičiuoja reikšmes ir atlieka veiksmus su visais įrašais lentelėje.

Aprašo

Visoms funkcija įvertina formulę visiems įrašams lentelėje. Formulė gali apskaičiuoti reikšmę ir (arba) atlikti veiksmus, pvz., modifikuoti duomenis arba dirbti su ryšiu. Norėdami įvertinti formulę vienam įrašui, naudokite funkciją With.

Norėdami vykdyti iteraciją pagal skaičių, naudokite funkciją Sequence kartu su funkcija ForAll.

Formulėje pasiekiami šiuo metu apdorojamo įrašo laukai. Naudokite operatorių ThisRecord arba tiesiog laukus, kaip ir bet kurią kitą reikšmę, nurodykite pagal pavadinimus. Operatorių As taip pat galima naudoti norint pavadinti apdorojamą įrašą. Tai gali padėti lengviau suprasti formulę ir įdėtuosius įrašus pritaikyti neįgaliesiems. Norėdami gauti daugiau informacijos, žr. tolesnius pavyzdžius ir įrašą apie darbą su įrašų aprėptimi.

Pateikiama reikšmė

Kiekvieno formulės įvertinimo rezultatas pateikiamas lentelėje ta pačia tvarka, kaip ir įvesties lentelės.

Jei formulės rezultatas yra viena reikšmė, gauta lentelė bus vieno stulpelio. Jei formulės rezultatas yra įrašas, gautoje lentelėje bus įrašai su tais pačiais stulpeliais kaip ir rezultato įrašas.

Jei formulės rezultatas yra tuščia reikšmė, to įvesties įrašo rezultatų lentelėje įrašų nėra. Tokiu atveju rezultatų lentelėje bus mažiau įrašų nei šaltinio lentelėje.

Veiksmų atlikimas

Formulėje gali būti funkcijų, kurios atlieka veiksmus, pvz., modifikuoja duomenų šaltinio įrašus naudodamos funkcijas Patch ir Collect. Formulė taip pat gali iškviesti metodus ryšiams. Naudojant operatorių ;, su įrašu galima atlikti keletą veiksmų. Negalite modifikuoti lentelės, su kuria veiksmus atlieka funkcija ForAll.

Rašant formulę reikia nepamiršti, kad įrašai gali būti apdorojami bet kokia tvarka ir, kai įmanoma, lygiagrečiai. Pirmasis lentelės įrašas gali būti apdorojamas po paskutiniojo įrašo.

Pasirūpinkite, kad būtų išvengta priklausomybių tvarkos nustatymo. Dėl šios priežasties su funkcija ForAll negalite naudoti funkcijų UpdateContext, Clear ir ClearCollect, nes, jas naudojant, būtų lengvai galima laikyti kintamuosius, kuriems tai galėtų turėti įtakos. Collect naudoti galite, tačiau įrašų įtraukimo tvarka yra neapibrėžta.

Kelios funkcijos, modifikuojančios duomenų šaltinius, įskaitant Collect, Remove ir Update, kaip pateikiamą reikšmę pateikia pakeistą duomenų šaltinį. Jei šios reikšmės pateikiamos su kiekvienu lentelės ForAll įrašu, jos gali būti didelės ir naudoti daug išteklių. Taip pat galite pastebėti, kad šios pateikiamos reikšmės yra ne tokios, kokių tikėjotės, nes ForAll gali veikti lygiagrečiai ir atskirti šių funkcijų šalutinius poveikius negaunant rezultato. Jei ForAll pateikiama reikšmė, o taip dažnai yra duomenų modifikavimo funkcijų atveju, nebus naudojama, problemų dėl išteklių arba tvarkos nekyla. Tačiau, jei naudojate ForAll rezultatą ir vieną iš funkcijų, pateikiančių duomenų šaltinį, atidžiai pagalvokite, kaip galite susisteminti rezultatus, ir jį pirmiausia išbandykite mažuose duomenų rinkiniuose.

Alternatyvos

Daug „Power Apps“ funkcijų naudodamos vieno stulpelio lentelę vienu metu gali apdoroti daugiau nei vieną reikšmę. Pavyzdžiui, funkcija Len gali apdoroti teksto reikšmių lentelę, pateikdama ilgių lentelę taip pat, kaip tai galėtų atlikti ForAll. Tai daugeliu atvejų gali panaikinti poreikį naudoti ForAll, gali būti efektyviau ir lengviau skaitoma.

Dar vienas aspektas yra tai, kad ForAll negali būti perduodama, o kitos funkcijos, pvz., Filter, gali.

Perdavimas

Kai ši funkcija naudojama su duomenų šaltiniu, jos perduoti negalima. Bus gauta tik pirmoji duomenų šaltinio dalis, o tada bus taikoma funkcija. Rezultatas gali apimti ne visą informaciją. Kuriant gali pasirodyti įspėjimas, priminsiantis šį apribojimą ir pasiūlysiantis, kur įmanoma, pereiti prie perduodamųjų alternatyvų. Norėdami gauti daugiau informacijos, žr. perdavimo apžvalgą.

Sintaksė

ForAll(lentelė,formulė )

  • Lentelė - būtina. Lentelė, su kuria reikia atlikti veiksmus.
  • Formulė - būtina. Formulė, kurią reikia įvertinti visuose lentelės įrašuose.

Pavyzdžiai

Skaičiavimai

Toliau pateiktuose pavyzdžiuose naudojamas duomenų šaltinis Kėlimas kvadratu:

Kvadratų pavyzdys.

Norėdami sukurti šį duomenų šaltinį kaip rinkinį, nustatykite, kad ypatybės OnSelect, priklausančios valdikliui Mygtukas, reikšmė būtų ši formulė, atidarykite peržiūros režimu ir pasirinkite mygtuką:

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

Formulė Aprašo Rezultatas
ForAll( kvadratai, sqrt( reikšmė )

Sqrt( kvadratai )
Apskaičiuoja visų įvesties lentelės įrašų stulpelio Reikšmė kvadratinę šaknį. Sqrt funkcija taip pat gali būti naudojama su vieno stulpelio lentele, todėl šį pavyzdį galima atlikti nenaudojant "ForAll". Sqrt pavyzdys.
ForAll( kvadratai, galia( reikšmė, 3 ) ) Trečiuoju laipsniu pakelia visų įvesties lentelės įrašų stulpelį Reikšmė. Funkcija Power nepalaiko vieno stulpelio lentelių. Todėl šiuo atveju reikia naudoti ForAll. Galios pavyzdys.

Ryšio naudojimas

Toliau pateiktuose pavyzdžiuose naudojamas Frazėsduomenų šaltinis:

Išraiškų pavyzdys.

Norėdami sukurti šį duomenų šaltinį kaip rinkinį, nustatykite, kad ypatybės OnSelect, priklausančios valdikliui Mygtukas, reikšmė būtų ši formulė, atidarykite peržiūros režimu ir pasirinkite mygtuką:

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

Šiame pavyzdyje taip pat naudojamas "Translator Microsoft " ryšys. Norėdami įtraukti šį ryšį į programą, žr. straipsnį apie ryšių valdymą.

Formulė Aprašo Rezultatas
ForAll(išraiškos, MicrosoftTranslator.Translate( reikšmė, "es")) Visų lentelės Frazės įrašų stulpelio Value turinys išverčiamas į ispanų kalbą (sutrumpintai – „es“). Pavyzdys, kurios reikšmės yra „es“.
ForAll(išraiškos, MicrosoftTranslator.Translate( reikšmė, "fr")) Visų lentelės Frazės įrašų stulpelio Value turinys išverčiamas į prancūzų kalbą (sutrumpintai – „fr“). Pavyzdys, kurios reikšmės yra „fr“.

Lentelės kopijavimas

Kartais reikia filtruoti, formuoti, rikiuoti ir valdyti duomenis. „Power Apps“ siūlo daugelį tai padaryti leidžiančių funkcijų, pvz., Filter, AddColumns ir Sort. Dibdami su „Power Apps“, su kiekviena lentele elkitės kaip su reikšme, kad galėtumėte pritaikyti formules ir lengvai panaudoti.

Kartais galite norėti padaryti šio rezultato kopiją, kad galėtumėte panaudoti vėliau, arba galite norėti perkelti informaciją iš vieno duomenų šaltinio į kitą. „Power Apps“ duomenims kopijuoti suteikia funkciją Collect.

Tačiau prieš darydami šią kopiją, gerai pagalvokite, ar to reikia. Daugelyje situacijų gali pakakti atitinkamą duomenų šaltinį filtruoti ir suformuoti pagal poreikį pritaikius formulę. Toliau pateikt kai kurie neigiami kopijos kūrimo aspektai.

  • Dvi tos pačios informacijos kopijos reiškia, kad viena iš jų gali būti nesinchronizuota.
  • Kopijuojant gali būti sunaudota daug kompiuterio atminties, tinklo pralaidumo ir (arba) laiko.
  • Daugelio duomenų šaltinių atveju kopijavimo negalima perduoti, todėl perkeliamų duomenų kiekis yra ribotas.

Toliau pateiktuose pavyzdžiuose naudojamas Produktaiduomenų šaltinis:

Produktų pavyzdžiai duomenų šaltinis.

Norėdami sukurti šį duomenų šaltinį kaip rinkinį, nustatykite, kad ypatybės OnSelect, priklausančios valdikliui Mygtukas, reikšmė būtų ši formulė, atidarykite peržiūros režimu ir pasirinkite mygtuką:

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 }
    )
)

Mūsų tikslas yra naudoti išvestinę lentelę, kurioje yra tik tokios prekės, kurių prašoma daugiau nei yra, ir kurias reikia užsakyti:

Stalinės ne darbo vietos, kaip ir kiti, pavyzdžiai.

Šią užduotį galime atlikti keliais skirtingais būdais, kuriuos naudojant gaunamas tas pats rezultatas (kiekvienas iš jų turi savo privalumų ir trūkumų).

Lentelės formavimas pareikalavus

Nekurkite kopijos! Šią formulę galime naudoti visur, kur reikia:

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

Funkcijos Filter ir AddColumns sukuria įrašų aprėptį, kad būtų galima atlikti lyginimo ir atėmimo operacijas, naudojant, atitinkamai, kiekvieno įrašo laukus Prašomas kiekis bei Turimas kiekis.

Šiame pavyzdyje funkciją Filter galima perduoti. Tai svarbu, nes ji gali rasti visus produktus, atitinkančius kriterijus, net jei iš milijonų įrašų lentelės tokių įrašų yra tik keli. Šiuo metu ShowColumns ir AddColumns negalima pakeisti, todėl faktinis produktų, kuriuos reikia užsakyti, skaičius bus ribotas. Jei žinote, kad šio rezultato dydis visada bus santykinai mažas, šis metodas yra tinkamas.

O todėl, kad nesukūrėme kopijos, nėra papildomos informacijos kopijos, kurią reikia valdyti ar kuri gali pasenti.

ForAll pareikalavus

Kitas būdas yra funkciją ForAll naudoti vietoj lentelės formavimo funkcijų:

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

Šią formulę kai kuriems asmenims gali būti paprasčiau rskaityti ir rašyti.

Jokios ForAll dalies negalima perduoti. Bus įvertinta tik pirmoji lentelės Produktai dalis, ir dėl to, jei ši lentelė yra didelė, gali kilti problemų. Kadangi ankstesniame pavyzdyje Filter buvo galima perduoti, ji gali geriau veikti su dideliais duomenų rinkiniais.

Rezultato surinkimas

Kai kuriose situacijose gali reikėti duomenų kopijos. Gali reikėti informaciją iš vieno duomenų šaltinio perkelti į kitą. Šiame pavyzdyje užsakymai sukuriami naudojant lentelę NewOrder, esančią tiekėjo sistemoje. Kai vartotojų sąveikia yra greita, rekomenduojame vietinę lentelės kopiją išsaugoti podėlyje, kad nebūtų serverių gaišties.

Naudojame tokią pačią lentelių formą, kaip ankstesniuose dviejuose pavyzdžiuose, tačiau rezultatą fiksuojame rinkinyje:

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 " ir "Collect " negalima perduoti. Todėl duomenų, kuriuos galima perkelti šiuo būdu, kiekis yra ribotas.

Collect naudojant ForAll

Galiausiai, Collect galime atlikti tiesiogiai naudodami ForAll:

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

Vėlgi, funkcijos ForAll šiuo metu perduoti negalima. Jei mūsų lentelė Produktai yra didelė, ForAll peržiūrės tik pirmąjį įrašų rinkinį, todėl galime praleisti keletą produktų, kuriuos reikia užsakyti. Tačiau lentelėms, kurios, kaip žinome, išliks mažos, šis metodas yra tinkamas.

Atkreipkite dėmesį, kad nefiksuojame ForAll rezultato. Funkcijos Collect kvietimai, atlikti iš šios funkcijos, visiems įrašams pateiks duomenų šaltinį NewOrder, todėl jei duomenys bus įrašomi, jų apimtis gali tapti didelė.

Lentelės susiejimas komponente

Žr. Lentelių susiejimas.