Bagikan melalui


Fungsi ForAll

Berlaku untuk: Aplikasi kanvas Alur desktop Aplikasi Power Pages Power Platform berbasis model CLI

Menghitung nilai dan melakukan tindakan untuk semua rekaman dalam tabel.

Deskripsi

Fungsi ForAll mengevaluasi formula 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 sequence dengan fungsi forall untuk mengulang 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 hasil akan berupa 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 kasus ini, akan 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 memodifikasi tabel yang merupakan subjek fungsi ForAll.

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, fungsi Clear dan ClearCollect dalam fungsi ForAll karena dapat dengan mudah digunakan untuk menahan 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 yang dihasilkan ini dapat menjadi besar dan mengonsumsi sumber daya secara signifikan jika dihasilkan untuk setiap rekaman tabel ForAll. Anda juga dapat menemukan bahwa nilai yang dihasilkan bukan yang Anda harapkan, karena ForAll dapat beroperasi secara paralel dan mungkin memisahkan efek samping dari fungsi ini dari mendapatkan hasilnya. Jika nilai hasil dari forall tidak digunakan, yang sering terjadi dengan fungsi modifikasi data, maka nilai kembali tidak akan dibuat dan tidak ada masalah sumber daya atau pesanan. Tetapi jika anda menggunakan hasil dari ForAll dan salah satu fungsi yang menghasilkan sumber data, pertimbangkan dengan cermat tentang cara anda menyusun hasil dan mencobanya terlebih dahulu pada himpunan data kecil.

Alternatif

Banyak fungsi dalam Power Apps dapat memproses lebih dari satu nilai pada satu waktu melalui penggunaan tabel satu kolom. Misalnya, fungsi Len dapat memproses tabel nilai teks, menghasilkan tabel panjang, dengan cara yang sama yang dapat dilakukan ForAll. Hal ini dapat menghilangkan kebutuhan untuk menggunakan ForAll dalam banyak kasus, dapat lebih efisien, dan lebih mudah dibaca.

Pertimbangan lainnya adalah bahwa ForAll tidak dapat didelegasikan sementara fungsi lainnya dapat didelegasikan, 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( Table, Formula )

  • Table – Wajib. Tabel untuk ditindaklanjuti.
  • Formula – Wajib. Rumus untuk mengevaluasi semua rekaman Tabel.

Contoh

Penghitungan

Contoh berikut menggunakan Squaressumber data:

Contoh kuadrat.

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( Squares, Sqrt( Value ) )

Sqrt( Squares )
Untuk semua rekaman tabel input, menghitung akar kuadrat dari kolom Nilai. Fungsi Sqrt juga dapat digunakan dengan tabel satu kolom, sehingga memungkinkan untuk melakukan contoh ini tanpa menggunakan ForAll. Contoh Sqrt.
ForAll( Squares, Power( Value, 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. Contoh Pangkat.

Menggunakan sambungan

Contoh berikut menggunakan Expressionssumber data:

Contoh ekspresi.

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( Expressions, MicrosoftTranslator.Translate( Value, "es" ) ) Untuk semua rekaman di tabel Ekspresi, terjemahkan konten kolom Nilai ke dalam bahasa Spanyol (disingkat "es"). Contoh dengan nilai
ForAll( Expressions, MicrosoftTranslator.Translate( Value, "fr" ) ) Untuk semua rekaman di tabel Ekspresi, terjemahkan konten kolom Nilai ke dalam bahasa Prancis (disingkat "fr"). Contoh dengan nilai

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 formula dan mudah dikonsumsi.

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.

Tapi sebelum Anda membuat salinan, pikirkan dengan hati-hati apakah itu 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 seberapa banyak data yang dapat dipindahkan.

Contoh berikut menggunakan Productssumber data:

Contoh sumber data produk.

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:

Contoh tabel turunan.

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. Pada saat ini, showcolumns dan addcolumns tidak dapat didelegasikan, sehingga jumlah aktual produk yang perlu dipesan akan terbatas. Jika Anda mengetahui ukuran dari hasil ini akan selalu relatif kecil, pendekatan ini baik-baik saja.

Dan karena kita tidak membuat salinan, tidak ada salinan tambahan informasi untuk dikelola atau usang.

ForAll sesuai permintaan

Pendekatan lain adalah menggunakan fungsi ForAll untuk menggantikan fungsi yang membentuk 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 dari tabel produk yang akan dievaluasi, yang dapat menjadi masalah jika tabel ini berukuran 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 kecepatan tinggi, Anda mungkin ingin menyimpan salinan lokal dari 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 dalam ForAll

Akhirnya, 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, fungsi ForAll tidak dapat didelegasikan pada saat ini. Jika tabel Produk kami besar, ForAll akan melihat kumpulan rekaman pertama saja dan kami mungkin melewatkan beberapa produk yang perlu diurutkan. Tapi untuk tabel yang kita tahu akan tetap kecil, pendekatan ini baik-baik saja.

Perhatikan bahwa kita tidak mengambil hasil dari ForAll. Panggilan fungsi Collect yang dibuat dari dalamnya akan menghasilkan sumber data neworder untuk semua rekaman, yang dapat bertambah hingga data yang banyak jika kita menangkapnya.

Tabel peta dalam komponen

Lihat Tabel peta.