Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk: Aplikasi Kanvas
Copilot Studio
Desktop mengalir
aplikasi
berbasis model Power Platform CLI
Fungsi
Dataverse Power Pages
Menghitung nilai dan melakukan tindakan untuk semua rekaman dalam tabel.
Deskripsi
Fungsi ForAll mengevaluasi rumus untuk semua rekaman dalam tabel. Rumus dapat menghitung nilai dan/atau melakukan tindakan, seperti memodifikasi data atau bekerja dengan sambungan. Gunakan fungsi With untuk mengevaluasi rumus untuk rekaman tunggal.
Gunakan fungsi Urutan dengan ForAll fungsi untuk melakukan iterasi berdasarkan hitungan.
Bidang rekaman yang sedang diproses tersedia dalam formula. Menggunakan operator ThisRecord atau hanya bidang referensi berdasarkan nama seperti nilai lainnya. Operator As juga dapat digunakan untuk menamai rekaman yang sedang diproses yang dapat membantu membuat formula lebih mudah dipahami dan membuat rekaman bersarang dapat diakses. Untuk informasi selengkapnya, lihat contoh di bawah ini dan menggunakan cakupan rekaman.
Nilai yang dihasilkan
Hasil masing-masing evaluasi rumus dihasilkan dalam tabel, dalam urutan yang sama seperti tabel input.
Jika hasil rumus adalah nilai tunggal, tabel yang dihasilkan adalah tabel kolom tunggal. Jika hasil rumus adalah rekaman, tabel hasil berisi rekaman dengan kolom yang sama dengan rekaman hasil.
Jika hasil rumus adalah nilai kosong , maka tidak ada rekaman dalam tabel hasil untuk rekaman input tersebut. Dalam hal ini, ada lebih sedikit rekaman dalam tabel hasil daripada tabel sumber.
Mengambil tindakan
Rumus dapat mencakup fungsi yang melakukan tindakan, seperti memodifikasi rekaman sumber data dengan fungsi Patch dan Collect. Rumus juga dapat memanggil metode pada sambungan. Beberapa tindakan dapat dilakukan per rekaman menggunakan operator ; Anda tidak dapat mengubah tabel yang merupakan subjek ForAll fungsi.
Saat menulis rumus, perhatikan bahwa rekaman dapat diproses dalam urutan apa pun dan, jika mungkin, secara paralel. Rekaman pertama tabel dapat diproses setelah rekaman terakhir.
Berhati-hatilah untuk menghindari dependensi urutan. Untuk alasan ini, Anda tidak dapat menggunakan fungsi UpdateContext, Clear, dan ClearCollect dalam ForAll fungsi karena dapat dengan mudah digunakan untuk menyimpan variabel yang rentan terhadap efek ini. Anda dapat menggunakan Collect, namun urutan rekaman yang ditambahkan tidak terdefinisi.
Beberapa fungsi yang memodifikasi sumber data, termasuk Collect, Remove, dan Update, menghasilkan sumber data yang diubah sebagai nilai yang dihasilkan. Nilai pengembalian ini dapat besar dan menggunakan sumber daya yang signifikan jika dikembalikan untuk setiap rekaman ForAll tabel. Anda mungkin juga menemukan bahwa nilai pengembalian ini bukan yang Anda harapkan karena ForAll dapat beroperasi secara paralel dan dapat memisahkan efek samping fungsi-fungsi ini agar tidak mendapatkan hasilnya. Jika nilai pengembalian dari ForAll tidak digunakan, yang sering terjadi dengan fungsi modifikasi data, maka nilai pengembalian tidak akan dibuat dan tidak ada masalah sumber daya atau pesanan. Tetapi jika Anda menggunakan hasil dan ForAll salah satu fungsi yang mengembalikan sumber data, pikirkan dengan cermat tentang bagaimana Anda menyusun hasilnya dan mencobanya terlebih dahulu pada himpunan data kecil.
Alternatif
Banyak fungsi di Power Apps dapat memproses lebih dari satu nilai pada satu waktu dengan menggunakan tabel kolom tunggal. Misalnya, fungsi Len dapat memproses tabel nilai teks, mengembalikan tabel panjang, dengan cara yang sama, yang ForAll bisa. Ini dapat menghilangkan kebutuhan untuk digunakan ForAll dalam banyak kasus, bisa lebih efisien, dan lebih mudah dibaca.
Pertimbangan lain adalah bahwa ForAll tidak dapat didelegasikan sementara fungsi lain mungkin, seperti Filter.
Delegasi
Saat digunakan dengan sumber data, fungsi ini tidak dapat didelegasikan. Hanya bagian pertama sumber data yang akan diambil, lalu fungsi diterapkan. Hasilnya mungkin tidak menunjukkan gambaran lengkapnya. Peringatan dapat muncul pada waktu penulisan untuk mengingatkan Anda akan batasan ini, serta untuk menyarankan pengalihan ke alternatif yang dapat didelegasikan, jika memungkinkan. Untuk informasi lebih lanjut, lihat ikhtisar delegasi.
Sintaks
ForAll(Tabel, Rumus)
- Tabel - Wajib. Tabel untuk ditindaklanjuti.
- Rumus- Wajib. Rumus untuk mengevaluasi semua rekaman Tabel.
Contoh
Penghitungan
Contoh berikut menggunakan Squaressumber data:
Untuk membuat sumber data ini sebagai kumpulan, atur properti onselect kontrol tombol ke rumus ini, buka mode pratinjau, lalu pilih tombol:
ClearCollect( Squares, [ "1", "4", "9" ] )
| Rumus | Deskripsi | Hasil |
|---|---|---|
|
ForAll( Kuadrat, Sqrt( Nilai ) ) Sqrt( Kotak ) |
Untuk semua rekaman tabel input, menghitung akar kuadrat dari kolom Nilai. Fungsi Sqrt juga dapat digunakan dengan tabel kolom tunggal, sehingga memungkinkan untuk melakukan contoh ini tanpa menggunakan ForAll. |
|
| ForAll( Kuadrat, Daya( Nilai, 3 ) ) | Untuk semua rekaman tabel input, tingkatkan kolom Nilai ke kemampuan ketiga. Fungsi Power tidak mendukung tabel kolom tunggal. Oleh karena itu, ForAll harus digunakan dalam kasus ini. |
|
Menggunakan sambungan
Contoh berikut menggunakan Expressionssumber data:
Untuk membuat sumber data ini sebagai kumpulan, atur properti onselect kontrol tombol ke rumus ini, buka mode pratinjau, lalu pilih tombol:
ClearCollect( Expressions, [ "Hello", "Good morning", "Thank you", "Goodbye" ] )
Contoh ini juga menggunakan sambungan Microsoft Translator. Untuk menambahkan sambungan ini ke aplikasi, lihat artikel tentang cara mengelola sambungan.
| Rumus | Deskripsi | Hasil |
|---|---|---|
| ForAll(Ekspresi, MicrosoftTranslator.Translate(Value, "es")) | Untuk semua rekaman di tabel Ekspresi, terjemahkan konten kolom Nilai ke dalam bahasa Spanyol (disingkat "es"). |
|
| ForAll(Ekspresi, MicrosoftTranslator.Translate(Value, "fr")) | Untuk semua rekaman di tabel Ekspresi, terjemahkan konten kolom Nilai ke dalam bahasa Prancis (disingkat "fr"). |
|
Menyalin tabel
Terkadang Anda harus memfilter, membentuk, mengurutkan, dan memanipulasi data. Power Apps menyediakan banyak fungsi untuk melakukan ini, seperti filter, addcolumns, dan Sort. Power Apps memperlakukan setiap tabel sebagai nilai, memungkinkannya mengalir melalui rumus dan dikonsumsi dengan mudah.
Dan terkadang anda ingin membuat salinan hasil ini untuk digunakan nanti, atau anda ingin memindahkan informasi dari satu sumber data ke yang lain. Power Apps menyediakan fungsi Collect untuk menyalin data.
Tetapi sebelum Anda membuat salinan itu, pikirkan dengan hati-hati jika diperlukan. Banyak situasi dapat diatasi dengan memfilter dan membentuk sumber data yang mendasari sesuai permintaan dengan rumus. Beberapa kerugian untuk membuat salinan mencakup:
- Dua salinan informasi yang sama berarti bahwa salah satu dari mereka dapat tidak tersinkronisasi.
- Membuat salinan dapat menghabiskan banyak memori komputer, bandwidth jaringan, dan/atau waktu.
- Untuk sebagian besar sumber data, penyalinan tidak dapat didelegasikan, membatasi berapa banyak data yang dapat dipindahkan.
Contoh berikut menggunakan Productssumber data:
Untuk membuat sumber data ini sebagai kumpulan, atur properti onselect kontrol tombol ke rumus ini, buka mode pratinjau, lalu pilih tombol:
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 }
)
)
Tujuan kami adalah untuk bekerja dengan tabel derivatif yang mencakup hanya item di mana yang lainnya telah diminta daripada yang tersedia, dan oleh karena itu, kami harus melakukan pemesanan:
Kami dapat melakukan tugas ini dengan beberapa cara yang berbeda, yang semuanya menghasilkan hasil yang sama, dengan berbagai pro dan kontra.
Pembentukan Tabel sesuai permintaan
Jangan membuat salinan! Kita dapat menggunakan rumus berikut di mana pun yang dibutuhkan:
// 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"
)
Cakupan rekaman dibuat oleh fungsi Filter and AddColumns untuk melakukan operasi perbandingan dan pengurangan, masing-masing dengan bidang 'Quantity Requested' dan 'Quantity Available' dari setiap rekaman.
Dalam contoh ini, fungsi Filter dapat didelegasikan. Hal ini penting, karena dapat menemukan semua produk yang memenuhi kriteria, bahkan jika hanya beberapa rekaman dari tabel berisi jutaan. Saat ini, ShowColumns dan AddColumns tidak dapat didelegasikan, sehingga jumlah aktual produk yang perlu dipesan terbatas. Jika Anda tahu ukuran hasil ini selalu relatif kecil, pendekatan ini baik-baik saja.
Dan karena kami tidak membuat salinan, tidak ada salinan informasi tambahan untuk dikelola atau kedaluarsa.
ForAll sesuai permintaan
Pendekatan lain adalah menggunakan ForAll fungsi untuk mengganti fungsi pembentukan tabel:
ForAll( Products,
If( 'Quantity Requested' > 'Quantity Available',
{
Product: Product,
'Quantity To Order': 'Quantity Requested' - 'Quantity Available'
}
)
)
Rumus ini mungkin sederhana untuk sebagian orang untuk membaca dan menulis.
Tidak ada bagian dari ForAll yang dapat didelegasikan. Hanya bagian pertama tabel Produk yang dievaluasi, yang bisa menjadi masalah jika tabel ini besar. Karena Filter dapat didelegasikan dalam contoh sebelumnya, Filter dapat berfungsi lebih baik dengan himpunan data besar.
Mengumpulkan hasil
Dalam beberapa situasi, salinan data mungkin diperlukan. Anda mungkin perlu memindahkan informasi dari satu sumber data ke yang lain. Dalam contoh ini, perintah ditempatkan melalui tabel NewOrder pada sistem vendor. Untuk interaksi pengguna berkecepatan tinggi, Anda mungkin ingin menyimpan salinan lokal tabel sehingga tidak ada latensi server.
Kita menggunakan tabel yang sama yang membentuk dua contoh sebelumnya, namun kami mengambil hasilnya 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 dapat didelegasikan. Akibatnya jumlah data yang dapat dipindahkan dengan cara ini terbatas.
Kumpulkan di dalam ForAll
Terakhir, kita dapat melakukan Collect langsung dalam ForAll:
Clear( NewOrder );
ForAll( Products,
If( 'Quantity Requested' > 'Quantity Available',
Collect( NewOrder,
{
Product: Product,
'Quantity To Order': 'Quantity Requested' - 'Quantity Available'
}
)
)
)
Sekali lagi, ForAll fungsi tidak dapat didelegasikan saat ini. Jika tabel Produk kami besar, ForAll lihat kumpulan catatan pertama saja dan kami mungkin melewatkan beberapa produk yang perlu dipesan. Tetapi untuk tabel yang kita tahu tetap kecil, pendekatan ini baik-baik saja.
Perhatikan bahwa kami tidak menangkap hasil dari ForAll. Panggilan fungsi Kumpulkan yang dilakukan dari dalamnya mengembalikan sumber data NewOrder untuk semua rekaman, yang dapat menambahkan hingga banyak data jika kami menangkapnya.
Tabel peta dalam komponen
Lihat Tabel peta.