Batasan kueri: Delegasi dan batas kueri
Memahami delegasi
Power Apps Bekerja paling baik dengan sumber data back-end ketika Power Fx kueri dapat sepenuhnya diterjemahkan ke dalam kueri setara yang dapat dijalankan pada sumber data. Power Apps Mengirim kueri yang dipahami sumber data, kueri dilakukan pada sumber data, dan hasil kueri dikembalikan Power Apps. Misalnya, sumber data mungkin melakukan pekerjaan memfilter data pada sumber data dan hanya mengembalikan baris yang memenuhi kriteria filter. Ketika ini berfungsi dengan benar, kami mengatakan bahwa kueri didelegasikan ke sumber data untuk melakukan pekerjaan kueri.
Namun, Power Fx kueri tidak selalu dapat diterjemahkan ke dalam kueri yang setara di semua sumber data. Misalnya, Dataverse mendukung lebih banyak fitur kueri daripada Excel. Dataverse mendukung operator kueri 'in' (keanggotaan) dan Excel tidak. Kami mengatakan kueri tidak dapat didelegasikan jika kueri menggunakan fitur yang tidak didukung oleh sumber data. Secara umum, jika ada bagian dari ekspresi kueri yang tidak dapat didelegasikan, kami tidak mendelegasikan bagian apa pun dari kueri.
Ketika kueri tidak dapat didelegasikan, Power Apps hanya mendapatkan 500 rekaman pertama dari sumber data dan kemudian melakukan tindakan dalam kueri. Batas ini dapat ditingkatkan menjadi 2.000 catatan Mengubah batas Power Apps membatasi ukuran hasil menjadi 500 catatan untuk mempertahankan kinerja Power Apps yang baik. Melalui eksperimen, kami menemukan bahwa set hasil yang lebih besar dari ukuran ini menimbulkan masalah performa untuk aplikasi Anda dan Power Apps secara umum.
Namun, batasan ini dapat menjadi masalah karena kueri mungkin mengembalikan hasil yang salah jika data pada sumber data melebihi 500/2000 catatan. Misalnya, pertimbangkan contoh di mana sumber data Anda memiliki 10 Juta catatan dan kueri Anda perlu beroperasi pada bagian terakhir data. (Misalnya, nama keluarga yang dimulai dengan 'Z') Namun, kueri Anda memiliki operator yang tidak dapat didelegasikan di dalamnya (misalnya, berbeda.) Dalam hal ini, Anda hanya mendapatkan 500/2000 catatan pertama dan Anda memiliki hasil yang salah.
Buat kueri Anda Power Fx dengan menggunakan tabel yang dapat didelegasikan untuk sumber data Anda. Anda hanya boleh menggunakan fungsi kueri yang dapat didelegasikan. Ini adalah satu-satunya cara untuk menjaga aplikasi Anda tetap berkinerja baik dan memastikan pengguna dapat mengakses semua informasi yang mereka butuhkan.
Perhatikan peringatan delegasi yang mengidentifikasi tempat yang tidak memungkinkan delegasi. Jika Anda bekerja dengan kumpulan data kecil (kurang dari 500 rekaman), Anda dapat menggunakan sumber data dan rumus apa pun karena aplikasi dapat memproses data secara lokal jika rumus tidak dapat didelegasikan.
Catatan
Peringatan delegasi membantu Anda mengelola aplikasi Anda sehingga memiliki hasil yang benar. Jika data dalam sumber data Anda melebihi 500 rekaman dan fungsi tidak dapat didelegasikan, Power Fx akan menandai rumus dengan garis bawah biru.
Sumber data yang dapat didelegasikan
Delegasi didukung untuk sumber data tabular tertentu saja. Jika sumber data mendukung delegasi, dokumentasi konektor menguraikan dukungan tersebut. Contohnya, sumber data tabular ini adalah yang paling populer, dan mereka mendukung delegasi:
- Fungsi dan operasi Power Apps yang dapat didelegasikan untuk Microsoft Dataverse
- Fungsi dan operasi Power Apps yang dapat didelegasikan untuk SharePoint
- Power Apps Fungsi dan operasi yang dapat didelegasikan untuk SQL Server
- Fungsi dan operasi Power Apps yang dapat didelegasikan untuk Salesforce
Buku kerja Excel yang diimpor (menggunakan sumber data Tambah data statis ke aplikasi Anda), koleksi, dan tabel yang tersimpan dalam variabel konteks tidak memerlukan delegasi. Semua data ini sudah ada di memori, dan bahasa Power Apps yang lengkap dapat diterapkan.
Fungsi yang dapat didelegasikan
Langkah selanjutnya adalah menggunakan rumus yang dapat didelegasikan. Yang disertakan di sini adalah elemen rumus yang dapat didelegasikan. Namun, setiap sumber data berbeda, dan tidak semua sumber data mendukung semua elemen ini. Periksa peringatan delegasi dalam rumus tertentu Anda.
Fungsi filter
Filter, Pencarian, Pertama ... dan Pencarian dapat didelegasikan.
Di dalam fungsi Filter dan LookUp, Anda dapat menggunakan fungsi ini dengan kolom tabel untuk memilih rekaman yang sesuai:
- And (termasuk &&), Or (termasuk ||), Not (termasuk !)
- In
Catatan
In hanya didelegasikan untuk kolom pada sumber data. Misalnya, jika sumber data adalah tabel Akun, maka
Filter(Accounts, Name in ["name1", "name2"])
didelegasikan ke sumber data untuk evaluasi. Namun,Filter(Accounts, PrimaryContact.Fullname in ["name1", "name2"])
tidak mendelegasikan karena kolom Fullname berada pada tabel yang berbeda (PrimaryContact) daripada Akun. Ekspresi dievaluasi secara lokal. - =, <>, >=, <=, >, <
- +, -
- TrimEnds
- IsBlank
- StartsWith, EndsWith
- Nilai konstan yang sama di semua rekaman, seperti properti kontrol serta variabel global dan konteks.
Anda juga dapat menggunakan bagian dari rumus Anda yang akan mengevaluasi nilai konstan untuk semua rekaman. Misalnya, Left( Language(), 2 ), Date( 2019, 3, 31 ), dan Today() tidak bergantung pada kolom mana pun pada rekaman, sehingga mengembalikan nilai yang sama untuk semua rekaman. Nilai ini dapat dikirim ke sumber data sebagai konstanta dan tidak akan memblokir delegasi.
Daftar sebelumnya tidak mencakup item penting berikut:
- Jika
- *, /, Mod
- Operasi pengecoran kolom Teks, Nilai ...
- Concatenate (termasuk &)
- ExactIn
- Fungsi manipulasi string: Lower, Upper, Left, Mid, Len, ...
- Sinyal: Location, Acceleration, Compass, ...
- Volatil: Rand, ...
- Koleksi
Batasan kueri
Tingkat pencarian
Power Apps mendukung dua tingkat pencarian. Ini berarti bahwa ekspresi Power Fx kueri dapat memiliki - paling banyak - dua fungsi pencarian di dalamnya. Batasan ini untuk menjaga kinerja. Jika ekspresi kueri menyertakan pencarian, Power Apps pertama-tama lakukan kueri untuk mendapatkan tabel dasar. Kemudian, ia melakukan kueri kedua yang memperluas tabel pertama dengan informasi pencarian. Kami mendukung satu level lagi di luar itu sebagai maksimum. Namun, untuk offline, kami hanya mendukung satu tingkat pencarian yang diperluas.
Evaluasi ekspresi - properti entitas harus berada di sisi kiri 'LHS' dari operator kesetaraan
Penting untuk menempatkan properti entitas yang akan dibandingkan dalam ekspresi di sisi kiri 'LHS' dari persamaan. Sebagai ilustrasi, dalam contoh di bawah ini properti entitas'ID unit bisnis'. Nama adalah nilai properti dan harus ditempatkan pada LHS ekspresi yang akan dievaluasi. Ekspresi berikut berhasil:
Filter(
Budgets,
'Business unit ID'.Name = LookUp(
Users,
'Primary Email' = User().Email,
'Business Unit'
).Name,
DataCardValue37.Selected.'Date Range String'='Date Range String'
)
Namun, ekspresi ini tidak akan:
Filter(
Budgets,
LookUp(
Users,
'Primary Email' = User().Email,
'Business Unit'
).Name = 'Business unit ID'.Name,
'Date Range String'=DataCardValue37.Selected.'Date Range String'
)
Fungsi pengurutan
Sort dan SortByColumns dapat didelegasikan.
Dalam Sort, rumusnya hanya dapat berupa nama satu kolom dan tidak dapat menyertakan operator atau fungsi lainnya.
Fungsi agregat
Beberapa fungsi agregat dapat didelegasikan tergantung pada dukungan di back-end. Sum, Average, Min, dan Maks dapat didelegasikan. Fungsi penghitungan seperti CountRows dan Count juga dapat didelegasikan. Hanya sejumlah sumber data yang mendukung fungsi ini untuk delegasi saat ini. Untuk informasi selengkapnya, lihat,Daftar delegasi.
Dukungan delegasi RemoveIf dan UpdateIf dalam Eksperimental dan nonaktif secara default dinonaktifkan.
Fungsi yang tidak dapat didelegasikan
Semua fungsi lainnya tidak mendukung delegasi, termasuk fungsi penting berikut:
Batas yang tidak dapat didelegasikan
Rumus yang tidak dapat didelegasikan akan diproses secara lokal. Pemrosesan lokal memungkinkan luasnya Power Apps bahasa rumus untuk digunakan. Namun, konsekuensinya: semua data harus dibawa ke perangkat terlebih dahulu, yang dapat melibatkan pengambilan data dalam jumlah besar melalui jaringan. Hal itu dapat memakan waktu, sehingga memberikan kesan bahwa aplikasi Anda lambat atau mungkin terjadi crash.
Untuk menghindari hal ini, Power Apps memberlakukan batas pada jumlah data yang dapat diproses secara lokal: 500 rekaman secara default. Kami memilih angka ini sehingga Anda masih memiliki akses lengkap ke himpunan data kecil dan Anda dapat menyempurnakan penggunaan himpunan data besar dengan melihat hasil parsial.
Perlu sangat hati-hati saat menggunakan fasilitas ini karena dapat membingungkan pengguna. Misalnya, pertimbangkan fungsi Filter dengan rumus pilihan yang tidak dapat didelegasikan, pada sumber data yang berisi sejuta rekaman. Karena pemfilteran dilakukan secara lokal, hanya 500 rekaman pertama yang dipindai. Jika rekaman yang diinginkan adalah rekaman 501 atau 500.001, rekaman tidak akan dianggap atau dikembalikan oleh Filter.
Fungsi agregat juga dapat menyebabkan kebingungan. Ambil Average pada kolom sumber data yang sama berisi juta rekaman. Rata-rata tidak dapat didelegasikan dalam kasus ini karena ekspresi tidak didelegasikan (lihat catatan sebelumnya), jadi hanya 500 rekaman pertama yang direratakan. Jika Anda tidak berhati-hati, jawaban parsial dapat disalahartikan sebagai jawaban lengkap oleh pengguna aplikasi Anda.
Mengubah batas
500 adalah jumlah rekaman default, tetapi Anda dapat mengubah angka ini untuk seluruh aplikasi:
- Pilih pengaturan.
- Dalam Umum, ubah pengaturan batas baris Data dari 1 ke 2000.
Dalam beberapa kasus, Anda tahu bahwa 2.000 (atau 1.000 atau 1.500) akan memenuhi kebutuhan skenario Anda. Dengan berhati-hati, Anda dapat meningkatkan jumlah ini sesuai skenario Anda. Saat Anda meningkatkan jumlah ini, kinerja aplikasi Anda dapat menurun, terutama untuk tabel lebar dengan banyak kolom. Tetap saja, jawaban terbaik adalah mendelegasikan sebanyak yang Anda bisa.
Untuk memastikan bahwa aplikasi Anda dapat menskalakan ke kumpulan data besar, kurangi setelan ini menjadi 1. Segala sesuatu yang tidak dapat didelegasikan menghasilkan rekaman tunggal, yang seharusnya mudah dideteksi saat menguji aplikasi Anda. Hal ini dapat membantu menghindari kejutan saat mencoba membawa aplikasi proof-of-concept ke produksi.
Peringatan delegasi
Untuk memudahkan Anda mengetahui apa yang sedang dan tidak didelegasikan, Power Apps memberikan peringatan (segitiga kuning) bila Anda membuat rumus yang berisi sesuatu yang tidak dapat didelegasikan.
Peringatan delegasi hanya ditampilkan pada rumus yang beroperasi di sumber data yang dapat didelegasikan. Jika Anda tidak melihat peringatan dan Anda yakin rumus Anda tidak didelegasikan dengan benar, periksa jenis sumber data terhadap daftar sumber data yang dapat didelegasikan sebelumnya di artikel ini.
Contoh
Untuk contoh ini, Anda akan secara otomatis membuat aplikasi tiga layar berdasarkan tabel SQL Server bernama [dbo].[Fruit]. Untuk informasi tentang cara membuat aplikasi, Anda dapat menerapkan prinsip serupa dalam artikel tentang Dataverse SQL Server.
Properti Item galeri diatur ke rumus yang berisi SortByColumns dan fungsi Pencarian, keduanya dapat didelegasikan.
Dalam kotak pencarian, ketik "Apple".
Titik berbaris muncul sebentar di dekat bagian atas layar saat aplikasi berkomunikasi dengan SQL Server untuk memproses permintaan pencarian. Semua rekaman yang memenuhi kriteria pencarian akan muncul, meskipun sumber data berisi jutaan rekaman.
Hasil pencarian mencakup "Apples" dan "Pineaplle" karena fungsi Search terlihat di mana pun dalam kolom teks. Jika Anda ingin menemukan hanya rekaman yang berisi istilah pencarian pada awal nama buah, Anda dapat menggunakan fungsi lainnya yang dapat didelegasikan, Filter, dengan istilah pencarian yang lebih rumit. (Agar mudah, hapus panggilan SortByColumns.)
Hasil baru mencakup "Apples" tetapi tidak "Pineapple". Namun, segitiga kuning muncul di sebelah galeri (dan di gambar mini layar jika bilah navigasi kiri menampilkan gambar mini), dan garis bergelombang warna biru akan muncul di bawah bagian rumus. Masing-masing elemen ini menunjukkan peringatan. Jika Anda mengarahkan kursor ke segitiga kuning di sebelah galeri, pesan ini akan ditampilkan:
SQL Server adalah sumber data yang dapat didelegasikan, dan Filter adalah fungsi yang dapat didelegasikan, tetapi Mid dan Len tidak dapat didelegasikan ke sumber data mana pun.
Tetapi berhasil, bukan? Ya, semacam itu. Dan itulah sebabnya yang muncul adalah peringatan, dan bukan garis bergelombang berwarna mérah.
- Jika tabel berisi kurang dari 500 rekaman, rumus berfungsi dengan sempurna. Semua rekaman dibawa ke perangkat, dan Filter diterapkan secara lokal.
- Jika tabel berisi lebih dari 500 rekaman, rumus tidak akan mengembalikan rekaman 501 ke atas, bahkan walaupun hasilnya sesuai dengan kriteria.
Lihat juga
Dampak penggunaan fungsi yang tidak dapat di didelegasikan dan batas baris data yang tidak sesuai terhadap kinerja
Tips dan praktik terbaik kinerja untuk menggunakan delegasi
Catatan
Apa bahasa dokumentasi yang Anda inginkan? Lakukan survei singkat. (perlu diketahui bahwa survei ini dalam bahasa Inggris)
Survei akan berlangsung kurang lebih selama tujuh menit. Tidak ada data pribadi yang dikumpulkan (pernyataan privasi).