Batasan kueri: Batas delegasi dan 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 di sumber data. Power Apps mengirim kueri yang dipahami sumber data, kueri dilakukan di sumber data, dan hasil kueri dikembalikan ke 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 sumber data. Secara umum, jika ada bagian dari ekspresi kueri yang tidak dapat didelegasikan, kami tidak mendelegasikan bagian apa pun dari kueri.

Saat kueri tidak dapat didelegasikan,hanya Power Apps mendapatkan 500 rekaman pertama dari sumber data lalu melakukan tindakan dalam kueri. Batas ini dapat ditingkatkan menjadi 2.000 rekaman Mengubah batas membatasi ukuran hasil menjadi 500 rekaman Power Apps untuk mempertahankan kinerja yang Power Apps baik. Kami menemukan melalui eksperimen bahwa set hasil yang lebih besar dari ukuran ini menimbulkan masalah performa untuk aplikasi Anda dan Power Apps secara umum.

Namun, keterbatasan ini dapat menjadi masalah sebagai permintaan dapat 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 catatan 500/2000 pertama dan Anda memiliki hasil yang salah.

Buat kueri Anda dengan menggunakan tabel yang dapat didelegasikan untuk sumber data Anda Power Fx . Anda hanya boleh menggunakan fungsi kueri yang dapat didelegasikan. Ini adalah satu-satunya cara untuk menjaga aplikasi Anda 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 bisa menggunakan sumber data dan rumus apa pun karena aplikasi bisa memproses data secara lokal jika rumus tidak bisa didelegasikan.

Catatan

Peringatan delegasi membantu Anda mengelola aplikasi Anda sehingga memiliki hasil yang benar. Jika data di sumber data Anda melebihi 500 rekaman dan fungsi tidak dapat didelegasikan, Power Fx akan menandai rumus dengan garis bawah berwarna 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:

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:

Batasan kueri

Tingkat pencarian

Power Apps Mendukung dua tingkat pencarian. Ini berarti bahwa Power Fx ekspresi kueri dapat memiliki - paling banyak - dua fungsi pencarian di dalamnya. Keterbatasan ini untuk menjaga kinerja. Jika ekspresi kueri menyertakan pencarian,pertama-tama Power Apps lakukan kueri untuk mendapatkan tabel dasar. Kemudian, ia melakukan kueri kedua yang memperluas tabel pertama dengan informasi pencarian. Kami mendukung satu tingkat lagi di luar itu sebagai maksimum. Namun, untuk offline, kami hanya mendukung perluasan satu tingkat pencarian.

Evaluasi ekspresi - properti entitas harus berada di sisi kiri 'LHS' operator kesetaraan

Penting untuk menempatkan properti entitas untuk dibandingkan dalam ekspresi di sisi kiri 'LHS' persamaan. Sebagai ilustrasi, dalam contoh di bawah properti entitas'ID unit bisnis'. Name 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, ungkapan 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-fungsi ini untuk delegasi saat ini. Untuk informasi selengkapnya, lihat,Daftar delegasi.

Dukungan delegasi RemoveIf dan UpdateIf berada di Eksperimental dan nonaktif secara default.

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 penggunaan bahasa rumus secara penuh Power Apps . 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:

  1. Pilih pengaturan.
  2. 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 set 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 yakin rumus Anda tidak didelegasikan dengan benar, periksa tipe 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.

Aplikasi tiga layar.

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.

Kontrol input teks pencarian.

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

Menghapus 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:

Arahkan kursor ke peringatan delegasi.

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