Bagikan melalui


fungsi With

Berlaku untuk: Aplikasi Kanvas Copilot Studio Desktop mengalir aplikasi berbasis model Power Platform CLI Fungsi Dataverse Power Pages

Menghitung nilai dan melakukan tindakan untuk satu rekaman, termasuk rekaman sebaris dari nilai bernama.

KETERANGAN

Fungsi ini With mengevaluasi rumus untuk satu rekaman. Rumus dapat menghitung nilai dan/atau melakukan tindakan, seperti memodifikasi data atau bekerja dengan sambungan. Gunakan fungsi ForAll untuk mengevaluasi rumus untuk semua rekaman dalam tabel rekaman.

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.

Gunakan With untuk meningkatkan keterbacaan rumus kompleks dengan membabungkannya menjadi sub-rumus bernama yang lebih kecil. Nilai bernama ini bertindak seperti variabel lokal sederhana yang terbatas pada cakupan With. Sintaks rekaman sebaris yang sama yang digunakan dengan fungsi UpdateContext dapat digunakan dengan With. Penggunaan With lebih disukai daripada konteks atau variabel global karena mandiri, mudah dipahami, dan dapat digunakan dalam konteks rumus deklaratif apa pun.

Gunakan With untuk mengakses bidang rekaman yang dikembalikan oleh fungsi seperti Patch atau Match. With menyimpan nilai dari fungsi-fungsi ini cukup lama untuk digunakan dalam perhitungan atau tindakan lebih lanjut.

Jika argumen Rekaman ke With adalah kesalahan, kesalahan tersebut akan dikembalikan oleh fungsi dan Rumus tidak akan dievaluasi.

Sintaks

With( Rekaman, Rumus )

  • Catatan – Wajib. Rekaman harus ditindaklanjuti. Untuk nilai nama, gunakan sintaks sebaris { name1: value1, name2: value2, ... }
  • Rumus – Wajib. Rumus akan dievaluasi untuk Record. Rumus dapat merujuk salah satu bidang Rekaman secara langsung sebagai cakupan rekaman.

Contoh

Nilai bernama sederhana

With( { radius: 10,
        height: 15 },
    Pi() * (radius*radius) * height
)
// Result: 4712.38898038 (as shown in a label control)

Contoh ini menggunakan rekaman nilai bernama untuk menghitung volume silinder. With sedang digunakan untuk mengambil semua nilai input bersama-sama, sehingga mudah untuk memisahkannya dari perhitungan itu sendiri.

Bersarang With

Kalkulator minat menggunakan With fungsi.

With( { AnnualRate: RateSlider/8/100,        // slider moves in 1/8th increments and convert to decimal
        Amount: AmountSlider*10000,          // slider moves by 10,000 increment
        Years: YearsSlider,                  // slider moves in single year increments, no adjustment required
        AnnualPayments: 12 },                // number of payments per year
      With( { r: AnnualRate/AnnualPayments,  // interest rate
              P: Amount,                     // loan amount
              n: Years*AnnualPayments },     // number of payments
            r*P / (1 - (1+r)^-n)             // standard interest calculation
      )
)

Contoh ini menumpuk With fungsi untuk membuat perhitungan dua tingkat untuk pembayaran hipotek bulanan. Selama tidak ada konflik, semua nilai bernama luar With tersedia dalam bagian dalam With.

Karena kontrol panel geser hanya dapat berpindah dalam kenaikan 1, panel geser dibagi atau dikali untuk membuat peningkatan kustom secara efektif. Dalam kasus tingkat bunga, RateSlider memiliki properti Maksimum diatur ke 48, dibagi 8 untuk kenaikan poin persentase 1/8 dan dibagi dengan 100 untuk mengonversi dari persentase ke desimal, mencakup kisaran 0,125% sampai 6%. Dalam kasus dari jumlah pinjaman, AmountSlider memiliki properti Maksimum diatur ke 60 dan dikalikan dengan 10.000, mencakup kisaran 10.000 hingga 600.000.

With dihitung ulang secara otomatis saat penggoser bergerak dan pembayaran pinjaman baru ditampilkan. Tidak ada variabel yang digunakan dan tidak perlu menggunakan properti OnChange kontrol panel geser.

Berikut adalah petunjuk mendetail untuk membuat aplikasi ini:

  1. Buat aplikasi baru.
  2. Tambahkan kontrol Slider dan beri nama RateSlider. Atur properti Maksimum ke 48.
  3. Tambahkan kontrol Label di sebelah kiri kontrol panel geser. Atur properti Teks ke "Suku bunga:".
  4. Tambahkan kontrol Label di sebelah kanan kontrol panel geser. Atur properti Text ke rumus RateSlider/8 & " %".
  5. Tambahkan kontrol Slider lainnya dan beri nama AmountSlider. Atur properti Maksimum ke 60.
  6. Tambahkan kontrol Label di sebelah kiri kontrol panel geser ini. Atur properti Teks ke "Jumlah Pinjaman:".
  7. Tambahkan kontrol Label di sebelah kanan kontrol panel geser ini. Atur properti Teks ke rumus AmountSlider/8 * 10000.
  8. Tambahkan kontrol Slider lainnya dan beri nama YearsSlider. Atur properti Maksimum ke 40.
  9. Tambahkan kontrol Label di sebelah kiri kontrol panel geser ini. Atur properti Teks ke "Jumlah Tahun:".
  10. Tambahkan kontrol Label di sebelah kanan kontrol panel geser ini. Atur properti Teks ke rumus YearsSlider.
  11. Tambahkan kontrol Label dan atur properti Teks ke rumus yang ditampilkan di atas:
  12. Tambahkan kontrol Label di sebelah kiri kontrol label terakhir. Atur properti Teks ke "Pembayaran Bulanan Rutin:".

Kunci primer dihasilkan dari patch

With( Patch( Orders, Defaults( Orders ), { OrderStatus: "New" } ),
      ForAll( NewOrderDetails,
              Patch( OrderDetails, Defaults( OrderDetails ),
                     { Order: OrderID,          // from With's first argument, primary key of Patch result
                       Quantity: Quantity,      // from ForAll's NewOrderDetails table
                       ProductID: ProductID }   // from ForAll's NewOrderDetails table
              )
      )
)

Contoh ini menambahkan rekaman ke tabel Urutan di SQL Server. Kemudian menggunakan kunci primer yang dihasilkan untuk urutan, yang dihasilkan oleh fungsi Patch dalam bidang OrderID, untuk membuat rekaman terkait dalam tabel OrderDetails.

Nilai yang diekstrak dengan ekspresi reguler

With(
    Match( "PT2H1M39S", "PT(?:(?<hours>\d+)H)?(?:(?<minutes>\d+)M)?(?:(?<seconds>\d+)S)?" ),
    Time( Value( hours ), Value( minutes ), Value( seconds ) )
)
// Result: 2:01 AM (as shown in a label control, use the Text function to see the seconds)

Contoh ini mengekstrak jam, menit, dan detik dari nilai durasi ISO 8601, lalu menggunakan sub-kecocokan ini untuk membuat nilai Tanggal/Waktu.

Perhatikan bahwa meskipun sub-kecocokan berisi angka, tetapi sub-kecocokan masih dalam string teks. Gunakan fungsi Value untuk mengonversi ke angka sebelum melakukan operasi matematika.

Memetakan rekaman dalam komponen

Lihat Memetakan rekaman.