Dibaca dalam bahasa Inggeris

Kongsi melalui


Jadual

Nota

Microsoft Power Fx ialah nama baharu untuk bahasa formula aplikasi kanvas. Artikel ini ialah kerja yang sedang berjalan kerana kita mengekstrak bahasa daripada aplikasi kanvas, mengintegrasikan ia dengan produk Microsoft Power Platform yang lain dan menjadikan ia tersedia sebagai sumber terbuka. Mulakan dengan Gambaran keseluruhan Microsoft Power Fx untuk pengenalan kepada bahasa.

Dalam Microsoft Power Fx, anda boleh menulis formula yang mengakses maklumat dalam Microsoft Excel, SharePoint, Pelayan SQL dan beberapa sumber lain yang menyimpan data dalam rekod dan jadual. Untuk bekerja secara paling berkesan dengan data jenis ini, semak semula konsep yang garis bawah struktur ini.

  • Rekod mengandungi satu atau lebih kategori maklumat tentang orang, tempat atau sesuatu perkara. Contohnya, rekod mungkin mengandungi nama, alamat e-mel dan nombor telefon bagi pelanggan tunggal. Alat lain merujuk kepada rekod sebagai "baris" atau "item."
  • Jadual menyimpan satu atau lebih rekod yang mengandungi kategori maklumat yang sama. Contohnya, jadual mungkin mengandungi nama, alamat e-mel dan nombor telefon bagi 50 pelanggan.

Anda boleh membina pelbagai formula yang mengambil nama jadual sebagai argumen, sama seperti formula dalam Excel yang mengambil satu atau lebih rujukan sel sebagai argumen. Beberapa formula dalam Power Fx mengembalikan jadual yang menunjukkan argumen lain yang anda tentukan. Contohnya, anda mungkin mencipta formula:

  • untuk mengemas kini rekod dalam jadual dengan menentukan jadual sebagai salah satu daripada pelbagai argumen untuk fungsi Tampalan
  • untuk menambah, mengalih keluar dan menamakan semula lajur dalam jadual dengan menentukan jadual itu sebagai argumen untuk AddColumns, DropColumns atau fungsi RenameColumns. Tiada daripada fungsi tersebut mengubah suai jadual asal. Sebaliknya, fungsi mengembalikan jadual lain berdasarkan argumen lain yang anda tentukan.

Elemen jadual

Unsur-unsur jadual.

Rekod

Setiap rekod mengandungi sekurang-kurangnya satu kategori maklumat untuk orang, tempat atau sesuatu perkara. Contoh di atas menunjukkan rekod bagi setiap produk (Coklat, Roti dan Air) dan lajur untuk setiap kategori maklumat (Harga, Kuantiti dalam Tangan, dan Kuantiti dalam Pesanan).

Dalam formula, anda boleh merujuk kepada rekod dengan sendirinya, di luar konteks jadual, dengan menggunakan tanda kurung ikal. Contohnya, rekod ini { Nama: "Strawberries", Harga: 7.99 } tidak dikaitkan dengan jadual. Ambil perhatian bahawa nama medan, seperti Nama dan Harga dalam contoh tersebut, tidak dilampirkan dalam tanda petikan berganda.

Medan

Medan ialah bahagian individu maklumat dalam rekod. Anda boleh menggambarkan jenis medan ini sebagai nilai dalam lajur untuk rekod tertentu.

Sama seperti kawalan, anda merujuk pada medan rekod dengan menggunakan .operator pada rekod. Contohnya, First(Products).Name mengembalikan medan Nama untuk rekod pertama dalam jadual Produk.

Medan boleh mengandungi rekod atau jadual lain, sebagai contohnya untuk menunjukkan fungsi GroupBy. Anda boleh sarang sebanyak mungkin peringkat rekod dan jadual yang anda mahu.

Jalur

Lajur merujuk pada medan yang sama untuk satu atau lebih rekod dalam jadual. Dalam contoh di atas, setiap produk mempunyai medan harga, dan harga dalam lajur yang sama untuk semua produk. Jadual di atas mempunyai empat lajur, ditunjukkan secara melintang merentasi bahagian atas:

  • Nama
  • Harga
  • Kuantiti di Tangan
  • Kuantiti atas Pesanan

Nama lajur menunjukkan medan dalam lajur tersebut.

Semua nilai dalam lajur adalah jenis data yang sama. Dalam contoh di atas, lajur "Kuantiti dalam tangan" sentiasa mengandungi nombor dan tidak boleh mengandungi rentetan, seperti "12 unit," untuk satu rekod. Nilai bagi sebarang medan mungkin juga kosong.

Anda mungkin telah merujuk kepada lajur sebagai "medan" dalam alat lain.

Jadual

Jadual terdiri daripada satu atau lebih rekod, setiap satu dengan berbilang medan yang mempunyai nama yang konsisten merentasi rekod.

Sebarang jadual yang disimpan dalam sumber data atau koleksi mempunyai nama, yang anda gunakan untuk merujuk kepada jadual dan menghantarnya ke fungsi yang mengambil jadual sebagai argumen. Jadual juga boleh menjadi hasil fungsi atau formula.

Seperti dalam contoh berikut, anda boleh menyatakan jadual dalam formula dengan menggunakan fungsi Jadual dengan satu set rekod, yang anda menyatakan dalam tanda kurung ikal:

Table( { Value: "Strawberry" }, { Value: "Vanilla" } )

Anda juga boleh mentakrifkan jadual lajur tunggal dengan kurungan persegi. Cara yang bersamaan untuk menulis di atas:

[ "Strawberry", "Vanilla" ]

Formula jadual

Dalam Excel dan Power Fx, anda menggunakan formula untuk memanipulasi nombor dan rentetan teks dalam cara yang sama:

  • Dalam Excel, taipkan nilai, seperti 42, dalam sel A1, dan kemudian taipkan formula, seperti A1+2, dalam sel lain untuk menunjukkan nilai 44.
  • Dalam Power Apps, tetapkan sifat Lalai daripada Slider1 kepada 42 dan tetapkan sifat label Teks kepada Slider1.Value + 2 untuk menunjukkan nilai 44.

Dalam kedua-dua kes, nilai yang dikira berubah secara automatik jika anda mengubah nilai argumen (contohnya, nombor dalam sel A1 atau nilai Slider1).

Begitu juga, anda boleh menggunakan formula untuk akses dan memanipulasi data dalam jadual dan rekod. Anda boleh menggunakan nama jadual sebagai argumen dalam beberapa formula, seperti Min(Katalog, Harga) untuk menunjukkan nilai terendah dalam lajur Harga jadual Katalog. Formula lain menyediakan jadual keseluruhan sebagai nilai pulangan, seperti RenameColumns(Katalog, "Harga", "Kos"), yang mengembalikan semua rekod daripada jadual Katalog tetapi mengubah nama lajur Harga kepada Kos.

Sama seperti nombor, formula yang melibatkan jadual dan rekod secara automatik mengira semula sebagai jadual dasar atau perubahan rekod. Jika kos produk dalam jadual Katalog adalah lebih rendah di bawah minimum sebelumnya, nilai pulangan formula Min akan berubah secara automatik untuk memadankannya.

Fungsi jadual dan sifat kawalan

Pertimbangkan fungsi Lebih Rendah. Jika pemboleh ubah alu-aluan mengandungi rentetan teks "Helo, Dunia", formula yang Lebih Rendah( alu-aluan ) mengembalikan "helo, dunia". Fungsi ini tidak, dalam apa jua cara, mengubah nilai dalam pemboleh ubah tersebut. Lebih rendah ialah fungsi tulen kerana ia hanya memproses input dan menghasilkan output. Itu sahaja; Ia tidak mempunyai kesan sampingan. Semua fungsi dalam Excel dan kebanyakan fungsi dalam Power Fx adalah fungsi tulen, yang membolehkan buku kerja atau aplikasi dikira semula secara automatik.

Power Fx menawarkan satu set fungsi yang beroperasi pada jadual dengan cara yang sama. Fungsi ini mengambil jadual sebagai input dan menapis, mengisih, mengubah, mengurangkan dan merumuskan keseluruhan jadual data. Malah, Lebih Rendah dan banyak fungsi lain yang biasanya mengambil nilai tunggal juga boleh mengambil jadual lajur tunggal sebagai input.

Banyak fungsi mengambil jadual satu lajur sebagai input mereka. Jika jadual keseluruhan hanya mempunyai satu lajur, anda boleh menentukannya mengikut nama. Jika Jadual mempunyai berbilang lajur, anda boleh menentukan salah satu daripada lajur dengan menggunakan sintaks Table.Column. Contohnya, Products.Name mengembalikan jadual lajur tunggal hanya nilai Nama dari jadual Produk.

Anda boleh membentuk semula sepenuhnya jadual seperti yang anda inginkan dengan menggunakan fungsi AddColumns, RenameColumns, ShowColumns, atau DropColumns. Sekali lagi, fungsi ini hanya mengubah output mereka, bukan sumber mereka.

Tingkah laku formula

Fungsi lain direka khusus untuk mengubah suai data dan mempunyai kesan sampingan. Oleh kerana fungsi ini tidak tulen, anda mesti membina dengan teliti, dan ia tidak boleh mengambil bahagian dalam mengira semula nilai secara automatik dalam aplikasi. Anda boleh menggunakan fungsi ini hanya dalam formula tingkah laku.

Skop rekod

Sesetengah fungsi beroperasi dengan menilai formula merentasi semua rekod jadual secara individu. Hasil formula digunakan dalam pelbagai cara:

  • AddColumns - Formula menyediakan nilai medan yang ditambah.
  • Purata, Maks, Min , Jumlah , StdevP , VarP - Formula memberikan nilai untuk diagregatkan.
  • Penapis,Carian - Formula menentukan sama ada rekod perlu disertakan dalam output.
  • Concat - Formula menentukan rentetan untuk digabungkan bersama.
  • Berbeza - Formula mengembalikan nilai, digunakan untuk mengenal pasti rekod pendua.
  • ForAll - Formula boleh mengembalikan sebarang nilai, berpotensi dengan kesan sampingan.
  • Isih- Formula menyediakan nilai untuk mengisih rekod.
  • Dengan - Formula boleh mengembalikan sebarang nilai, berpotensi dengan kesan sampingan.

Dalam formula ini, anda boleh merujuk medan rekod sedang diproses. Setiap fungsi ini mencipta "skop rekod" dalam mana formula dinilai, di mana medan rekod adalah tersedia sebagai tahap teratas. Anda juga boleh merujuk sifat kawalan dan nilai lain dari seluruh aplikasi anda.

Sebagai contoh, ambil jadual Produk yang diletakkan dalam pemboleh ubah global:

Jadual yang diminta.

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 sama ada mana-mana produk ini telah lebih diminta daripada yang sedia ada:

Filter( Products, 'Quantity Requested' > 'Quantity Available' )

Argumen pertama untuk Tapis adalah jadual rekod untuk beroperasi, dan argumen kedua adalah formula. Penapis mencipta skop rekod untuk menilai formula ini di mana medan setiap rekod tersedia, dalam kes ini Produk, Kuantiti Diminta dan Kuantiti Tersedia. Hasil perbandingan menentukan jika setiap rekod perlu dimasukkan ke dalam hasil fungsi:

Jadual diperlukan.

Menambah contoh ini, kita boleh mengira jumlah setiap produk kepada pesanan:

AddColumns( 
    Filter( Products, 'Quantity Requested' > 'Quantity Available' ), 
    "Quantity To Order", 'Quantity Requested' - 'Quantity Available'
)

Di sini, kami menambahkan lajur yang dikira pada hasilnya. AddColumns mempunyai skop rekod sendiri yang digunakan untuk mengira perbezaan antara apa yang telah diminta dan apa yang tersedia.

Tambah lajur.

Akhir sekali, kita boleh mengurangkan hasil jadual untuk hanya lajur yang kami mahu:

ShowColumns(
    AddColumns(
        Filter( Products, 'Quantity Requested' > 'Quantity Available' ),
        "Quantity To Order", 'Quantity Requested' - 'Quantity Available'
    ),
    "Product",
    "Quantity To Order"
)

Untuk memesan sahaja.

Ambil perhatian bahawa dalam perkara di atas, kami menggunakan sebut harga berganda (") di beberapa tempat dan sebut harga tunggal (') dalam tempat lain. Sebut harga tunggal diperlukan apabila merujuk nilai objek, seperti medan atau jadual, di mana nama objek mengandungi ruang. Sebut harga berganda digunakan apabila kita tidak merujuk nilai objek tetapi sebaliknya bercakap mengenainya, terutama dalam situasi di mana objek tidak wujud, seperti dalam kes ini AddColumns.

Penyahtaksaan

Nama medan ditambah dengan skop rekod menggantikan nama yang sama dari tempat lain dalam aplikasi. Apabila ini berlaku, anda masih boleh mengakses nilai daripada luar skop rekod dengan operator @ penyahtaksaan:

  • Untuk mengakses nilai daripada skop rekod bersarang, gunakan operator @ dengan nama jadual dioperasikan selepas menggunakan corak ini:
    Jadual[@Nama Medan]
  • Untuk mengakses nilai global, seperti sumber data, koleksi dan pemboleh ubah konteks, gunakan corak [@ObjectName] (tanpa penetapan jadual).

Jika jadual yang dikendalikan adalah ungkapan, seperti Tapis(Jadual, ... ), maka operator penyahtaksaan tidak boleh digunakan. Hanya skop rekod yang paling dalam boleh akses medan daripada ungkapan jadual ini, dengan tidak menggunakan operator penyahtaksaan.

Contohnya, bayangkan mempunyai koleksi X:

Nilai X.

Anda boleh mencipta koleksi ini dengan ClearCollect( X, [1, 2] ).

Dan koleksi lain Y:

Nilai Y.

Anda boleh mencipta koleksi ini dengan ClearCollect( Y, ["A", "B"] ).

Selain daripada itu, menentukan konteks pemboleh ubah bernama Nilai dengan formula ini: UpdateContext( {Nilai: "!"} )

Mari kita diletakkan semuanya bersama. Dalam konteks ini, formula berikut:

Ungroup(
    ForAll( X,
        ForAll( Y,
            Y[@Value] & Text( X[@Value] ) & [@Value]
        )
    ),
    "Value"
)

menghasilkan jadual ini:

Nilai XY.

Apakah yang sedang berlaku di sini? Fungsi paling luar ForAll menentukan skop rekod untuk X, membolehkan akses kepada Nilai medan bagi setiap rekod kerana diproses. Ia boleh diakses dengan hanya menggunakan perkataan Nilai atau menggunakan X[@Value].

Fungsi paling dalam ForAll menentukan skop rekod lain untuk Y. Sejak jadual ini juga mempunyai medan ditentukan Nilai, menggunakan Nilai di sini merujuk kepada medan dalam rekod Y dan tidak lagi yang daripada X. Di sini, untuk akses medan X Nilai, kita mesti menggunakan versi lebih panjang dengan operator penyahtaksaan.

Sejak Y adalah skop rekod paling dalam, mengakses medan jadual ini tidak memerlukan penyahtaksaan, membolehkan kita menggunakan formula ini dengan hasil yang sama:

Ungroup(
    ForAll( X,
        ForAll( Y,
            Value & Text( X[@Value] ) & [@Value]
        )
    ),
    "Value"
)

Semua skop rekod ForAll menggantikan skop global. Pemboleh ubah konteks Nilai yang kami ditentukan tidak tersedia mengikut nama tanpa operator penyahtaksaan. Untuk akses nilai ini, gunakan [@Value].

Nyahkumpulan meratakan hasil kerana fungsi ForAll bersarang menghasilkan jadual hasil bersarang.

Jadual lajur tunggal

Untuk beroperasi pada lajur tunggal daripada jadual, gunakan fungsi ShowColumns seperti dalam contoh ini:

ShowColumns( Products, "Product" )

Formula ini menghasilkan jadual lajur tunggal ini:

Lajur tunggal.

Untuk alternatif yang lebih pendek, tentukan Table.Column, yang mengekstrak jadual lajur tunggal yang hanya Lajur daripada Jadual. Contohnya, formula ini menghasilkan hasil yang sama seperti menggunakan ShowColumns.

Products.Product

Rekod sebaris

Anda menyatakan rekod dengan menggunakan tanda kurung ikal yang mengandungi nilai medan bernama. Contohnya, anda boleh menyatakan rekod pertama dalam jadual pada permulaan topik ini dengan menggunakan formula ini:

{ Name: "Chocolate", Price: 3.95, 'Quantity on Hand': 12, 'Quantity on Order': 10 }

Anda juga boleh membenamkan formula dalam formula lain, kerana contoh ini menunjukkan:

{ Name: First(Products).Name, Price: First(Products).Price * 1.095 }

Anda boleh sarang rekod dengan yang bertempat tanda kurung ikal, kerana contoh ini menunjukkan:

{ 'Quantity': { 'OnHand': ThisItem.QuantOnHand, 'OnOrder': ThisItem.QuantOnOrder } }

Lampirkan setiap nama lajur yang mengandungi aksara khas, seperti ruang atau kolon, dalam sebut harga tunggal. Untuk menggunakan sebut harga tunggal dalam nama lajur, gandakannya.

Ambil perhatian bahawa nilai dalam lajur Harga tidak termasuk simbol mata wang, seperti tanda dolar. Format yang akan digunakan apabila nilai dipaparkan.

Jadual sebaris

Anda boleh mencipta jadual dengan menggunakan fungsi Jadual dan set rekod. Anda boleh menyatakan jadual pada permulaan topik ini dengan menggunakan formula 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 boleh sarang jadual:

Table( 
	{ Name: "Chocolate", 
	  'Quantity History': Table( { Quarter: "Q1", OnHand: 10, OnOrder: 10 },
	                             { Quarter: "Q2", OnHand: 18, OnOrder: 0 } ) 
	}
)

Jadual nilai sebaris

Anda boleh mencipta jadual lajur tunggal dengan menentukan nilai dalam kurungan persegi. Jadual yang terhasil mempunyai lajur tunggal, bernama Nilai.

Contohnya, [ 1, 2, 3, 4 ] adalah bersamaan dengan Table( { Value: 1 }, { Value: 2 }, { Value: 3 }, { Value: 4 } ) dan kembalikan jadual ini:

Jadual sebaris.