Kopīgot, izmantojot


Funkcija ForAll

Attiecas uz: Audekla programmām Darbvirsmas plūsmas Modeļa vadītas programmas Power Pages Power Platform CLI

Aprēķina vērtības un veic darbības visiem ierakstiem tabulā.

Apraksts

Funkcija ForAll novērtē visu tabulas ierakstu formulu. Formula var aprēķināt vērtību un/vai veikt darbības, piemēram, pārveidot datus vai strādāt ar savienojumu. Izmantojiet With funkciju, lai novērtētu formulu vienam ierakstam.

Izmantojiet Sequence funkciju kopā ar ForAll funkciju, lai atkārtotu, pamatojoties uz skaitu.

Formulā ir pieejami pašlaik apstrādātie ieraksta lauki. Izmantojiet operatoru ThisRecord vai vienkārši norādiet uz laukiem pēc nosaukuma, kā to darītu ar jebkuru citu vērtību. Operatoru As var izmantot arī, lai apstrādājamajam ierakstam piešķirtu nosaukumu, kas var palīdzēt padarīt formulu saprotamāku, bet ligzdotos ierakstus — pieejamus. Papildinformāciju skatiet tālāk sniegtajos piemēros un sadaļā Darbs ar ierakstu tvērumu.

Atgrieztā vērtība

Katras formulas novērtējuma rezultāts tiek atgriezts tabulā, tādā pašā secībā kā ievades tabula.

Ja formulas rezultāts ir viena vērtība, iegūtā tabula būs viena kolonnas tabula. Ja formulas rezultāts ir ieraksts, iegūtā tabula ietvers ierakstus ar tādām pašām kolonnām kā rezultātu ieraksts.

Ja formulas rezultāts ir vērtība tukšs, tad šim ievades ierakstam nav ieraksta rezultātu tabulā. Šajā gadījumā rezultātu tabulā būs mazāk ierakstu nekā avota tabulā.

Darbības veikšana

Formula var ietvert funkcijas, kas veic darbības, piemēram, modificējot datu avota ierakstus ar funkcijām Patch un Collect. Šī formula var arī izsaukt metodes savienojumiem. Vienā ierakstā var veikt vairākas darbības, izmantojot ; operatoru. Nevar modificēt tabulu, uz kuru attiecas funkcija ForAll.

Rakstot formulu, paturiet prātā, ka ierakstus var apstrādāt jebkurā secībā un, ja iespējams, paralēli. Tabulas pirmais ieraksts var tikt apstrādāts pēc pēdējā ieraksta.

Esiet uzmanīgi, lai izvairītos no atkarību sakārtošanas. Šī iemesla dēļ jūs nevarat izmantot funkcijas UpdateContext, Clear un ClearCollect funkcijai ForAll, jo tās var viegli izmantot, lai turētu mainīgos, kas būtu uzņēmīgi pret šo ietekmi. Varat izmantot Collect, taču secība, kurā ieraksti tiek pievienoti, netiek definēta.

Vairākas funkcijas, kas modificē datu avotus, tostarp Collect, Remove un Update, atgriež mainīto datu avotu kā atgriezto vērtību. Šīs atgrieztās vērtības var būt lielas un patērēt ievērojamus resursus, ja tās atgriež katram tabulas ForAll ierakstam. Var būt arī tā, ka šīs atgrieztās vērtības nav tādas, kā sagaidījāt, jo funkcija ForAll var darboties paralēli un var neļaut šo funkciju blaknēm iegūt rezultātu. Ja atgrieztā vērtība no funkcijas ForAll netiek izmantota, kā tas bieži ir ar datu modifikācijas funkcijām, tad atgrieztā vērtība netiks izveidota un nav nekādu resursu vai pasūtījumu problēmu. Taču, ja izmantojat ForAll rezultātu un vienu no funkcijām, kas atgriež datu avotu, rūpīgi apsveriet, kā strukturēt rezultātu, un to vispirms izmēģiniet uz nelielām datu kopām.

Alternatīvas

Daudzas funkcijas pakalpojumā Power Apps var vienlaikus apstrādāt vairāk nekā vienu vērtību, izmantojot vienas kolonnas tabulu. Piemēram, funkcija Len var apstrādāt teksta vērtību tabulu, atgriežot garumu tabulas, tādā pašā veidā, kādā to varētu funkcija ForAll. Tas var mazināt vajadzību izmantot ForAll daudzos gadījumos, tas var būt efektīvāk un vieglāk lasāms.

Vēl viens apsvērums ir tas, ka ForAll nav deleģējama, savukārt citas funkcijas, piemēram, Filter var būt.

Deleģēšana

Ja tiek izmantots arī datu avots, šo funkciju nevar deleģēt. Tiks izgūta tikai pirmā datu avota daļa, un pēc tam tiks izmantota funkcija. Rezultātā var nebūt iekļauts viss saturs. Lai atgādinātu par šo ierobežojumu un ieteiktu pārslēgties uz deleģējamu alternatīvu (ja tas ir iespējams), autorēšanas laikā var tikt parādīts brīdinājums. Papildinformāciju skatiet sadaļā Pārskats par deleģēšanu.

Sintakse

ForAll(Tabula, Formula)

  • Tabula — Obligāti. Tabula, ar kuru ir jārīkojas.
  • Formula — Obligāti. Formula, kas tiek novērtēta attiecībā uz visiem Tabulas ierakstiem.

Piemēri

Aprēķini

Nākamajos piemēros izmantots datu avotsKvadāti:

Kvadrātu piemērs.

Lai izveidotu šo datu avotu kā kolekciju, iestatiet vadīklas Poga rekvizītu OnSelect uz šo formulu, atveriet režīmu Priekšskatījums, un pēc tam atlasiet pogu:

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

Formula Apraksts Rezultāts
ForAll( Squares, Sqrt( Value ) )

Sqrt( Squares )
Visiem ievades tabulas ierakstiem tiek aprēķināta kolonnas Vērtība kvadrātsakne. Funkciju Sqrt var izmantot arī ar vienas kolonnas tabulu, kas ļauj veikt šo piemēru, neizmantojot ForAll. Piemērs: Sqrt.
ForAll( Squares, Power( Value, 3 ) ) Visiem ievades tabulas ierakstiem tiek pacelta kolonnas Vērtība uz trešo pakāpi. Power funkcija neatbalsta vienas kolonnas tabulas. Tāpēc šajā gadījumā ir jāizmanto ForAll. Power piemērs.

Savienojuma izmantošana

Piemēros tālāk tiek lietots Izteiksmjudatu avots:

Izteiksmju piemērs.

Lai izveidotu šo datu avotu kā kolekciju, iestatiet vadīklas Poga rekvizītu OnSelect uz šo formulu, atveriet režīmu Priekšskatījums, un pēc tam atlasiet pogu:

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

Šajā piemērā tiek izmantots arī Microsoft Translator savienojums. Lai pievienotu šo savienojumu savai programmai, skatiet rakstu, kā pārvaldīt savienojumus.

Formula Apraksts Rezultāts
ForAll( Izteiksmes, MicrosoftTranslator.Translate( Vērtība, "es" ) ) Visiem ierakstiem tabulā Izteiksmes tulkojiet kolonnas Vērtība saturu spāņu valodā (saīsinājumā "es"). Piemērs ar vērtību
ForAll( Izteiksmes, MicrosoftTranslator.Translate( Vērtība, "fr" ) ) Visiem ierakstiem tabulā Izteiksmes tulkojiet kolonnas Vērtība saturu franču valodā (saīsinājumā "fr"). Piemērs ar vērtību

Tabulas kopēšana

Dažreiz jums ir nepieciešams filtrēt, veidot, kārtot un manipulēt ar datiem. Power Apps nodrošina daudzas funkcijas, kā to izdarīt, piemēram, Filter, AddColumns un Sort. Power Apps apstrādā katru tabulu kā vērtību, novirzot to cauri formulām un ātri patērējot.

Dažreiz ir nepieciešams izveidot šī rezultāta kopiju, izmantošanai vēlāk, vai pārvietot informāciju no viena datu avota uz citu. Power Apps nodrošina Collect funkciju datu kopēšanai.

Taču pirms kopijas izveides, apdomājiet, vai tā ir nepieciešama. Daudzas situācijas var atrisināt, filtrējot un pēc pieprasījuma veidojot pamata datu avotu, izmantojot formulu. Daži kopēšanas trūkumi:

  • Vienas informācijas divas kopijas nozīmē, ka viena no tām var netikt sinhronizēta.
  • Kopēšana var patērēt lielu daļu datora atmiņas, tīkla joslas platuma un/vai laika.
  • Vairumam datu avotu kopēšanu nevar deleģēt, ierobežojot to, cik daudz datu var pārvietot.

Piemēros tālāk tiek izmantots datu avotsProdukti:

Datu avota produktu piemēri.

Lai izveidotu šo datu avotu kā kolekciju, iestatiet vadīklas Poga rekvizītu OnSelect uz šo formulu, atveriet režīmu Priekšskatījums, un pēc tam atlasiet pogu:

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ūsu mērķis ir darbs ar atvasinātu tabulu, kurā ir tikai tie elementi, kuriem ir pieprasīts vairāk informācijas, nekā ir pieejams, un kuriem mums ir jāveic pasūtījums.

Piemērs ar atvasināto tabulu.

Šo uzdevumu var veikt dažos atšķirīgos veidos, kur visi nodrošina vienu un to pašu rezultātu, ar dažādiem ieguvumiem un trūkumiem.

Tabulu veidošana pēc pieprasījuma

Nekopējiet! Jebkur, kur nepieciešams, mēs varam izmantot šādu formulu:

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

Ieraksta tvērumu izveido, izmantojot funkcijas Filter un AddColumns, lai salīdzināšanas un noņemšanas darbības veiktu attiecīgi ar katra ieraksta laukiem 'Pieprasītais daudzums' un 'Pieejamais daudzums'.

Šajā piemērā funkciju Filter var deleģēt. Tas ir svarīgi, jo tā var atrast visas preces, kas atbilst kritērijiem, pat, ja tie ir tikai daži ieraksti no miljoniem tabulu. Pašlaik nevar deleģēt ShowColumns un AddColumns, tāpēc faktiskais pasūtāmo produktu skaits būs ierobežots. Ja zināt, ka šī rezultāta lielums vienmēr būs relatīvi mazs, šī pieeja ir derīga.

Tā kā mēs neveidojām ne kopiju, nav pieejama papildu informācijas kopija, lai pārvaldītu vai izkristu no datuma.

ForAll pēc pieprasījuma

Cita pieeja ir izmantot ForAll, lai aizstātu tabulas veidošanas funkcijas:

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

Šo formulu dažiem lietotājiem var būt vienkāršāk lasīt un rakstīt.

Neviena ForAll daļa nav deleģējama. Tiks novērtēta tikai tabulas Produkti pirmā daļa, kas var radīt problēmu, ja šī tabula ir liela. Tā kā funkciju Filtrēt iepriekšējā piemērā varēja deleģēt, tā varētu darboties labāk ar lielām datu kopām.

Rezultāta apkopošana

Dažos gadījumos var būt nepieciešama datu kopēšana. Iespējams, jums vajadzēs pārvietot informāciju no viena datu avota uz citu. Šajā piemērā pasūtījumi tiek veikti, izmantojot tabulu NewOrder pārdevēja sistēmā. Lai nodrošinātu ātrdarbīgu mijiedarbību ar lietotājiem, var saglabāt tabulas lokālo kopiju, lai nebūtu servera latentuma.

Mēs izmantojam tādu pašu tabulu izveidi, kā divos iepriekšējos piemēros, taču mēs tveram rezultātu kolekcijā:

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 un Collect nevar deleģēt. Tādējādi datu daudzums, ko var pārvietot šādā veidā, ir ierobežots.

Apkopošana ForAll ietvaros

Visbeidzot, mēs varam veikt Apkopošanu tieši funkcijā ForAll:

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

Arī šoreiz funkciju ForAll nevar deleģēt. Ja mūsu tabula Preces ir liela, ForAll izskatīs tikai pirmo ierakstu kopu, un dažas preces, kas jāpasūta, var tikt palaistas garām. Taču tabulām, kuras, kā zināms, paliks nelielas, šī pieeja ir derīga.

Ņemiet vērā, ka mēs neveicam ForAll rezultātu tveršanu. Izmantojot funkcijas Collect izsaukumus, tiks atgriezts NewOrder datu avots visiem ierakstiem, kas varētu pievienot pat vairākus datus, ja tiktu veikta to vākšana.

Tabulas kartēšana komponentā

Skatiet sadaļu Tabulu kartēšana.