Fungsi ForAll
Digunakan untuk: Aplikasi kanvas Aliran desktop Aplikasi dipacu Power Pages Power Platform model CLI
Mengira nilai dan melaksanakan tindakan untuk semua rekod dalam jadual.
Penerangan
Fungsi ForAll menilai formula untuk semua rekod dalam jadual. Formula boleh mengira nilai dan/atau melaksanakan tindakan seperti mengubah suai data atau bekerja dengan sambungan. Gunakan With function untuk menilai formula bagi rekod tunggal.
Gunakan Sequence function dengan fungsi ForAll untuk mengulang berasaskan pada kiraan.
Medan rekod yang sedang diproses tersedia dalam formula. Gunakan operator ThisRecord atau rujuk sahaja medan mengikut nama seperti yang akan anda lakukan bagi mana-mana nilai yang lain. Operator As juga boleh digunakan untuk menamakan rekod yang diproses, yang dapat membantu menjadikan formula anda lebih mudah untuk difahami dan supaya rekod bersarang dapat diakses. Untuk mendapatkan maklumat lanjut, lihat contoh di bawah dan menggunakan skop rekod.
Nilai pulangan
Hasil setiap penilaian formula dikembalikan dalam jadual, dalam urutan yang sama dengan jadual input.
Jika hasil formula adalah nilai tunggal, jadual yang terhasil akan menjadi jadual lajur tunggal. Jika hasil formula adalah rekod, jadual yang terhasil mengandungi rekod dengan lajur yang sama seperti rekod hasil.
Jika hasil formula adalah nilai kosong maka tiada rekod dalam jadual hasil untuk rekod input itu. Dalam kes ini, terdapat sedikit rekod dalam jadual hasil daripada jadual sumber.
Mengambil tindakan
Formula boleh termasuk fungsi yang mengambil tindakan seperti mengubah suai rekod sumber data dengan fungsi Patch dan Collect. Rumus juga boleh memanggil kaedah pada sambungan. Berbilang tindakan boleh dilaksanakan setiap rekod dengan menggunakan ; pengendali. Anda tidak boleh mengubah suai jadual yang menjadi subjek fungsi ForAll.
Semasa menulis formula anda, perlu diingati bahawa rekod boleh diproses mengikut sebarang urutan dan, jika boleh, secara selari. Rekod pertama jadual boleh diproses selepas rekod terakhir.
Berhati-hati untuk mengelakkan kebergantungan pemesanan. Atas sebab ini, anda tidak boleh menggunakan fungsi UpdateContext, Clear dan ClearCollect dalam fungsi ForAll kerana ia boleh digunakan dengan mudah untuk menahan pemboleh ubah yang rentan terhadap kesan ini. Anda boleh menggunakan Collect tetapi urutan penambahan rekod tidak ditakrifkan.
Beberapa fungsi yang mengubah suai sumber data termasuk Collect, Remove dan Update, mengembalikan sumber data yang berubah sebagai nilai pulangannya. Nilai pulangan ini boleh menjadi besar dan menggunakan sumber daya yang ketara jika dikembalikan untuk setiap rekod jadual ForAll. Anda mungkin juga mendapati bahawa nilai pulangan ini tidak seperti yang anda jangkakan kerana ForAll boleh beroperasi secara selari dan boleh memisahkan kesan sampingan fungsi ini daripada mendapatkan hasilnya. Jika nilai pulangan daripada ForAll tidak digunakan sering merupakan kes dengan fungsi pengubahsuaian data maka nilai pulangan tidak boleh dicipta dan tiada pertimbangan sumber atau pesanan. Tetapi jika anda menggunakan hasil ForAll dan salah satu daripada fungsi yang mengembalikan sumber data, fikirkan dengan teliti cara anda menyusun hasilnya dan mencubanya terlebih dahulu pada set data kecil.
Alternatif
Banyak fungsi dalam Power Apps boleh memproses lebih daripada satu nilai pada satu masa melalui penggunaan jadual lajur tunggal. Contohnya, fungsi Len boleh memproses jadual nilai teks, mengembalikan jadual panjang dengan cara yang sama seperti ForAll. Ini boleh menghilangkan keperluan penggunaan ForAll dalam banyak kes, boleh menjadi lebih cekap dan lebih mudah dibaca.
Pertimbangan lain adalah ForAll tidak boleh diwakilkan manakala fungsi lain mungkin boleh seperti Filter.
Perwakilan
Apabila digunakan dengan sumber data, fungsi ini tidak boleh ditugaskan. Bahagian pertama sumber data sahaja yang akan diambil, kemudian fungsi ini digunakan. Hasil ini mungkin tidak mewakili gambaran yang lengkap. Amaran mungkin terpapar semasa mengarang untuk mengingatkan anda tentang had ini dan mencadangkan agar beralih kepada alternatif boleh ditugaskan jika boleh. Untuk mendapatkan maklumat lanjut, rujuk ikhtisar penugasan.
Sintaks
ForAll (Jadual, Formula)
- Jadual - Diperlukan. Jadual yang akan diambil tindakan.
- Formula - Diperlukan. Formula untuk menilai semua rekod Jadual.
Contoh
Pengiraan
Contoh berikut menggunakan Kuasa duasumber data:
Untuk mencipta sumber data ini sebagai pengumpulan, tetapkan sifat OnSelect bagi kawalan Butang ke formula ini, buka mod Pratonton dan kemudian pilih butang:
ClearCollect( Squares, [ "1", "4", "9" ] )
Formula | Penerangan | Hasil |
---|---|---|
ForAll ( Squares, Sqrt ( Nilai ) ) Sqrt ( Petak ) |
Untuk semua rekod jadual input, kira punca kuasa dua bagi lajur Nilai. Fungsi Sqrt juga boleh digunakan dengan jadual lajur tunggal, menjadikannya mungkin untuk melaksanakan contoh ini tanpa menggunakan ForAll. | |
ForAll ( Squares, Power ( Nilai, 3 ) ) | Untuk semua rekod jadual input, kira lajur Nilai untuk kuasa tiga. Fungsi Kuasa tidak menyokong jadual lajur tunggal. Oleh itu, ForAll mesti digunakan dalam kes ini. |
Menggunakan sambungan
Contoh berikut menggunakan Ungkapansumber data:
Untuk mencipta sumber data ini sebagai pengumpulan, tetapkan sifat OnSelect bagi kawalan Butang ke formula ini, buka mod Pratonton dan kemudian pilih butang:
ClearCollect( Expressions, [ "Hello", "Good morning", "Thank you", "Goodbye" ] )
Contoh ini juga menggunakan Microsoft sambungan Penterjemah . Untuk menambah sambungan ini ke aplikasi anda, lihat artikel tentang cara mengurus sambungan.
Formula | Penerangan | Hasil |
---|---|---|
ForAll(Ungkapan, MicrosoftTranslator.Translate( Nilai, "es")) | Untuk semua rekod dalam jadual Ungkapan, terjemahkan kandungan lajur Nilai ke dalam bahasa Sepanyol (singkatan "es"). | |
ForAll(Expressions, MicrosoftTranslator.Translate( Value, "fr")) | Untuk semua rekod dalam jadual Ungkapan, terjemahkan kandungan lajur Nilai ke dalam bahasa Perancis (singkatan "fr"). |
Menyalin jadual
Kadang kala anda perlu menapis, membentuk, mengisih dan memanipulasi data. Power Apps menyediakan banyak fungsi untuk melakukan ini seperti Filter, AddColumns dan Sort. Power Apps melayan setiap jadual sebagai nilai, membenarkannya untuk mengalir melalui formula dan digunakan dengan mudah.
Dan kadang kala anda mahu membuat salinan hasil ini untuk kegunaan kemudian atau anda mahu memindahkan maklumat daripada satu sumber data ke yang lain. Power Apps menyediakan fungsi Collect untuk menyalin data.
Tetapi sebelum anda membuat salinan, fikir dengan teliti jika ianya diperlukan. Banyak situasi dapat ditangani dengan menapis dan membentuk sumber data yang mendasari pada permintaan dengan formula. Beberapa kelemahan membuat salinan termasuk:
- Dua salinan maklumat yang sama bermakna salah satu boleh terkeluar daripada segerak.
- Membuat salinan boleh menggunakan banyak memori komputer, lebar jalur rangkaian dan/atau masa.
- Untuk kebanyakan sumber data, penyalinan tidak oleh diwakilkan, mengehadkan jumlah data yang dapat dipindahkan.
Contoh berikut menggunakan Produksumber data:
Untuk mencipta sumber data ini sebagai pengumpulan, tetapkan sifat OnSelect bagi kawalan Butang ke formula ini, buka mod Pratonton dan kemudian pilih butang:
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 }
)
)
Matlamat kami adalah untuk bekerja dengan jadual terbitan yang termasuk hanya item yang diminta lebih banyak daripada yang tersedia dan yang perlu kami buat pesanan:
Kami boleh melaksanakan tugas ini dengan beberapa cara yang berbeza, semuanya mengeluarkan hasil yang sama dengan pelbagai kebaikan dan keburukan.
Pembentukan jadual mengikut permintaan
Jangan lakukan salinan tersebut! Kita boleh menggunakan formula berikut di mana-mana sahaja yang kita perlukan:
// 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"
)
Skop rekod dicipta oleh fungsi Penapis dan AddColumns untuk melaksanakan operasi perbandingan dan pengurangan, masing-masing, dengan medan 'Kuantiti Diminta' dan 'Kuantiti Tersedia' bagi setiap rekod.
Dalam contoh ini, fungsi Filter boleh diwakilkan. Ini penting kerana ia boleh mencari semua produk yang memenuhi kriteria walaupun hanya beberapa rekod daripada jutaan jadual. Pada masa ini, ShowColumns dan AddColumns tidak boleh diwakilkan maka nombor produk sebenar yang diperlukan untuk dipesan akan menjadi terhad. Jika anda mengetahui saiz hasil ini akan sentiasa agak kecil, pendekatan ini adalah baik.
Dan oleh sebab kami tidak membuat salinan, tidak ada salinan tambahan maklumat untuk mengurus atau ketinggalan tarikh.
ForAll atas permintaan
Pendekatan lain adalah menggunakan fungsi ForAll untuk menggantikan fungsi pembetukan jadual:
ForAll( Products,
If( 'Quantity Requested' > 'Quantity Available',
{
Product: Product,
'Quantity To Order': 'Quantity Requested' - 'Quantity Available'
}
)
)
Formula ini mungkin lebih mudah bagi sesetengah orang untuk membaca dan menulis.
Tiada bahagian daripada ForAll boleh diwakilkan. Hanya bahagian pertama jadual Produk akan dinilai yang boleh menjadi masalah jika jadual adalah besar. Oleh sebab Penapis boleh diwakilkan dalam contoh sebelumnya, ia dapat berfungsi lebih baik dengan set data yang besar.
Kumpulkan hasil
Dalam beberapa keadaan, salinan data mungkin diperlukan. Anda mungkin perlu memindahkan maklumat dari satu sumber data ke sumber yang lain. Dalam contoh ini, pesanan dibuat melalui jadual NewOrder pada sistem vendor. Untuk interaksi pengguna berkelajuan tinggi, anda mungkin ingin menyimpan salinan jadual tempatan supaya tidak ada kependaman pelayan.
Kami menggunakan pembentukan jadual yang sama dengan dua contoh sebelumnya tetapi kami merekodkan hasil ke dalam koleksi:
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 dan Collect tidak boleh diwakilkan. Hasilnya, jumlah data yang boleh dipindahkan dengan cara ini adalah terhad.
Kumpulkan dalam ForAll
Akhirnya, kami boleh melaksanakan Kumpul secara terus dalam ForAll:
Clear( NewOrder );
ForAll( Products,
If( 'Quantity Requested' > 'Quantity Available',
Collect( NewOrder,
{
Product: Product,
'Quantity To Order': 'Quantity Requested' - 'Quantity Available'
}
)
)
)
Sekali lagi, fungsi ForAll tidak boleh diwakilkan pada masa ini. Jika jadual Produk kita adalah besar, ForAll akan melihat set rekod pertama sahaja dan kami mungkin terlepas beberapa produk yang perlu dipesan. Tetapi untuk jadual, kita tahu akan kekal kecil, pendekatan ini adalah baik.
Perhatikan bahawa kami tidak merekodkan hasil ForAll. Fungsi Collect panggilan yang dibuat daripada dalam akan mengembalikan sumber data NewOrder untuk semua rekod yang boleh bertambah kepada data yang banyak jika kami menangkapnya.
Jadual peta dalam komponen
Lihat Jadual peta.