Bagikan melalui


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:
  • argumen dalam pemanggilan fungsi
  • bidang dalam catatan
  • catatan dalam tabel
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:

  1. Buat atau impor koleksi bernama Inventaris, dan tampilkan di galeri, sebagaimana prosedur pertama di Tampilkan gambar dan teks di galeri menjelaskan.

  2. 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.

  3. 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

Karyawan ditampilkan di galeri.

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

Rumus untuk gambar seorang karyawan.

Selain itu, rumus untuk nama juga menggunakan thisitem:

ThisItem.'First Name' & " " & ThisItem.'Last Name'

Rumus untuk nama belakang dan depan seorang karyawan.

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" ) )

Memfilter karyawan berdasarkan nama, menggunakan ThisRecord.

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

Galeri karyawan, menggunakan operator As.

Rumus untuk gambar dan nama disesuaikan untuk menggunakan nama ini untuk rekaman saat ini:

Employee.Picture

Gambar karyawan menggunakan nama Karyawan yang ditetapkan dengan operator As.

Employee.'First Name' & " " & Employee.'Last Name'

Nama depan dan nama belakang karyawan menggunakan nama Karyawan yang ditetapkan dengan operator As.

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:

Teks papan catur ditampilkan dalam kontrol label.

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

Ilustrasi galeri luar yang menyediakan iterasi 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

Ilustrasi galeri dalam yang menyediakan iterasi 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 )

Kontrol label dalam dua galeri yang menyediakan warna bergantian untuk papan catur.

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:

Entitas akun dengan Bidang Kustom ditambahkan, menunjukkan nama tampilan

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:

Bilah rumus Studio yang menampilkan saran untuk nama kolom Akun dengan Nama tampilan 'Bidang Kustom' disorot.

Setelah memilih saran, 'Bidang Kustom' ditampilkan di bilah rumus dan data diperoleh:

Bilah rumus studio yang menunjukkan penggunaan nama tampilan 'Bidang Kustom' untuk bidang tersebut.

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:

Bilah rumus studio yang menunjukkan penggunaan nama logis cr5e3_customfield untuk bidang.

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:

Bilah rumus studio yang menunjukkan penggunaan nama logis cr5e3_customfieldalt untuk mendisambiguasi dua versi

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.