ForAll függvény

A következőkre vonatkozik: Vászonalapú alkalmazások Asztali folyamatok Modellvezérelt alkalmazások 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ő megadni. A tábla, amelyen műveleteket kíván végezni.
  • Formula – 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:

Példa a négyzetekre.

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álata nélkül is elvégezhető. Példa Sqrt függvényre.
ForAll( Négyzetek, Power( É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. Példa a teljesítményre.

Kapcsolat használata

Az alábbi példák a Kifejezésekadatforrást használják:

Példa a kifejezésekre.

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”). Példa „es” értékkel.
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”). Példa „fr” értékkel.

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:

Példa a termékek adatforrására.

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:

Példa a derivált táblázatra.

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 függvényeket nem lehet delegálni. 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.