Operator dan pengidentifikasi
Catatan
Microsoft Power Fx adalah nama baru untuk bahasa rumus aplikasi kanvas. Artikel-artikel ini sedang berlangsung saat kami mengekstrak bahasa dari aplikasi kanvas, mengintegrasikannya dengan produk Microsoft Power Platform lain, dan membuatnya tersedia sebagai sumber terbuka. Mulai dengan Gambaran Umum Microsoft Power Fx untuk pengenalan bahasa.
Operator di Microsoft Power Fx dijelaskan di bawah ini. Sebagian operator bergantung pada bahasa penulis. Lihat Aplikasi global untuk informasi lebih lanjut.
Simbol | Jenis | Sintaks | KETERANGAN |
---|---|---|---|
. | Pemilih properti | Slider1.Nilai Color.Red |
Mengekstrak properti dari kontrol tabel, atau enumerasi. Untuk kompatibilitas mundur, ! dapat digunakan. |
. Bergantung pada bahasa |
Pemisah desimal | 1.23 | Pemisah antara bagian utuh dan pecahan dari angka. Karakter bergantung pada bahasa. |
( ) | Tanda kurung | Filter (T, A < 10) (1 + 2) * 3 |
Memberlakukan prioritas aturan, dan mengelompokkan subekspresi dalam ekspresi yang lebih besar |
+ | Operator aritmatika | 1 + 2 | Tambah |
- | 2 - 1 | Pengurangan dan tanda | |
* | 2 * 3 | Perkalian | |
/ | 2 / 3 | Divisi (juga melihat fungsi Mod ) | |
^ | 2 ^ 3 | Eksponensiasi, setara dengan fungsi Power | |
% | 20% | Persentase (setara dengan "* 1/100") | |
= | Operator perbandingan | Harga = 100 | Sama dengan |
> | Harga > 100 | Lebih dari | |
>= | Harga >= 100 | Lebih besar dari atau sama dengan | |
< | Harga < 100 | Kurang dari | |
<= | Harga <= 100 | Kurang dari atau sama dengan | |
<> | Harga <> 100 | Tidak sama dengan | |
& | Operator rangkaian string | "halo" & " " & "dunia" | Membuat beberapa string muncul terus-menerus |
&&or dan | Operator logika | Harga < 100 & Slider1.Nilai = 20 atau harga < 100 Dan Slider1.Value = 20 |
Konjungsi logis, setara dengan fungsi And |
|| atau | Harga < 100 || Slider1.Nilai = 20 atau Harga < 100 Atau Slider1.Nilai = 20 | Kesenjangan logis, setara dengan fungsi Or | |
! atau Tidak | ! (Harga < 100) atau Tidak (Harga < 100) | Kesenjangan logis, setara dengan fungsi Not | |
Eksaktin | Operator keanggotaan | Galeri1.Item yang Disimpan tepat yang dipilih | Milik koleksi atau tabel |
Eksaktin | "Windows" tepatnya "Untuk menampilkan jendela di sistem operasi Windows..." | Uji substring (sensitivitas-huruf) | |
di | Galeri1.Dipilih di SavedItems | Milik koleksi atau tabel | |
di | "Itu" di "Keyboard dan monitor..." | Uji substring (tidak peka huruf) | |
@ | Operator disambiguasi | Tabel Saya[@fieldname] | Disambiguasi bidang |
@ | [@MyVariable] | Disambiguasi global | |
, [ketergantungan bahasa] |
Pemisah daftar | Jika(X < 10, "Rendah", "Baik") { X: 12, Y: 32 } [ 1, 2, 3 ] |
Memisahkan: Karakter ini bergantung pada bahasa. |
; [ketergantungan bahasa] |
Rumus penautan | Kumpulkan(T, A); Navigasi(S1, "") | Invokasi terpisah fungsi dalam properti perilaku. Operator penautan bergantung pada bahasa. |
Sebagai | Sebagai operator | Semua Pelanggan Sebagai Pelanggan | Menimpa thisitem dan thisrecord di galeri dan fungsi lingkup rekaman. Seperti yang berguna untuk memberikan nama yang lebih baik dan spesifik dan sangat penting dalam skenario bersarang. |
Diri | Operator mandiri | Isi Sendiri | Akses ke properti dari kontrol saat ini |
induk | Operator induk | Induk.Isi | Akses ke properti dari kontainer kontrol |
Item Ini | Operator ThisItem | Item.Nama Pertama | Akses ke bidang kontrol Galeri atau formulir |
Catatan Ini | Operator ThisItem | Nama Depan.Catatan Ini | Akses ke rekaman lengkap dan bidang individual rekaman dalam forall, Sum, With, dan fungsi cakupan rekaman lainnya. Dapat diganti dengan operator As. |
operator dalam dan exactin
Gunakan operator in dan exactin untuk menemukan string dalam sumber data, seperti kumpulan atau tabel impor. Operator dalam mengidentifikasi kecocokan terlepas dari kasus, dan operator exactin mengidentifikasi kecocokan hanya jika mereka menggunakan huruf kapital. Berikut adalah contohnya:
Buat atau impor koleksi bernama Inventaris, dan tampilkan di galeri, sebagaimana prosedur pertama di Tampilkan gambar dan teks di galeri menjelaskan.
Atur properti Item galeri ke rumus ini:
Filter(Inventaris, "E" di Nama Produk)Galeri menampilkan semua produk kecuali Callisto karena nama produk tersebut adalah satu-satunya yang tidak berisi huruf yang Anda tentukan.
Ubah properti Item galeri ke rumus ini:
Filter (Inventaris, "E" tepatnya Nama Produk)Galeri hanya menampilkan Europa karena namanya hanya berisi huruf yang Anda tentukan dalam kasus yang Anda tentukan.
operator ThisItem, ThisRecord, dan As
Beberapa kontrol dan fungsi menerapkan rumus untuk rekaman individual dari tabel. Untuk merujuk pada rekaman individual dalam formula, gunakan salah satu dari berikut ini:
Operator | Berlaku untuk | Deskripsi |
---|---|---|
Item Ini | Kontrol galeri Edit kontrol formulir Kontrol formulir tampilan |
Nama default untuk rekaman saat ini di galeri atau kontrol formulir. |
Catatan Ini | ForAll, Filter, With , Sum dan fungsi cakupanrekaman lainnya ... ... | Nama default untuk rekaman saat ini dalam fungsi ForAll dan cakupan rekaman lainnya. |
Sepertinamanya | Kontrol galeri ForAll, Filter, With , Sum dan fungsi cakupan rekaman lainnya ... |
Menentukan nama untuk rekaman saat ini, menggantikan thisitem atau thisrecord secara default. Gunakan As untuk membuat formula lebih mudah dipahami dan mengatasi ambiguitas saat bersarang. |
Operator ThisItem
Misalnya, di kontrol galeri berikut, properti item diatur ke sumber data karyawan (seperti entitas karyawan yang disertakan dengan sampel Northwind Traders):
Employees
Item pertama di Galeri adalah template yang direplikasi untuk setiap karyawan. Pada template, rumus untuk gambar menggunakan thisitem untuk merujuk pada item saat ini:
ThisItem.Picture
Selain itu, rumus untuk nama juga menggunakan thisitem:
ThisItem.'First Name' & " " & ThisItem.'Last Name'
Operator ThisRecord
ThisRecord digunakan dalam fungsi yang memiliki cakupan rekaman. Misalnya, kita dapat menggunakan fungsi filter dengan properti Item Galeri kita untuk hanya menampilkan nama depan yang dimulai dengan M:
Filter( Employees, StartsWith( ThisRecord.Employee.'First Name', "M" ) )
ThisRecord bersifat opsional dan tersirat dengan menggunakan bidang secara langsung, misalnya, dalam hal ini, kita bisa menulis:
Filter( Employees, StartsWith( 'First Name', "M" ) )
Meskipun opsional, menggunakan thisrecord dapat membuat formula lebih mudah dipahami dan mungkin diperlukan dalam situasi yang ambigu dengan nama bidang juga dapat berupa nama relasi. ThisRecord bersifat opsional sementara ThisItem selalu diperlukan.
Gunakan thisrecord untuk mereferensikan seluruh rekaman dengan fungsi patch, Collect, dan cakupan rekaman lainnya. Misalnya, rumus berikut mengatur status untuk semua karyawan tidak aktif menjadi aktif:
With( { InactiveEmployees: Filter( Employees, Status = 'Status (Employees)'.Inactive ) },
ForAll( InactiveEmployees,
Patch( Employees, ThisRecord, { Status: 'Status (Employees)'.Active } ) ) )
Operator As
Gunakan operator As untuk menamai rekaman di galeri atau fungsi cakupan rekaman, menimpa thisitem default atau thisrecord. Penamaan rekaman dapat membuat formula lebih mudah dipahami dan mungkin diperlukan dalam situasi bersarang untuk mengakses rekaman di cakupan lainnya.
Misalnya, Anda dapat memodifikasi properti item Galeri kami untuk menggunakan As untuk mengidentifikasi bahwa kita bekerja sama dengan seorang karyawan:
Employees As Employee
Rumus untuk gambar dan nama disesuaikan untuk menggunakan nama ini untuk rekaman saat ini:
Employee.Picture
Employee.'First Name' & " " & Employee.'Last Name'
Seperti juga dapat digunakan dengan fungsi cakupan rekaman untuk mengganti nama default ThisRecord. Kita dapat menerapkan ini ke contoh sebelumnya untuk memperjelas rekaman yang kita tangani:
With( { InactiveEmployees: Filter( Employees, Status = 'Status (Employees)'.Inactive ) },
ForAll( InactiveEmployees As Employee,
Patch( Employees, Employee, { Status: 'Status (Employees)'.Active } ) ) )
Saat mengurung Galeri dan fungsi jangkauan rekaman, thisitem dan thisrecord selalu merujuk pada lingkup paling dalam, meninggalkan rekaman dalam lingkup luar tidak tersedia. Gunakan As untuk membuat semua cakupan rekaman tersedia dengan memberi masing-masingnya nama unik.
Misalnya, rumus ini menghasilkan pola papan catur sebagai string teks dengan pengurungan dua fungsi forall:
Concat(
ForAll( Sequence(8) As Rank,
Concat(
ForAll( Sequence(8) As File,
If( Mod(Rank.Value + File.Value, 2) = 1, " X ", " . " )
),
Value
) & Char(10)
),
Value
)
Mengatur properti teks kontrol label ke formula ini menampilkan:
Mari kita membongkar apa yang terjadi di sini:
- Kita mulai dengan iterasi tabel bernomor 8 yang tidak disebutkan namanya dari fungsi sequence. Loop ini adalah untuk setiap baris papan, yang biasanya disebut sebagai peringkat sehingga kami memberikan nama ini.
- Untuk setiap baris, kami mengulang tabel lain yang tidak disebutkan namanya dari 8 kolom, dan kami memberikan file nama umum.
- Jika Rank.Value + File.Value adalah angka ganjil, kotak akan mendapatkan X, jika tidak, dengan titik. Bagian dari rumus ini merujuk pada kedua loop forall, yang dimungkinkan dengan menggunakan operator As.
- Concat digunakan dua kali, pertama untuk merakit kolom dan kemudian baris, dengan Char(10) yang dilemparkan untuk membuat baris baru.
Contoh serupa dimungkinkan dengan kontrol Galeri bersarang, bukan fungsi forall. Mari kita mulai dengan galeri vertikal untuk peringkat. Galeri kontrol ini akan memiliki rumus item:
Sequence(8) as Rank
Dalam galeri ini, kami akan menempatkan Galeri horizontal untuk file tersebut , yang akan direplikasi untuk setiap peringkat, dengan properti item:
Sequence(8) as File
Dan akhirnya, di dalam galeri ini, kami akan menambahkan kontrol label yang akan direplikasi untuk setiap file dan setiap peringkat. Kita akan menyesuaikan ukurannya untuk mengisi seluruh ruang dan menggunakan properti Fill untuk memberikan warna dengan rumus ini:
If( Mod( Rank.Value + File.Value, 2 ) = 1, Green, Beige )
Operator Self dan Parent
Ada tiga cara untuk merujuk ke kontrol dan properti dalam formula:
Metode | Deskripsi |
---|---|
Dengan Nama Kontrol | Kontrol apa pun dapat dirujuk berdasarkan nama dari mana pun dalam aplikasi. Misalnya, Label1.Fill merujuk pada properti fill dari nama kontrol yang namanya adalah Label1. |
Operator mandiri | Sering nyaman merujuk properti lain untuk kontrol yang sama saat menulis formula. Alih-alih menggunakan referensi absolut berdasarkan nama, lebih mudah dan lebih portabel untuk menggunakan referensi relatif untuk kediri sendiri. Operator Self menyediakan akses yang mudah ke kontrol saat ini. Misalnya, Self.Fill mengacu pada warna isi kontrol saat ini. |
Operator induk | Beberapa kontrol akan menghosting kontrol lainnya, seperti kontrol layar dan galeri. Kontrol hosting kontrol dari kontrol di dalamnya disebut sebagai parent. Seperti operator Self, operator Parent menyediakan referensi relatif mudah ke kontrol penampung. Misalnya, Parent.Fill mengacu pada properti isi kontrol yang merupakan wadah untuk kontrol saat ini. |
Self dan induk adalah operator dan bukan properti pada kontrol itu sendiri. Merujuk pada Parent.Parent, Self.Parent atau Parent.Self tidak didukung.
Nama pengidentifikasi
Nama variabel, sumber data, kolom, dan objek lain dapat berisi Unicode.
Gunakan tanda kutip tunggal di sekitar nama yang berisi spasi atau karakter khusus lainnya.
Gunakan dua kuotasi tunggal bersama-sama untuk menunjukkan satu kuotasi tunggal di nama. Nama yang tidak berisi karakter khusus tidak memerlukan kuotasi tunggal.
Berikut adalah beberapa contoh nama kolom yang mungkin Anda temui dalam tabel, dan bagaimana mereka diwakili dalam rumus:
Nama kolom di database | Referensi kolom dalam rumus |
---|---|
SimpleName | SimpleName |
NameWith123Numbers | NameWith123Numbers |
Nama dengan spasi | 'Name with spaces' |
Nama dengan tanda kutip "ganda" | 'Name with "double" quotes' |
Nama dengan tanda kutip 'tunggal' | 'Name with ''single'' quotes' |
Nama dengan tanda @ at | 'Name with an @ at sign' |
Tanda kutip ganda digunakan untuk menentukan string teks.
Nama tampilan dan nama Logis
Beberapa sumber data seperti SharePoint dan Microsoft Dataverse memiliki dua nama berbeda untuk merujuk ke tabel atau kolom data yang sama:
Nama logis- Nama yang dijamin unik, tidak berubah setelah dibuat, biasanya tidak mengizinkan spasi atau karakter khusus lainnya, dan tidak dilokalkan ke dalam bahasa yang berbeda. Akibatnya, nama dapat kriptik. Nama ini digunakan oleh pengembang professional. Misalnya, cra3a_customfield. Nama ini juga dapat disebut sebagai nama skema atau hanyas nama.
Nama tampilan - Nama yang ramah pengguna dan dimaksudkan untuk dilihat oleh pengguna akhir. Nama ini mungkin tidak unik, dapat berubah dari waktu ke waktu, mungkin berisi spasi dan karakter Unicode, dan dapat dilokalkan ke dalam bahasa yang berbeda. Sesuai dengan contoh di atas, nama tampilan mungkin bidang kustom dengan spasi di antara kata-kata.
Karena nama tampilan lebih mudah dipahami, Power Fx akan menyarankannya sebagai pilihan dan tidak menyarankan nama logis. Meskipun nama logis tidak disarankan, mereka masih dapat digunakan jika diketik secara tidak langsung.
Misalnya, bayangkan Anda telah menambahkan Bidang Kustom ke suatu entitas di Dataverse. Nama logis akan ditetapkan untuk Anda oleh sistem yang dapat Anda modifikasi hanya saat membuat bidang. Hasilnya akan terlihat seperti:
Bila penulisan merujuk ke bidang Akun, saran akan dibuat menggunakan 'Bidang Kustom' karena ini adalah nama tampilan. Kuotasi tunggal harus digunakan karena nama ini memiliki spasi di dalamnya:
Setelah memilih saran, 'Bidang Kustom' ditampilkan di bilah rumus dan data diperoleh:
Meskipun tidak disarankan, kita juga dapat menggunakan nama logis untuk bidang ini. Hal ini akan menghasilkan data yang sama diambil. Tidak ada kuotasi tunggal yang diperlukan karena nama ini tidak berisi spasi atau karakter khusus:
Di belakang layar, pemetaan dipertahankan antara nama tampilan yang dilihat dalam rumus dan nama logika yang mendasari. Karena nama logis harus digunakan untuk berinteraksi dengan sumber data, pemetaan ini digunakan untuk mengkonversi dari nama tampilan saat ini ke nama logis secara otomatis dan itulah yang dilihat di lalu lintas jaringan. Pemetaan ini juga digunakan untuk mengkonversi kembali ke nama logis untuk beralih ke nama tampilan baru, misalnya, jika nama tampilan berubah atau pembuat dalam bahasa yang berbeda mengedit aplikasi.
Catatan
Nama logis tidak diterjemahkan saat memindahkan aplikasi antara lingkungan. Untuk entitas sistem dan nama bidang Dataverse ini seharusnya tidak menjadi masalah karena nama logis konsisten di seluruh lingkungan. Namun, bidang kustom apa pun, seperti cra3a_customfield dalam contoh di atas, mungkin memiliki prefiks lingkungan yang berbeda (cra3a dalam kasus ini). Nama tampilan lebih disukai karena dapat dicocokkan dengan nama tampilan di lingkungan baru.
Disambiguasi nama
Karena nama tampilan tidak unik, nama tampilan yang sama dapat muncul lebih dari satu kali di entitas yang sama. Ketika ini terjadi, nama logis akan ditambahkan ke akhir Nama tampilan dalam tanda kurung untuk salah satu nama yang bertentangan. Membangun pada contoh di atas, jika ada bidang kedua dengan nama tampilan yang sama dari Bidang Kustom dengan nama logis cra3a_customfieldalt maka saran akan ditampilkan:
String nama disambiguasi ditambahkan dalam situasi lain dengan terjadinya konflik nama, misalnya nama entitas, rangkaian pilihan, dan item Dataverse lainnya.
Operator disambigusiasi
Beberapa fungsi membuat cakupan catatan untuk mengakses bidang tabel sewaktu memproses setiap rekaman, seperti Filter, AddColumns, dan Jumlah Tetap. Nama bidang yang ditambahkan dengan cakupan data mengambil alih nama yang sama dari tempat lain di aplikasi. Bila hal ini terjadi, Anda tetap dapat mengakses nilai dari luar cakupan catatan dengan operator disambiguasi @:
- Untuk mengakses nilai dari cakupan data bersarang, gunakan operator @ dengan nama tabel yang sedang dioperasikan saat menggunakan pola ini:
Tabel[@Nama Bidang] - Untuk mengakses nilai global, seperti sumber data, koleksi, dan variabel konteks, gunakan pola [@ObjectName] (tanpa penetapan tabel).
Untuk informasi dan contoh lainnya, lihat cakupan catatan.