Tabel
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.
Di Microsoft Power Fx, Anda dapat menulis rumus yang mengakses informasi di Microsoft Excel, SharePoint, SQL Server, dan beberapa sumber lain yang menyimpan data dalam rekaman dan tabel. Untuk bekerja paling efektif dengan jenis data ini, tinjau konsep yang mendasari struktur ini.
- Data berisi satu atau beberapa kategori informasi tentang seseorang, tempat, atau sesuatu. Misalnya, data mungkin berisi nama, alamat email, dan nomor telepon dari satu pelanggan. Alat lain merujuk ke data sebagai "baris" atau "item."
- Tabel menyimpan satu atau beberapa data berisi kategori informasi yang sama. Misalnya, tabel mungkin berisi nama, alamat email, dan nomor telepon dari 50 pelanggan.
Anda dapat membuat berbagai rumus yang mengambil nama tabel sebagai argumen, sama seperti rumus di Excel yang memerlukan satu atau beberapa referensi sel sebagai argumen. Beberapa rumus di Power Fx mengembalikan tabel yang mencerminkan argumen lain yang Anda tentukan. Misalnya, Anda mungkin membuat rumus:
- Untuk memperbarui data dalam tabel dengan menentukan tabel tersebut sebagai salah satu dari beberapa argumen untuk fungsi Patch
- Untuk menambah, menghapus, dan mengganti nama kolom dalam tabel dengan menentukan tabel tersebut sebagai argumen untuk fungsi AddColumns, DropColumns, atau RenameColumns. Tidak ada satupun fungsi tersebut yang memodifikasi tabel asli. Sebaliknya, fungsi mengembalikan tabel lain berdasarkan argumen lain yang Anda tentukan.
Setiap data berisi setidaknya satu kategori informasi untuk seseorang, tempat, atau sesuatu. Contoh di atas menunjukkan data untuk setiap produk (Cokelat, Roti, dan Air) dan kolom untuk setiap kategori informasi (Harga, Kuantitas di Tangan, dan Kuantitas berdasarkan Pesanan).
Dalam rumus, Anda dapat merujuk ke data dengan sendirinya, di luar konteks tabel, dengan menggunakan tanda kurung kurawal. Misalnya, data ini { Nama: "Stroberi", Harga: 7,99 } tidak terkait dengan tabel. Perhatikan bahwa nama bidang, seperti Nama dan Harga dalam contoh tersebut, tidak disertakan dalam tanda kutip ganda.
Bidang adalah bagian informasi individual dalam data. Anda dapat memvisualisasikan bidang semacam ini sebagai nilai dalam kolom untuk data tertentu.
Sama seperti kontrol, Anda dapat merujuk ke bidang suatu data menggunakan operator. pada data tersebut. Misalnya, First(Products).Name mengembalikan bidang Nama untuk data pertama di tabel Produk.
Bidang dapat berisi data atau tabel lain, sebagaimana ditunjukkan oleh contoh untuk fungsi GroupBy. Anda dapat menyarangkan banyak tingkat data dan tabel sesuai keinginan Anda.
Kolom mengacu pada bidang yang sama untuk satu atau beberapa data dalam tabel. Pada contoh di atas, setiap produk memiliki bidang harga, dan harga di kolom yang sama untuk semua produk. Tabel di atas memiliki empat kolom, ditampilkan secara horizontal di bagian atas:
- Nama
- Harga
- Kuantitas di Tangan
- Kuantitas Pesanan
Nama kolom mencerminkan bidang di kolom tersebut.
Semua nilai dalam kolom memiliki jenis data yang sama. Pada contoh di atas, kolom "Kuantitas di Tangan" selalu berisi angka dan tidak dapat berisi string, misalnya "12 unit" untuk satu data. Nilai bidang apa pun juga mungkin kosong.
Anda mungkin telah merujuk ke kolom sebagai "bidang" di alat lain.
Tabel terdiri dari satu data atau lebih, masing-masing dengan beberapa bidang yang memiliki nama konsisten di seluruh data.
Setiap tabel yang disimpan di sumber data atau koleksi memiliki nama, yang Anda gunakan untuk merujuk ke tabel dan menyebarkannya ke fungsi yang mengambil tabel sebagai argumen. Tabel juga dapat merupakan hasil dari fungsi atau rumus.
Seperti dalam contoh berikut, Anda dapat mengekspresikan tabel dalam rumus dengan menggunakan fungsi Tabel dengan rangkaian data, yang Anda ungkapkan dalam tanda kurung kurawal:
Table( { Value: "Strawberry" }, { Value: "Vanilla" } )
Anda juga dapat menentukan tabel kolom tunggal dengan tanda kurung siku. Cara yang setara untuk menulis yang di atas:
[ "Strawberry", "Vanilla" ]
Di Excel dan Power Fx, Anda menggunakan rumus untuk memanipulasi angka dan string teks dengan cara yang sama:
- Di Excel, ketik nilai, seperti 42, di sel A1, lalu ketik rumus, seperti A1+2, di sel lain untuk menampilkan nilai 44.
- Di Power Apps, atur properti Default dari Slider1 ke 42, dan atur properti Teks label menjadi Slider1.Value + 2 untuk menampilkan nilai 44.
Dalam kedua kasus, nilai yang dihitung akan berubah secara otomatis jika Anda mengubah nilai argumen (misalnya, nomor di sel A1 atau nilai Slider1).
Demikian pula, Anda dapat menggunakan rumus untuk mengakses dan memanipulasi data dalam tabel dan data. Anda dapat menggunakan nama tabel sebagai argumen dalam beberapa rumus, seperti Min(Katalog, Harga) untuk menampilkan nilai terendah pada kolom Harga dari tabel Katalog. Rumus lain menyediakan seluruh tabel sebagai nilai pengembalian, seperti RenameColumns(Katalog, "Harga", "Biaya"), yang mengembalikan semua data dari tabel Katalog namun mengubah nama kolom Harga menjadi Biaya.
Sama seperti angka, rumus yang melibatkan tabel dan data secara otomatis dihitung ulang sebagai tabel dasar atau perubahan data. Jika biaya produk di tabel Katalog diturunkan di bawah minimum sebelumnya, nilai pengembalian dari rumus Min akan secara otomatis berubah untuk menyesuaikannya.
Pertimbangkan fungsi Lebih Rendah. Jika variabel sambutan berisi string teks "Halo, Dunia", rumus Lebih rendah( sambutan ) menampilkan "halo, dunia". Fungsi ini tidak, dengan cara apa pun, mengubah nilai dalam variabel tersebut. Lower adalah fungsi murni karena hanya memproses input dan menghasilkan output. Itu semua; tidak ada efek samping. Semua fungsi di Excel dan sebagian besar fungsi di Power Fx adalah fungsi murni, yang memungkinkan buku kerja atau aplikasi akan dihitung ulang secara otomatis.
Power Fx menawarkan seperangkat fungsi yang beroperasi pada tabel dengan cara yang sama. Fungsi ini mengambil tabel sebagai input dan filter, mengurutkan, mengubah, mengurangi, dan meringkas seluruh tabel data. Faktanya, Lebih Rendah dan banyak fungsi lainnya yang biasanya mengambil satu nilai juga dapat melakukan tabel kolom tunggal sebagai input.
Banyak fungsi mengambil tabel satu kolom sebagai inputnya. Jika seluruh tabel hanya memiliki satu kolom, Anda dapat menentukannya berdasarkan nama. Jika tabel memiliki beberapa kolom, Anda dapat menentukan salah satu kolom tersebut menggunakan sintaks Table.Column. Contohnya, Products.Name mengembalikan tabel kolom tunggal dari hanya nilai Nama dari tabel Produk.
Anda dapat sepenuhnya membentuk ulang tabel seperti yang Anda diinginkan dengan menggunakan fungsi AddColumns, RenameColumns, ShowColumns, atau DropColumns. Sekali lagi, fungsi tersebut hanya mengubah output mereka, bukan sumbernya.
Fungsi lain secara khusus dirancang untuk memodifikasi data dan memiliki efek samping. Karena fungsi tersebut tidak murni, Anda harus membuatnya dengan hati-hati, dan mereka tidak dapat berpartisipasi dalam penghitungan ulang nilai secara otomatis di aplikasi. Anda hanya dapat menggunakan fungsi ini di rumus perilaku.
Beberapa fungsi beroperasi dengan mengevaluasi rumus di seluruh data tabel secara terpisah. Hasil rumus digunakan dalam berbagai cara:
- AddColumns - Rumus menyediakan nilai bidang yang ditambahkan.
- Rata-rata, Maks , Min , Sum , StdevP , VarP - Rumus memberikan nilai untuk digabungkan.
- Filter,Lookup - Rumus menentukan apakah rekaman harus disertakan dalam output.
- Concat - Rumus menentukan string yang akan digabungkan bersama.
- Distinct - Rumus mengembalikan nilai, yang digunakan untuk mengidentifikasi rekaman duplikat.
- ForAll - Rumus dapat mengembalikan nilai apa pun, berpotensi dengan efek samping.
- Sort- Formula memberikan nilai untuk mengurutkan catatan.
- With - Formula dapat mengembalikan nilai apa pun, berpotensi dengan efek samping.
Di dalam rumus tersebut, Anda dapat mereferensi bidang data yang sedang diproses. Masing-masing fungsi membuat "cakupan data" yang di mana rumus dievaluasi, dengan bidang data tersedia sebagai pengidentifikasi tingkat atas. Anda juga dapat merujuk properti kontrol dan nilai lainnya di seluruh aplikasi Anda.
Ambil contoh tabel Produk yang diletakkan dalam variabel global:
Set( 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 }
)
)
Untuk menentukan apakah salah satu produk ini memiliki lebih banyak permintaan daripada yang tersedia:
Filter( Products, 'Quantity Requested' > 'Quantity Available' )
Argumen pertama untuk Filter adalah tabel rekaman untuk beroperasi pada, dan argumen kedua adalah rumus. Filter membuat cakupan rekaman untuk mengevaluasi rumus ini di mana bidang setiap rekaman tersedia, dalam hal ini Produk, Kuantitas yang Diminta, dan Kuantitas Tersedia. Hasil perbandingan menentukan apakah setiap data harus disertakan dalam hasil fungsi:
Menambahkan ke contoh ini, kita dapat menghitung berapa banyak dari setiap produk untuk dipesan:
AddColumns(
Filter( Products, 'Quantity Requested' > 'Quantity Available' ),
"Quantity To Order", 'Quantity Requested' - 'Quantity Available'
)
Di sini kita menambahkan kolom terhitung pada hasil. AddColumns memiliki cakupan rekamannya sendiri yang digunakan untuk menghitung perbedaan antara apa yang telah diminta dan apa yang tersedia.
Akhirnya, kita dapat mengurangi tabel hasil hanya ke kolom yang kita inginkan:
ShowColumns(
AddColumns(
Filter( Products, 'Quantity Requested' > 'Quantity Available' ),
"Quantity To Order", 'Quantity Requested' - 'Quantity Available'
),
"Product",
"Quantity To Order"
)
Perhatikan bahwa di atas, kami menggunakan tanda kutip ganda (") di beberapa tempat dan tanda kutip tunggal (') di tempat lain. Tanda kutip tunggal diperlukan saat mereferensi nilai objek, seperti bidang atau tabel, di mana nama objek berisi spasi. Tanda kutip ganda digunakan ketika kita tidak merujuk nilai objek melainkan percakapan tentang itu, terutama dalam situasi di mana objek belum ada, seperti dalam kasus AddColumns.
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 data 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).
Jika tabel yang sedang dioperasikan adalah ekspresi, seperti Filter(Table, ... ), operator disambiguasi tidak dapat digunakan. Hanya cakupan data terdalam yang dapat mengakses bidang dari ekspresi tabel ini, dengan tidak menggunakan operator disambiguasi.
Misalnya, bayangkan memiliki koleksi X:
Anda dapat membuat koleksi ini dengan ClearCollect( X, [1, 2] ).
Dan koleksi Y lainnya:
Anda dapat membuat koleksi ini dengan ClearCollect( Y, ["A", "B"] ).
Selain itu, tentukan variabel konteks yang dinamai Nilai dengan rumus ini: UpdateContext( {Nilai: "!"} )
Mari tempatkan semuanya bersama-sama. Dalam konteks ini, rumus berikut:
Ungroup(
ForAll( X,
ForAll( Y,
Y[@Value] & Text( X[@Value] ) & [@Value]
)
),
"Value"
)
memproduksi tabel ini:
Apa yang terjadi di sini? Fungsi ForAll terluar menentukan cakupan data untuk X, memungkinkan akses ke bidang Nilai setiap data saat diproses. Dapat diakses hanya dengan menggunakan kata Nilai atau dengan menggunakan X[@Value].
Fungsi ForAll terdalam mendefinisikan cakupan data lain untuk Y. Karena tabel ini juga memiliki bidang Nilai yang ditentukan, penggunaan Nilai di sini merujuk pada bidang dalam data Y dan tidak lagi dari X. Di sini, untuk mengakses bidang Nilai dari X, kita harus menggunakan versi yang lebih panjang dengan operator disambiguasi.
Karena Y adalah cakupan data terdalam, mengakses bidang tabel ini tidak memerlukan disambiguasi, memungkinkan kita untuk menggunakan rumus ini dengan hasil yang sama:
Ungroup(
ForAll( X,
ForAll( Y,
Value & Text( X[@Value] ) & [@Value]
)
),
"Value"
)
Semua cakupan data ForAll mengambil alih cakupan global. Variabel konteks Nilai yang kami definisikan tidak tersedia berdasarkan nama tanpa operator disambiguasi. Untuk mengakses nilai ini, gunakan [@Value].
Ungroup meratakan hasil karena fungsi ForAll berlapis menghasilkan tabel hasil berlapis.
Untuk beroperasi pada kolom tunggal dari tabel, gunakan fungsi ShowColumns seperti dalam contoh ini:
ShowColumns( Products, "Product" )
Rumus ini menghasilkan tabel kolom tunggal ini:
Untuk alternatif yang lebih singkat, tentukan Table.Column, yang mengekstrak tabel kolom tunggal dari hanya Kolom dari Tabel. Misalnya, rumus ini menghasilkan hasil yang persis sama dengan menggunakan ShowColumns.
Products.Product
Anda menyatakan data dengan menggunakan tanda kurung kurawal yang berisi nilai bidang bernama. Misalnya, Anda dapat mengekspresikan data pertama dalam tabel di awal topik ini dengan menggunakan rumus ini:
{ Name: "Chocolate", Price: 3.95, 'Quantity on Hand': 12, 'Quantity on Order': 10 }
Anda juga dapat menyematkan rumus dalam rumus lain, karena contoh ini menunjukkan:
{ Name: First(Products).Name, Price: First(Products).Price * 1.095 }
Anda dapat menyarangkan data dengan menyarangkan tanda kurung kurawal, seperti yang ditunjukkan contoh ini:
{ 'Quantity': { 'OnHand': ThisItem.QuantOnHand, 'OnOrder': ThisItem.QuantOnOrder } }
Menyertakan setiap nama kolom yang berisi karakter khusus, misalnya spasi atau titik dua, dalam kuotasi tunggal. Untuk menggunakan kuotasi tunggal dalam nama kolom, lakukan dua kali.
Perhatikan bahwa nilai dalam kolom Harga tidak mencakup simbol mata uang, seperti tanda dolar. Pemformatan tersebut akan diterapkan bila nilai ditampilkan.
Anda dapat membuat tabel dengan menggunakan fungsi Tabel dan satu rangkaian data. Anda dapat mengekspresikan tabel di awal topik ini dengan menggunakan rumus ini:
Table(
{ Name: "Chocolate", Price: 3.95, 'Quantity on Hand': 12, 'Quantity on Order': 10 },
{ Name: "Bread", Price: 4.95, 'Quantity on Hand': 34, 'Quantity on Order': 0 },
{ Name: "Water", Price: 4.95, 'Quantity on Hand': 10, 'Quantity on Order': 0 }
)
Anda juga dapat menyarangkan tabel:
Table(
{ Name: "Chocolate",
'Quantity History': Table( { Quarter: "Q1", OnHand: 10, OnOrder: 10 },
{ Quarter: "Q2", OnHand: 18, OnOrder: 0 } )
}
)
Anda dapat membuat tabel kolom tunggal dengan menentukan nilai dalam tanda kurung siku. Tabel hasil memiliki kolom tunggal, bernama Nilai.
Misalnya, [ 1, 2, 3, 4 ]
sama dengan Table( { Value: 1 }, { Value: 2 }, { Value: 3 }, { Value: 4 } )
dan mengembalikan tabel ini: