Bu makalede7 bölüm
- Teknoloji
- Power Apps canvas, Power Fx, SharePoint Online, Dataverse, Monitor
- Konu
- Delegasyon sorunları ve canvas uygulama performansı
- Seviye
- Orta–ileri
- Ön koşullar
- Canvas uygulama geliştirme deneyimi
- Power Fx formüllerine aşinalık
- SharePoint listesi veya Dataverse tablosu
Birkaç yüz kayıtla sorunsuz çalışan canvas ekranı, liste birkaç bin kayda ulaşınca ya eksik sonuç döndürür ya da saniyelerce boş bekler. Kullanıcı “aradığım talep sistemde yok” diye arar; kayıt oradadır, uygulama onu hiç görmemiştir. Sebep neredeyse her zaman iki yerde çıkar: delege edilmeyen sorgular ve açılışta gereksiz yere çekilen veri. Aşağıda mevcut bir Power Apps uygulamasında delegasyon uyarısını nasıl okuyacağınızı, sorguyu nasıl yeniden yazacağınızı ve performansı Monitor ile nasıl ölçeceğinizi sahada kullandığımız sırayla anlatıyoruz.
Delegasyon nedir, neden önemsenmeli
Delegasyon, bir Power Fx sorgusunun (filtreleme, sıralama, arama) veri kaynağının kendisinde çalışmasıdır. Sorgu delege edildiğinde Power Apps kaynağa “şu koşula uyan kayıtları, şu sırayla ver” der; filtreleme SharePoint’te, Dataverse’te veya SQL Server’da yapılır, uygulamaya yalnız sonuç sayfaları gelir. Galeri bu sayfaları kullanıcı kaydırdıkça çeker.
Sorgu delege edilemiyorsa davranış değişir: Power Apps kaynaktan yalnız ilk N kaydı indirir, gerisini cihazda yapar. Bu N, uygulama ayarlarındaki veri satırı sınırıdır. Formül çubuğunda sarı üçgen ve formülün altında mavi çizgi görüyorsanız Power Apps size açıkça söylüyor: bu sorgu kaynağa tam gitmiyor. Uyarıyı “sarı, kırmızı değil” diye geçmek en pahalı hatadır.
Low-code bir uygulamada delege edilebilir bir kaynak seçmek tek başına yetmez. Delegasyon kaynak + fonksiyon + operatör + sütun türü kombinasyonuna bağlıdır. Excel tabloları ve koleksiyonlar yerel kaynaklardır; orada delegasyon kavramı yoktur, veri tümüyle cihaza gelir. SharePoint, Dataverse ve SQL Server delege edilebilir kaynaklardır ama her biri farklı fonksiyon setini destekler. Aynı formül birinde çalışır, diğerinde çalışmaz.
Delegasyon sınırı ve sessiz veri kaybı
Veri satırı sınırı varsayılan olarak 500’dür; Ayarlar > Genel > Veri satırı sınırı altından en fazla 2.000’e çıkarılır. Sahada en sık gördüğümüz “çözüm” budur: değeri 2.000 yapıp uyarıyı unutmak. Bu sorunu çözmez, yalnız ortaya çıkacağı günü erteler. Asıl risk hata mesajı olmamasıdır. Uygulama çalışır. Sonuç eksiktir.
Tipik senaryo: 6.000 kayıtlı bir SharePoint “Talepler” listesinde arama kutusu Search() ile filtreleniyor. SharePoint için Search delege edilmediğinden Power Apps ilk 500 kaydı alır ve aramayı bunların içinde yapar. Kullanıcı eski bir talebi bulamaz. Sayaçlarda durum daha sinsidir: CountRows(Filter(Talepler, Durum.Value = "Açık")) gibi bir ifade kaynağa göre delege edilmeyebilir ve gösterge panelinde yanlış ama makul görünen bir sayı üretir. Yanlış sayı, eksik sayıdan daha tehlikelidir; kimse sorgulamaz.
Uyarıyı inceleme aşamasında da yakalayabilirsiniz: Power Apps Studio’daki App checker (uygulama denetleyicisi) delegasyon uyarılarını tek listede toplar. Yayın öncesi kontrol listesine “App checker’da delegasyon uyarısı sıfır veya bilinçli olarak kabul edilmiş” maddesini koymak, sorunu üretime taşımamanın en ucuz yoludur. Beş dakikalık kontrol, haftalarca süren “veri kayboluyor” şikâyetini önler.
Delege edilebilen sorgu kalıpları
Desteklenen fonksiyonlar kaynağa göre değişir ve Microsoft bu listeleri zamanla genişletir; nihai referans her bağlayıcının dokümantasyonundaki delegasyon tablosudur. Aşağıdaki tablo sahada en sık takıldığımız kalıplar için başlangıç noktasıdır, ezber listesi değildir.
| Kalıp | SharePoint | Dataverse | Alternatif |
|---|---|---|---|
Filter + = |
Delege edilir | Delege edilir | — |
StartsWith |
Delege edilir | Delege edilir | Arama için tercih edin |
Search, EndsWith |
Delege edilmez | Bağlayıcı dokümanını kontrol edin | StartsWith veya ayrı arama sütunu |
in (alt dize) |
Delege edilmez | Bağlayıcı dokümanını kontrol edin | Seçim/arama sütununda = |
Sum, Average |
Delege edilmez | Delege edilir (satır sınırlamalarıyla) | Toplamı Power Automate veya sunucuda hesaplayın |
ID sütununda <, > |
Yalnız = delege edilir |
— | Tarih veya sayı sütunu kullanın |
Kuralı anlamak listeyi ezberlemekten daha işe yarar. Bir koşulun delege edilebilmesi için satıra bağlı kısmın kaynak tarafında değerlendirilebilmesi gerekir. Satırdan bağımsız ifadeler (Today(), bir değişken, açılır listenin seçili değeri) Power Apps tarafında önce hesaplanır ve sabit olarak gönderilir; sorun çıkarmaz. Sorun, sütun değerini delege edilemeyen bir fonksiyona sokmaktır: Filter(Talepler, Year(Created) = 2026) delege edilmez, aynı koşul tarih aralığıyla yazıldığında edilir. Sütunu fonksiyona sokmayın.
// Delege edilmeyen: sütun değeri Year() içine giriyor
Filter(Talepler, Year(Created) = 2026)
// Delege edilen: sabit aralık önce hesaplanıyor
With(
{ bas: Date(2026, 1, 1), bit: Date(2027, 1, 1) },
Filter(Talepler, Created >= bas && Created < bit)
)
// Arama: Search yerine StartsWith (SharePoint)
Filter(
Talepler,
StartsWith(Title, txtArama.Text),
Durum.Value = drpDurum.Selected.Value
)
SharePoint tarafında ikinci bir sınır listenin kendisindedir. Liste görünümü eşiğini (5.000 öğe) aşan bir listede dizinlenmemiş sütuna uygulanan delege filtre hata verebilir veya beklenmedik sonuç döndürebilir. Bu yüzden filtrelenen ve sıralanan sütunları SharePoint’te dizinlemek uygulama tasarımının parçasıdır, sonradan yapılacak bir ince ayar değildir; sütun ve içerik türü kararlarını SharePoint meta veri ve içerik türü tasarımı rehberinde ele aldık. Kaynak sürekli delegasyon sorunu üretiyorsa sorun formülde değil kaynak seçimindedir; bu kararı Dataverse mı SharePoint listesi mi yazısında karşılaştırdık.
Ekran açılış süresini düşürmek
Delegasyon doğru sonuçla ilgilidir; açılış süresi ise ne zaman ve ne kadar veri çekildiğiyle. Yavaş açılan uygulamalarda konsolda ilk bakılacak yer App.OnStart’tır. Çoğunda art arda dizilmiş bir sürü ClearCollect çağrısı bulunur. Her çağrı bir öncekini bekler, kullanıcı da hiçbirine ihtiyaç duymadan hepsinin bitmesini bekler.
Paralel yükleme: Concurrent
Birbirinden bağımsız yüklemeler Concurrent() ile paralel çalıştırılır; toplam süre en yavaş çağrının süresine yaklaşır. Bir şartı var: Concurrent içindeki formüllerin çalışma sırası garanti edilmez. Birinin sonucunu diğerinde kullanmayın.
Concurrent(
ClearCollect(colDepartmanlar, Departmanlar),
ClearCollect(colKategoriler, Kategoriler),
Set(gblKullanici, Office365Users.MyProfileV2())
)
OnStart yerine adlandırılmış formüller
App.Formulas içinde tanımlanan adlandırılmış formüller bildirimseldir: değer ilk kullanıldığında hesaplanır, bağımlı olduğu veri değiştikçe güncellenir. Kullanıcı e-postası, rol bilgisi, sabit listeler için Set() yerine adlandırılmış formül kullanmak açılışı hafifletir ve “değişken neden güncel değil” türü hataları azaltır. İlk ekranı belirlemek için de OnStart içinde Navigate yerine App.StartScreen özelliğini kullanın; Power Apps ilk ekranı OnStart’ın bitmesini beklemeden hazırlayabilir.
// App.Formulas
KullaniciEposta = Lower(User().Email);
YoneticiMi = !IsBlank(LookUp(Yoneticiler, Eposta = KullaniciEposta));
AcikDurumlar = ["Yeni", "İşlemde", "Beklemede"];
Koleksiyon önbellektir, kaynak değil
Sık değişmeyen küçük referans tabloları (departmanlar, lokasyonlar, kategoriler) koleksiyona alınabilir. Binlerce satırlık işlem verisini koleksiyona kopyalamak ise iki sorun yaratır: kopyalama veri satırı sınırına takılır ve galeri artık kaynağın sayfalamasından yararlanamaz. İşlem verisinde galeriyi doğrudan delege edilen bir Filter’a bağlayın. Hem daha hızlı hem daha doğru.
Ekran ve kontrol düzeyindeki yük
- Galerinin her satırında
LookUpçalıştırmak, satır sayısı kadar ayrı istek demektir. İlişkili veriyi kaynakta tutun (Dataverse’te ilişki, SharePoint’te arama sütunu) veya küçük referans tablosunu koleksiyondan okuyun. - Görünmeyen kontrollerin
Itemsözellikleri de değerlendirilebilir. Seyrek kullanılan sekmeleri ayrı ekrana taşıyın. - Bir ekranın başka ekrandaki kontrole doğrudan başvurması o ekranın da yüklenmesine yol açabilir. Ekranlar arası veriyi değişkenle veya
Navigatebağlam parametresiyle taşıyın. - Uygulamaya gömülen büyük görseller paket boyutunu şişirir; görselleri sıkıştırın, mümkünse SharePoint kütüphanesinden okuyun.
Monitor ile performans ölçümü
Tahminle optimizasyon yapılmaz. Ölçüm için Power Apps Studio’da Gelişmiş araçlar > Monitor kullanılır. Monitor, uygulamanın yaptığı her ağ isteğini, formül değerlendirmesini ve süresini olay listesi olarak gösterir. Yayımlanmış uygulama da izlenebilir; böylece kullanıcının gerçek ortamındaki davranışı, onunla birlikte oturum açarak görürsünüz.
Bizim izlediğimiz ölçüm sırası şudur:
- Monitor’ü açın, uygulamayı sıfırdan başlatın; açılıştaki tüm istekleri kaydedin.
- Olayları süreye göre sıralayın. En uzun istekler ve aynı kaynağa art arda giden çok sayıda istek ilk hedeftir.
- Her isteğin ayrıntısında dönen satır sayısına bakın. Dönen satır sayısı tam olarak veri satırı sınırına (örneğin 500 veya 2.000) eşitse, delege edilmeyen bir sorgu bulmuşsunuz demektir; delege edilen sorgular sınırdan bağımsız, daha küçük sayfalar hâlinde gelir.
- Galeri kaydırma, form gönderimi gibi kullanıcının her gün yaptığı işlemleri ayrı ayrı kaydedin.
- Değişiklikten sonra aynı senaryoyu yeniden ölçün, süreleri karşılaştırın.
Geliştirici bilgisayarında, hızlı ofis ağında yapılan ölçüm yanıltır. Kurumsal iş uygulamalarının saha kullanıcıları mobil veri veya kalabalık bir Wi-Fi üzerinden bağlanıyorsa en az bir ölçümü o koşulda yapın. Yavaş hatta açılış süresini en çok istek sayısı belirler. Bant genişliği ikinci sıradadır.
Canvas uygulama performans kontrol listesi
- App checker’da delegasyon uyarısı yok; kalanlar küçük ve büyümeyecek tablolar için bilinçli olarak kabul edildi ve belgelendi.
- Düşük veri satırı sınırıyla test yapıldı; eksik sonuç üreten sorgu kalmadı.
Search,inve sütun değerini fonksiyona sokan koşullar delege edilebilir eşdeğerleriyle değiştirildi.- SharePoint’te filtrelenen ve sıralanan sütunlar dizinlendi.
OnStartyalnız gerçekten gerekli yüklemeleri içeriyor; bağımsız yüklemelerConcurrentile paralel.- Sabit tanımlar
App.Formulasiçinde; başlangıç ekranıApp.StartScreenile belirleniyor. - Galeri satırlarında
LookUpveya ağır hesaplama yok. - Monitor ile açılış ve günlük işlemler ölçüldü; sonuçlar sürüm notuna eklendi.
Uygulama birden fazla ortamda (geliştirme, test, üretim) yaşıyorsa bu kontrolleri test ortamında gerçekçi veri hacmiyle yapın; 50 kayıtlık test listesi delegasyon hatasını asla göstermez. Ortam ayrımını Power Platform ortam stratejisi yazısında anlattık. Mevcut uygulamaların iyileştirilmesi ve kurumsal ölçekte uygulama tasarımı için Power Apps ile iş uygulamaları sayfamıza bakabilirsiniz. Fonksiyon bazlı güncel delegasyon tabloları için Microsoft’un Power Apps delegation overview dokümanı esas alınmalıdır.
Sık sorulan sorular
Veri satırı sınırını 2.000’e çıkarmak delegasyon sorununu çözer mi?
Hayır. Sınırı artırmak yalnız delege edilmeyen sorgunun işleyeceği kayıt sayısını büyütür. Kaynak 2.000 kaydı aştığında eksik sonuç sorunu aynen geri gelir, üstelik daha fazla veri indirildiği için açılış yavaşlar. Kalıcı çözüm sorguyu delege edilebilir biçimde yeniden yazmak veya uygun kaynağa geçmektir.
Delegasyon uyarısını her zaman düzeltmek gerekir mi?
Tablo kalıcı olarak veri satırı sınırının altında kalacaksa, örneğin 30 satırlık bir lokasyon listesi, uyarı bilinçli olarak kabul edilebilir. Bu kararı belgeleyin. Büyüme ihtimali olan işlem tablolarında ise uyarıyı mutlaka giderin.
Koleksiyona alınan veride delegasyon sorunu olur mu?
Koleksiyon yerel bir kaynaktır; içindeki tüm veri cihazdadır ve sorgular eksiksiz çalışır. Sorun koleksiyonu doldururken çıkar: delege edilmeyen bir sorguyla doldurulan koleksiyon en fazla veri satırı sınırı kadar kayıt içerir. Bu yüzden koleksiyonlar küçük referans verileri içindir.
Monitor yayımlanmış uygulamada kullanılabilir mi?
Evet. Power Apps portalında uygulamanın ayrıntılarından Monitor oturumu başlatılır ve yayımlanmış uygulama bu oturuma bağlanarak çalıştırılır. Kullanıcının gerçek ortamındaki istekler ve süreler böylece görünür. Kullanıcı verisi de görüneceği için oturumu kullanıcının onayıyla yapın.
- Teknoloji
- Power Apps canvas, Power Fx, SharePoint Online, Dataverse, Monitor
- Konu
- Delegasyon sorunları ve canvas uygulama performansı
- Seviye
- Orta–ileri
- Ön koşullar
- Canvas uygulama geliştirme deneyimi
- Power Fx formüllerine aşinalık
- SharePoint listesi veya Dataverse tablosu
Microsoft 365 ve Intranet