ForAll függvény
A következőkre vonatkozik: Vászonalapú alkalmazások
Asztali folyamatok
Modellvezérelt alkalmazások
Power Pages
Power Platform CLI
Értékeket számít és műveleteket végez egy tábla összes rekordján.
Ismertetés
A ForAll függvény egy tábla összes rekordjára vonatkozóan kiértékel egy képletet. A képlet kiszámít egy értéket és/vagy műveleteket hajt végre, például adatokat módosít vagy egy kapcsolatot használ. A With függvény használatával kiértékelheti az egyetlen bejegyzéshez tartozó képletet.
A Sequence függvényt használhatja a ForAll függvénnyel együtt a számláló alapján végzett iterációra.
Az aktuálisan feldolgozás alatt álló rekordmezők elérhetők a képletben. Használja a ThisRecord operátort, vagy egyszerűen hivatkozzon név szerint a mezőkre, ahogy más értéket is hivatkozna. Az As operátor a feldolgozás alatt álló rekord elnevezésére használatos, amellyel könnyebben érthető a képlet, és hozzáférhetőbbek a beágyazott rekordok. További információkért lásd az alábbi példákat és a rekord hatókörével való munkát.
Visszaküldés értéke
A függvény egy táblában adja vissza az egyes képletek értékelését, ugyanabban a sorrendben, ahogy a képletek a bemeneti táblában szerepeltek.
Ha a képlet eredménye egyetlen érték, a visszaadott tábla egyoszlopos lesz. Ha a képlet eredménye egy rekord, a visszaadott tábla rekordjai ugyanazokat az oszlopokat tartalmazzák, mint az eredményrekord.
Ha a képlet eredménye egy üres érték, akkor az adott bemeneti rekord eredménytáblájában nincs egy rekord sem. Ebben az esetben, az eredménytáblában kevesebb rekord lesz, mint a forrástáblában.
Műveletvégzés
A képlet olyan függvényeket is tartalmazhat, amelyek műveleteket végeznek, például módosítják egy adatforrás rekordjait a Patch és Collect függvénnyel. A képlet metódusokat is hívhat a kapcsolatokhoz. Rekordonként több művelet is elvégezhető a ; operátor használatával. A ForAll függvény tárgyaként használt tábla nem módosítható.
A képlet megírásakor vegye figyelembe, hogy a rekordok bármilyen sorrendben, és ha lehetséges, akár párhuzamosan is feldolgozhatók. A tábla első rekordja az utolsó rekord után is feldolgozható.
Ügyeljen arra, hogy ne írjon elő függőségeket. Emiatt az UpdateContext, a Clear és a ClearCollect függvény nem használható a ForAll függvényen belül, mivel ezek olyan változókat tartalmazhatnak, amelyek ki vannak téve ennek a hatásnak. A Collect függvény használható, de a rekordok hozzáadásának nincs meghatározott sorrendje.
Számos olyan függvény, amely módosítja az adatforrásokat (például a Collect, a Remove vagy az Update) a módosított adatforrást adja vissza értékként. Ezek a visszaadott értékek nagy méretűek lehetnek és jelentős erőforrás-használattal járhatnak, ha a függvény a ForAll tábla minden rekordjához visszaadja őket. Az is előfordulhat, hogy a visszaadott értékek nem a várt értékek lesznek, mivel a ForAll párhuzamos működésre is képes, és elválaszthatja a függvények mellékhatásait az eredményeik lekérésétől. Ha a ForAll visszaadott értéke nem lesz felhasználva, ami az adatmódosító függvények esetében általában így van, akkor a visszaadott érték nem jön létre, így nem okozhat gondot sem az erőforrás-használat, sem a sorrend. Azonban ha egy ForAll és egy adatforrást visszaadó függvény eredményét használja, akkor alaposan gondolja át, milyen legyen az eredmény szerkezete, és először végezzen próbát egy kisebb adatkészleteken.
Alternatív megoldások
A Power Apps számos függvénye képes egyszerre több értéket is feldolgozni egyoszlopos táblák használatával. A Len függvény például ugyanúgy képes feldolgozni egy szöveges értékeket tartalmazó táblát és visszaadni egy hosszú táblát, mint a ForAll. Ez sok esetben szükségtelenné teszi a ForAll használatát, ráadásul hatékonyabb és könnyebben olvasható is.
Egy másik szempont, hogy a ForAll nem delegálható, míg más függvények, például a Filter, igen.
Meghatalmazás
Adatforrással való használat esetén ez a funkció nem delegálható. Csak az adatforrás első részét kéri le, és utána alkalmazza a funkciót. Előfordulhat, hogy az eredmény nem tükrözi a teljes képet. A szerkesztés során megjelenhet egy figyelmeztetés, amely emlékezteti erre a korlátozásra, és javasolja, hogy lehetőség szerint váltson delegálható alternatívára. További információkért lásd: a delegálás áttekintése.
Szintaxis
ForAll(Tábla; Képlet)
- Tábla - Kötelező. A tábla, amelyen műveleteket kíván végezni.
- Képlet - kötelező. A tábla összes rekordjára vonatkozóan kiértékelendő képlet.
Példák
Számítások
Az alábbi példák a Négyzetekadatforrást használják:
Az adatforrás gyűjteményként való létrehozásához állítsa be a képlet Button (Gomb) vezérlőelemének OnSelect tulajdonságát, nyissa meg az Előnézeti módot, majd válassza a következő gombot:
ClearCollect( Squares, [ "1", "4", "9" ] )
Képlet | Ismertetés | Eredmény |
---|---|---|
ForAll( Négyzetek, Sqrt( Érték ) ) Sqrt( Négyzetek ) |
A bemeneti tábla összes rekordjára vonatkozóan kiszámolja az Érték oszlop négyzetgyökét. Az Sqrt függvény egyoszlopos táblával is használható, így a példa a ForAll használatanélkül is elvégezhető. |
![]() |
ForAll( Négyzetek, Hatvány( Érték, 3 ) ) | A bemeneti tábla összes rekordjára vonatkozóan a harmadik hatványra emeli a Value (Érték) oszlop értékeit. A Power (Hatvány) függvény nem támogatja az egyoszlopos táblákat. Ezért ebben az esetben a ForAll függvényt kell használni. |
![]() |
Kapcsolat használata
Az alábbi példák a Kifejezésekadatforrást használják:
Az adatforrás gyűjteményként való létrehozásához állítsa be a képlet Button (Gomb) vezérlőelemének OnSelect tulajdonságát, nyissa meg az Előnézeti módot, majd válassza a következő gombot:
ClearCollect( Expressions, [ "Hello", "Good morning", "Thank you", "Goodbye" ] )
Ez a példa egy Microsoft Translator-kapcsolatot is használ. A kapcsolatnak az alkalmazáshoz való hozzáadásával kapcsolatban lásd a kapcsolatok kezelésére vonatkozó cikket.
Képlet | Ismertetés | Eredmény |
---|---|---|
ForAll(Kifejezések, MicrosoftTranslator.Translate( érték, "es")) | A Kifejezések tábla összes rekordjában lefordítja az Érték oszlop tartalmát spanyol nyelvre (amelynek rövidítése: „es”). |
![]() |
ForAll(Kifejezések, MicrosoftTranslator.Translate( Érték, "fr")) | A Kifejezések tábla összes rekordjában lefordítja az Érték oszlop tartalmát francia nyelvre (amelynek rövidítése: „fr”). |
![]() |
Tábla másolása
Időnként szükség lehet az adatok szűrésére, alakítására, rendezésére vagy módosítására. Power Apps számos függvényt tartalmaz ennek végrehajtásához, például a Filter, az AddColumns és a Sort függvényt. A Power Apps minden táblát egy értékként kezel, ami megkönnyíti a képletekben való feldolgozását és felhasználását.
Néha az eredményt későbbi használat céljából lemásolhatja, vagy áthelyezheti az adatokat az egyik adatforrásból a másikba. A Power Apps a Collect függvénnyel teszi lehetővé az adatok másolását.
Azonban a másolás elkészítése előtt gondolja át, hogy szükség van-e rá. Sok esetben az is elég, ha a rendelkezésre álló adatforrást egy képlettel megszűri vagy módosítja. A másolat készítése több szempontból lehet problémás:
- Ha ugyanazon adatokat két példányban tárolja, az ahhoz vezethet, hogy az egyik példány nem lesz szinkronban, nem lesz naprakész.
- A másolat elkészítése rengeteg memóriát, hálózati sávszélességet és időt igényelhet.
- A legtöbb adatforrás esetében a másolást nem lehet delegálni, ami korlátozza az áthelyezhető adatok mennyiségét.
Az alábbi példák a Termékekadatforrást használják:
Az adatforrás gyűjteményként való létrehozásához állítsa be a képlet Button (Gomb) vezérlőelemének OnSelect tulajdonságát, nyissa meg az Előnézeti módot, majd válassza a következő gombot:
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 }
)
)
A célunk az, hogy olyan származtatott táblán tudjunk dolgozni, amely csak azokat az elemeket tartalmazza, amelyből több lett kérve (Quantity Requested), mint amennyi rendelkezésre áll (Quantity Available), vagyis amelyekből rendelnünk kell:
Ezt a feladatot több módon is elvégezhetjük; mindegyik ugyanazt az eredményt adja, és mindegyiknek megvan az előnye és a hátránya.
Tábla alakítása igény szerint
Ne készítsen másolatot! A következő képlet bárhol használható:
// 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"
)
A Filter és az AddColumns függvény létrehoz egy rekordhatókört az összehasonlítási és kivonási műveletek elvégzéséhez, az egyes rekordok Quantity Requested (Kért mennyiség) és Quantity Available (Rendelkezésre álló mennyiség) mezői alapján.
Ebben a példában a Filter függvény delegálható. Ez azért fontos, mert ez a függvény megtalálja a feltételeknek megfelelő termékeket, még akkor is, ha csak néhány ilyen rekord van egy több millió rekordos táblában. Jelenleg a ShowColumns és AddColumns függvények nem delegálhatók, így a rendelendő termékek valós száma korlátozott lesz. Ha előre tudható, hogy az eredmény mérete mindig viszonylag kicsi lesz, akkor ez a megközelítés is megfelel.
Mivel nem készítettünk másolatot, nem lesz az adatoknak egy olyan további példánya, amelyet kezelni kell, vagy amely elavulhat.
ForAll igény szerint
Egy másik módszer a ForAll függvény használata a táblaalakító függvények helyett:
ForAll( Products,
If( 'Quantity Requested' > 'Quantity Available',
{
Product: Product,
'Quantity To Order': 'Quantity Requested' - 'Quantity Available'
}
)
)
Ez a képlet egyeseknek könnyebben olvasható és írható lehet.
A ForAll semelyik része nem delegálható. Csak a Products (Termékek) tábla első szakasza lesz kiértékelve, ami gondot jelenthet, ha a tábla nagy. Mivel a Filter az előző példában delegálható volt, így jobban működhet a nagy adatkészletek esetében.
Az eredmény összegyűjtése
Bizonyos helyzetekben szükséges lehet az adatok másolatára. Előfordulhat, hogy egy adatforrásból egy másikba kell áthelyezni adatokat. Ebben a példában a rendelések a beszállító rendszerében lévő Új rendelés táblába vannak leadva. A gyorsabb felhasználói interakció érdekében érdemes lehet a táblázatról egy helyileg tárolt másolatot létrehozni, hogy ki lehessen küszöbölni a kiszolgáló késését.
Ugyanazt a táblaalakítást használjuk, mint az előző két példában, de az eredményt egy gyűjteménybe foglaljuk:
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'
}
)
)
)
A ClearCollect és a Collect nem delegálható. Ennélfogva az ily módon áthelyezhető adatok mennyisége korlátozott.
Collect a ForAll függvényen belül
Végül, a Collect függvényt közvetlenül a ForAll függvényen belül is végrehajthatjuk:
Clear( NewOrder );
ForAll( Products,
If( 'Quantity Requested' > 'Quantity Available',
Collect( NewOrder,
{
Product: Product,
'Quantity To Order': 'Quantity Requested' - 'Quantity Available'
}
)
)
)
A ForAll függvény ezúttal sem delegálható. Ha a Termékek táblánk túl nagy, akkor a ForAll csak az első rekordokat fogja végignézni, így kimaradhat néhány olyan termék, amelyből rendelnünk kell. A viszonylag kis méretű táblák esetében viszont ez a megoldás is megfelelő.
Mint láthatja, a ForAll eredményét nem rögzítjük. A Collect függvényből indított hívások az összes rekordhoz visszaadják a NewOrder (Új rendelés) adatforrást, amit ha rögzítenénk, az összesen rengeteg adat lenne.
Tábla leképezése összetevőben
További információ: Táblák leképezése.