OĞUZ EROLAI·ADS·APPS

Power Query Otomatik Yenileme ve Hata Takibi

16 dk okuma

Power Query sorgusunu Excel’de kendiliğinden yeniletmenin üç yolu var: dosya açılırken, dosya açıkken her N dakikada bir ve Tümünü Yenile’yi bir makroyla tetikleyerek. Üçü de masaüstü Excel’in açık olmasını ister. Dosya kapalıyken iki yol kalıyor: Power BI’da zamanlanmış yenileme (Excel dosyanızı değil, Power BI’daki modeli yeniler) ve Görev Zamanlayıcı ile Excel’i açtıran bir makro (Microsoft gözetimsiz ve etkileşimsiz Office otomasyonunu önermiyor). Power Automate ile Office Scripts’e bu iş için güvenmeyin: Microsoft’a göre bu yolda çoğu veri yenilenmiyor. Asıl iş, yenilemenin bozulduğunu aynı sabah görmektir. En pahalı arıza hata veren yenileme değil, “başarılı” görünüp eski ya da eksik veri yükleyen yenilemedir.

Hata mesajı arıyorsanız doğrudan hata tablosuna gidin.

Bu sayfa her gün çok kaynaklı rapor yenileyen planlama, finans ve raporlama sorumluları için. Microsoft kaynaklarının hepsini 16 Ekim 2026’da okudum. M kodlarını Power Query’de, formülü Excel’de çalıştırmadım; mantıklarını bir Python betiğinde örnek veriyle sınadım.

Örnek: üç kaynaklı günlük rapor, 22 iş gününde dört arıza

Aşağıdaki firma ve bütün rakamlar kurgudur; tutarlılığını bir betikle sınadım.

Bir metal parça üreticisinde planlama uzmanı her sabah 08.30’da günlük üretim ve sevkiyat raporunu masaüstü Excel’de açıyor. Rapor “dosyayı açarken yenile” ayarıyla üç kaynaktan veri çekiyor, SharePoint’e kaydediliyor ve altı yönetici onu tarayıcıda okuyor:

  • K1: ERP’nin her akşam ağ klasörüne yazdığı sevkiyat dökümü (CSV, günde 121–161 satır)
  • K2: üretim kayıtları, SQL Server görünümü (günde 301–339 satır)
  • K3: kalite teknisyeninin SharePoint’te elle tuttuğu ret listesi (Excel, günde 22–29 satır)

Raporun üstünde tek bir “son yenileme” hücresi var. Bu hücre, ayrı küçük bir sorgunun DateTime.LocalNow() sonucunu gösteriyor. 22 iş gününde dört arıza yaşanıyor:

ArızaYenileme ne dediYanlış veriyle geçen sabahNasıl fark edildi
4–6. sabah: ERP’nin dışa aktarma işi çalışmadı, K1 dosyası güncellenmediBaşarılı3Satış müdürü sevkiyatın üç gündür aynı olduğunu sordu
9. sabah: ERP güncellemesi K1’deki “Miktar” sütununu “Sevk Miktarı” yaptıHata: sütun bulunamadı1Planlama uzmanı hatayı 08.30’da gördü, öğlene kadar düzeltti
12–17. sabah: yeni teknisyen ret adedini “8 ad” gibi yazdı, sorgudaki eski “Hataları Kaldır” adımı bu satırları sildiBaşarılı6Kalite müdürü haftalık ret raporunu panoyla karşılaştırdı
19–20. sabah: K2’nin SQL parolasının süresi doldu, izindeki uzmana vekâlet eden kişi kimlik penceresini kapatıp dosyayı kaydettiKimlik sordu, iptal edildi2Uzman izinden dönünce

22 iş gününün 12’sinde rapor yanlış ya da eski veriyi güncelmiş gibi gösterdi. Bunun 9 sabahı, yenilemenin “başarılı” dediği iki arızadan geldi; hata veren ya da kimlik soran iki arıza toplam 3 sabah sürdü.

Sessiz arızalar makul de görünüyordu. 4–6. sabahlarda raporda görünen sevkiyat toplamı 18.726 adet, gerçeği 19.091 adet; 365 adetlik fark göze batmıyor. Üçüncü arızada altı sabahtaki 151 ret satırının 61’i (%40) silindi. Raporda ret toplamı 1.284 yerine 801 adet, fire oranı %1,28 yerine %0,80 göründü. Saat hücresi her sabah ilerlediği için rapor dört arızanın hiçbirinde “eski” görünmedi.

Bu firma için ilk iş yeni bir yazılım değil, her kaynak için ayrı durum satırı olan bir kontrol sayfası. Kurulumunu ve betikteki sonucunu izleme bölümünde anlatıyorum.

Excel’de otomatik yenileme seçenekleri ve sınırları

Masaüstü Excel’de yenilemeyi üç ayar ve bir komut belirler; hepsi dosyanın o bilgisayarda açık olmasını ister. Ayarlar Veri > Sorgular ve Bağlantılar bölmesinin Bağlantılar sekmesinde, sorguya sağ tıklayıp açılan Özellikler penceresinin Kullanım sekmesindedir. Bu sayfadaki bütün menü yolları ve adları sürüme ve dile göre değişebilir; ilk bölümde parantezde Microsoft’un İngilizce adlarını veriyorum (Microsoft Destek).

  • Dosyayı açarken verileri yenile (Refresh data when opening the file). Microsoft’a göre bağlantıları Güven Merkezi çubuğundan etkinleştirmeniz ya da dosyayı güvenilen bir konumdan açmanız gerekir. Dosyayı kim açarsa yenileme onun kimliğiyle çalışır; örnekteki dördüncü arıza buradan çıktı.
  • Yenileme sıklığı (Refresh every … minutes). Microsoft sayfası dosya kapalıyken ne olduğunu yazmıyor. Zamanlayıcıyı Excel’in kendisi çalıştırdığı için, dosya kapalıyken tetikleyecek bir şey kalmadığını düşünüyorum.
  • Arka plan yenilemesini etkinleştir (Enable background refresh). Sorgu çalışırken Excel’i kullanmaya devam edersiniz. Microsoft’a göre Veri Modeli’ne veri getiren bağlantı türleri arka planda çalıştırılamaz. VBA’daki Workbook.RefreshAll, arka plan özelliği açık nesneleri arka planda yeniler (Microsoft Learn). Bundan, makronun sonraki satıra geçip dosyayı yenileme bitmeden kaydedebileceğini çıkarıyorum; makrolu kurulumda arka plan yenilemesini kapatırım.
  • Tümünü Yenile (Ctrl+Alt+F5) ya da yalnız seçili sorgu (Alt+F5).

Power Query Düzenleyicisi’ndeki Önizlemeyi Yenile yalnız düzenleyicinin önbelleğini yeniler, çalışma sayfası değişmez.

Web için Excel’de ne yenilenir?

Web için Excel’de sorgular elle yenilenir; tarayıcıda zamanlanmış yenileme seçeneğini Microsoft’un sayfalarında bulamadım (Microsoft Destek). Tarayıcıda hangi kaynakların yenilendiğini ve Veri Modeli kısıtının panoda yarattığı çelişkiyi Excel dashboard rehberinde anlattım. Buraya tek bir ekleme: Microsoft’un desteklenen kaynak listesinde yerel disk ya da ağ klasörü yolu yok (Microsoft Destek). Bu yüzden örnekteki K1 gibi \\sunucu\... yolundaki bir CSV’nin tarayıcıdan yenilenemeyeceğini düşünüyorum; denemedim.

Dosya kapalıyken yenileme: iki yol ve bir yanılgı

Dosya kimsede açık değilken Microsoft’un belgelediği yenileme yolu Power BI’da zamanlanmış yenilemedir. İkinci yol Görev Zamanlayıcı ile makrodur; çalışır ama bence Microsoft’un önermediği kapsama girer. Yanılgı, Power Automate ile Office Scripts’in bu işi yaptığını sanmaktır.

Power Automate ve Office Scripts: çoğu veri yenilenmiyor

Microsoft’un sorun giderme sayfasına göre Office Scripts, Power Automate’te çalıştırıldığında verinin çoğunu yenileyemiyor. refreshAllDataConnections yalnız kaynak Power BI ise yeniliyor; diğer kaynaklarda hata vermeden başarılı dönüyor ve hiçbir şey yapmıyor (Microsoft Learn). Sayfa Power Query’yi adıyla anmıyor; Power Query bağlantılarının da “Power BI dışı kaynak” olarak bu kapsama girdiği benim çıkarımım. Akış geçmişinde “başarılı” görürsünüz, rapor dünkü hâliyle kalabilir.

Office Scripts’i Power Automate’te kullanmak için Microsoft 365 iş lisansı gerekiyor. Betik çalıştırma eylemi kullanıcı başına günde 1.600 çağrıyla ve 120 saniyelik zaman aşımıyla sınırlı (Microsoft Learn). Power Automate’in buradaki asıl işi, yenilenmiş dosyayı okuyup uyarı göndermek (aşağıda).

Power BI zamanlanmış yenileme ve ağ geçidi

Power BI yolunda Excel’in Veri Modeli’ni Power BI semantik modeli olarak yayımlarsınız ya da sorguları Power BI Desktop’ta yeniden kurarsınız. Yerel bir Excel dosyasını Power BI çalışma alanına yükleyip yenileme kurmak artık desteklenmiyor (Microsoft Learn). Microsoft’un yenileme sayfalarından okuduklarım (zamanlanmış yenileme, veri yenileme):

  • Lisans: ücretsiz kullanıcı yenilemeyi yalnız kendi “Çalışma alanım”da zamanlayabilir; içeriği ekiple paylaşmak Pro ya da Premium kullanıcı başı (PPU) lisansı ister (Microsoft Learn). Fiyatı burada yazmıyorum.
  • Sıklık: Pro’da günde en çok 8, PPU ile Premium ve Fabric kapasitesinde 48 zamanlanmış yenileme.
  • Ağ geçidi: ağ klasöründeki dosya ya da şirket içi SQL Server gibi kaynaklar için şirket içi veri ağ geçidi kurulu ve çalışır olmalı. Dosya yerel ya da şirket diskindeyse yenileme sırasında o bilgisayar açık kalmalı.
  • Başarısızlık: e-posta varsayılan olarak model sahibine gider, kiracınızdaki başka hesaplar ek alıcı yapılabilir. Dört ardışık başarısızlıkta ya da süresi dolmuş kimlik gibi yapılandırma gerektiren bir hatada zamanlama kapanır. İki ay boyunca modele bağlı hiçbir rapor açılmazsa zamanlama duraklar.

Power BI, SharePoint’teki Excel dosyanızı değil kendi modelini yeniler. Ekip raporu Power BI’da ya da o modele bağlanan bir Excel’de okumalı.

Görev Zamanlayıcı ve makro

Windows Görev Zamanlayıcı her sabah Excel’i açtırır, bir makro yenilemeyi çalıştırır, dosyayı kaydeder ve Excel’i kapatır. Makroyu raporun içine değil, raporu açan ayrı bir “tetikleyici” dosyaya koyarım; raporun içindeki açılış makrosu dosyayı elle açan herkeste de çalışır.

Microsoft gözetimsiz ve etkileşimsiz Office otomasyonunu önermiyor; Office bu ortamda kararsız davranabilir ya da kilitlenebilir, beklenmedik durumda iletişim kutusu açıp yanıt bekler ve bir kullanıcı kimliğine ihtiyaç duyar (Microsoft Learn). Oturum açıkken çalışan ama başında kimsenin olmadığı bir görev bence bu kapsama girer. Bu yolu yalnız geçici çözüm olarak, makro her çalışmayı bir günlük satırına yazıyorsa kullanırım. Makro örneği vermiyorum, çünkü gözetimsiz çalışırken kimlik ya da gizlilik penceresine nasıl tepki verdiğini sınamadım ve sınanmamış bir iskelet sizi yanıltır.

Power Automate’in masaüstü akışları da Excel’i açıp bir makro çalıştırabiliyor (Microsoft Learn). Power Query’yi doğrudan yenileyen bir eylem bulamadım; bu da aynı “Excel’i açan makro” yolunun bir türü.

Hangi yol ne zaman?

DurumYolDikkat
Tek rapor, sahibi her sabah açıyorAçılışta yenile + kontrol sayfasıSahibi izindeyse rapor yenilenmez
Kaynaklar SharePoint ya da SQL’de, ekip tarayıcıda okuyorWeb’de elle yenileme + kontrol sayfasıVeri Modeli ve ağ geçidi kaynakları yenilenmez
Dosya kapalıyken her gün belirli saattePower BI zamanlanmış yenilemeExcel dosyası değil model yenilenir; ağ geçidi bilgisayarı açık kalmalı
Power BI yok, geçici çözüm gerekiyorGörev Zamanlayıcı + tetikleyici dosyaMicrosoft önermiyor; açık kalan bir pencere işi durdurur

Sık görülen yenileme hataları ve sorguyu sağlamlaştırma

Power Query hataları iki türdür: adım düzeyindeki hata sorgunun yüklenmesini durdurur, hücre düzeyindeki hata sorguyu yükler ve hatalı hücreyi Error diye işaretler. İkincisi daha tehlikelidir, çünkü yenileme başarılı görünür. Hata mesajının tamamını Power Query Düzenleyicisi’nde görürsünüz: hata veren adım sarı bir bölmede neden, mesaj ve ayrıntı olarak çıkar, Ayrıntıları göster ile açılır (Microsoft Learn). Süren yenilemenin durumunu durum çubuğundaki “Veri alınıyor” iletisine çift tıklayarak izlersiniz. Sorgular ve Bağlantılar bölmesinin hatalı sorguyu nasıl işaretlediğini Microsoft sayfasında bulamadım; hangi sorgunun düştüğünü bulmak için orada sorguları tek tek yenilerim.

HataNasıl görünürSağlamlaştırma
Sütun bulunamadıThe column 'Miktar' of the table wasn't found; sorgu yüklenmezYalnız gereken sütunları seçin, tür adımını onlarla sınırlayın
Tablo ya da sayfa bulunamadıThe key didn't match any rows in the table; tablo adı değişmiş ya da hesabın okuma yetkisi yok (Microsoft Learn)Tablo adını kaynağın sahibiyle sabitleyin, adı parametrede tutun
Kaynak dosya yolu ya da adı değiştiDataSource.NotFoundYolu tek parametrede tutun, klasörden en yeni dosyayı alın
Kimlik bilgisinin süresi dolduKimlik penceresi ya da erişim hatasıSahibini ve değişim tarihini yazın, okuma yetkili ayrı hesap kullanın
Gizlilik düzeyi (Formula.Firewall)references other queries or steps ya da privacy levels which cannot be used togetherKaynağa erişen adımla birleştiren adımı ayırın
Veri türü hatasıHücrede Error, sorgu yine yüklenirHatalı satırları silmeyin, ayrı tabloya alıp sayısını izleyin
Zaman aşımıVarsayılan süre aşılınca adım düzeyi hataKaynakta tarih aralığıyla süzün, gerekiyorsa süreyi açıkça yazın

Örnekteki ret listesi sorgusu da tabloyu adıyla (Item = "Ret") seçiyor; teknisyen tabloyu yeniden adlandırırsa ikinci satırdaki hata çıkar.

Sütun adına bağlı adımları azaltmak

Power Query’nin dosyayı ilk aldığında eklediği “Değiştirilen Tür” adımı, kaynaktaki bütün sütunları adıyla sayar. Raporun kullanmadığı bir sütunun adı değişse bile sorgu durur. İlk adımda yalnız raporun kullandığı sütunları seçer, türü yalnız onlara veririm:

let
    Kaynak  = Csv.Document(File.Contents(SevkiyatDosyasi), [Delimiter = ";", Encoding = 65001]),
    Baslik  = Table.PromoteHeaders(Kaynak, [PromoteAllScalars = true]),
    Secilen = Table.SelectColumns(Baslik, {"Sevk Tarihi", "Ürün Kodu", "Miktar"}),
    Tur     = Table.TransformColumnTypes(Secilen,
                {{"Sevk Tarihi", type date}, {"Miktar", Int64.Type}}, "tr-TR")
in
    Tur

Table.SelectColumns’a üçüncü değer olarak MissingField.UseNull verirseniz eksik sütun hata yerine boş bir sütun olarak gelir (Microsoft Learn). Bunu yalnız boş değer sayısını izlediğim kaynakta kullanırım; aksi hâlde 9. sabahın hemen görülen hatasını kimsenin fark etmeyeceği boş bir sütuna çevirirsiniz. Bilinen bir yeniden adlandırma için Table.RenameColumns’a {"Sevk Miktarı", "Miktar"} eşlemesini MissingField.Ignore ile verirsiniz: yeni ad gelirse eski adına çevrilir, gelmezse adım hata vermeden geçer.

Dosya yolunu tek yerde tutmak ve verinin tarihini almak

Yol ya da dosya adı değiştiğinde onarım tek yerde olsun diye klasör yolunu Giriş > Parametreleri Yönet ile bir parametreye alırım. Klasördeki en yeni CSV’yi seçip değiştirilme tarihini satırlara eklemek, örnekteki ilk arızayı yakalayan kontrolün hammaddesidir:

let
    Dosyalar = Folder.Files(SevkiyatKlasoru),
    Csvler   = Table.SelectRows(Dosyalar, each [Extension] = ".csv"),
    EnYeni   = Table.First(Table.Sort(Csvler, {{"Date modified", Order.Descending}})),
    Icerik   = Csv.Document(EnYeni[Content], [Delimiter = ";", Encoding = 65001]),
    Tablo    = Table.PromoteHeaders(Icerik, [PromoteAllScalars = true]),
    Damgali  = Table.AddColumn(Tablo, "Dosya Tarihi", each EnYeni[#"Date modified"], type datetime)
in
    Damgali

Dosya tarihi dosyanın ne zaman yazıldığını söyler, içindeki verinin hangi güne ait olduğunu söylemez. Kontrol sayfasında veri tarihi olarak en büyük Sevk Tarihi’ni kullanırım.

try … otherwise ile hatalı satırları ayrı tabloya almak

Örnekteki üçüncü arızanın sebebi, aylar önce birinin hataları susturmak için eklediği “Hataları Kaldır” adımıydı. Bu adım hatalı satırı iz bırakmadan siler. Yerine dönüşümü try … otherwise ile yapar, metin olarak girilen değeri görünür bırakırım (Microsoft Learn):

// Ret_Ham (yüklenmez, iki sorgu buna başvurur)
let
    Kaynak = Excel.Workbook(Web.Contents(RetDosyasi), null, true){[Item = "Ret", Kind = "Table"]}[Data],
    Sayi   = Table.AddColumn(Kaynak, "Ret Sayı",
               each try Number.From([Ret Adedi], "tr-TR") otherwise null, type nullable number)
in
    Sayi

// Ret_Temiz:   Table.SelectRows(Ret_Ham, each [Ret Sayı] <> null)
// Ret_Hatalar: Table.SelectRows(Ret_Ham, each [Ret Sayı] = null and [Ret Adedi] <> null)

Ret_Hatalar ayrı bir sayfaya yüklenir. Kalite teknisyeni “8 ad” yazdığı satırı orada olduğu gibi görür, düzeltince satır listeden düşer.

Kimlik bilgisi, gizlilik düzeyi ve zaman aşımı

Kimlik bilgisi. Excel’de Veri > Veri Al > Veri Kaynağı Ayarları’nda kaynağı seçip İzinleri Düzenle > Kimlik Bilgileri > Düzenle ile güncellenir; İzinleri Temizle kayıtlı kimliği siler (Microsoft Learn). Kimliğin sahibini ve parola değişim tarihini kontrol sayfasının altına yazarım.

Gizlilik düzeyi. Formula.Firewall hatası iki mesajla gelir: bir adımın hem başka bir sorguya başvurup hem de doğrudan bir kaynağa eriştiğini ya da birlikte kullanılamayacak gizlilik düzeylerini söyler. Microsoft’a göre bu güvenlik duvarı verinin kaynaklar arasında istemeden sızmasını önler; önerilen çözüm iki işi tek sorguda toplamak ya da kaynağa erişen adımı birleştiren adımdan ayırmaktır (Microsoft Learn). Microsoft’un güvenlik rehberi “gizlilik düzeylerini yoksay” seçeneğini açmamayı öneriyor (Microsoft Learn). Power BI Desktop, Temmuz 2026 sürümüyle bu kısıtı uyumlu gizlilik düzeyleri için gevşetti (Microsoft Learn); aynı değişikliği Excel için belgede bulamadım.

Zaman aşımı. Web.Contents için varsayılan süre 100 saniye (Microsoft Learn), Sql.Database için sunucu tarafı komut süresi on dakika (Microsoft Learn). Önce sorguyu kaynakta tarih aralığıyla süzerim. Gerekiyorsa süreyi açıkça yazarım: Sql.Database("sunucu", "uretim", [CommandTimeout = #duration(0, 0, 20, 0)]).

Yenilemeyi izlemek: son başarılı saat, veri tarihi, satır sayısı

Yenilemenin başarılı olması verinin güncel olduğunu göstermez. Bu yüzden her kaynak için dört şeyi ayrı izlerim: son başarılı yenileme saati, verinin ait olduğu tarih, yüklenen ve hatalı satır sayısı, beklenen aralık.

Excel dashboard rehberindeki “son veri çekimi” satırı, tek sorgudan beslenen bir panoda yeter. Birden çok kaynakta yetmez: örnekteki tek saat hücresi ayrı bir sorgudan geliyordu, o sorgu her sabah başarıyla çalıştı ve dört arızanın hiçbirini göstermedi. Saat damgası verinin kendisine başvuran sorguda üretilmeli. Microsoft’a göre adım düzeyi hata sorgunun yüklenmesini durdurur; benim okumam, sayfada önceki yenilemenin satırlarının ve saatinin kalacağı yönünde. Saat de o kaynakla birlikte eskide kalır. Her kaynak için tek satırlık bir kontrol sorgusu kurarım:

// Sevkiyat_Kontrol (tek satır, kendi tablosuna yüklenir)
let
    Veri  = Sevkiyat,
    Satir = #table(
              {"Kaynak", "Son Yenileme", "Veri Tarihi", "Satır", "Toplam"},
              {{"K1 ERP sevkiyat", DateTime.LocalNow(), List.Max(Veri[Sevk Tarihi]),
                Table.RowCount(Veri), List.Sum(Veri[Miktar])}})
in
    Satir

K2 ve K3’ün kontrol sorguları aynı biçimde kurulur. K3’te Satır ve Toplam Ret_Temiz’i sayar, ayrıca bir “Hata Satırı” sütunu eklenir: Table.RowCount(Ret_Hatalar). Üç kaynağı tek kontrol sorgusunda birleştirmem: biri düşünce birleşik sorgu bütünüyle düşer ve hangi kaynağın bozulduğunu söyleyemez.

Pano sayfasında her kaynak bir satırdır (2–4. satırlar). A kaynak adı, B son yenileme, C veri tarihi, D satır sayısı, I toplamdır; bunlar kontrol tablolarından gelir. E hata satırı sayısıdır: K3’te kontrol sorgusunun Hata Satırı sütunu, hata tablosu olmayan K1 ve K2’de 0. F ve G beklenen alt ve üst sınırdır, H durumu verir. F ve G’yi elle girerim: geçen ayın günlük ortalamasının %70’i ve %130’u, başlangıç önerim. Power Query önceki yenilemeleri tutmadığı için hareketli ortalama kendiliğinden oluşmaz. H2’deki formül:

=EĞER(B2<BUGÜN();"Yenilenmedi";EĞER(E2>0;"Hata satırı var";EĞER(C2<İŞGÜNÜ(BUGÜN();-1);"Veri eski";EĞER(VEYA(D2<F2;D2>G2);"Aralık dışı";"Tamam"))))

İngilizce Excel’de IF, TODAY, WORKDAY, OR ve virgül kullanılır. Resmî tatilleri İŞGÜNÜ’nün üçüncü bağımsız değişkenine bir tatil listesiyle verin.

Formülün mantığını betikte aynı ayın verisiyle sınadım. 4. sabah K1 “Veri eski”, 9. sabah K1 “Yenilenmedi”, 12. sabah K3 “Hata satırı var”, 19. sabah K2 “Yenilenmedi” verdi. Her arıza sürdüğü bütün sabahlarda işaretli kaldı, arızasız on sabahta yanlış alarm çıkmadı. 9. ve 19. sabahtaki “Yenilenmedi” sonucu, adım hatasında sayfada eski satırların kaldığı çıkarımına dayanıyor; kendi dosyanızda bir kez bilerek hata üretip deneyin.

Aralık kontrolü tek başına yetmez. “Hataları Kaldır” adımı dursaydı ve yalnız satır sayısına bakılsaydı, K3’ün bandı 17,5–32,5 satır olurdu (geçen ayın ortalaması 25). Altı sabahta yüklenen satır sayısı 11, 18, 16, 12, 20 ve 13. Dördü bandın altında kalır, 13. ve 16. sabahlar “Tamam” görünür. Hata tablosu altısını da yakalar.

Önceki sabahla birebir aynı veri de uyarıdır, ama dünün değerini bir yere yazmanız gerekir. Power Query dünü tutmadığı için her akşam Pano’nun D ve I değerlerini elle ya da küçük bir makroyla “Günlük” sayfasının B ve C sütunlarına değer olarak yapıştırırsınız (aynı satır sırasıyla). Ertesi sabah J2’deki =VE(D2=Günlük!B2;I2=Günlük!C2) DOĞRU dönerse veri dünle aynıdır. Betikte bu kural K1’de 4–6. ve 9., K2’de 19–20. sabahları yakaladı, arızasız günlerde tetiklenmedi. Bu günlüğü elle tutmak zorunda kalmak, aşağıdaki “geçmiş gerekiyor” işaretinin ilk belirtisidir.

Uyarı kime, ne zaman gider?

Excel kapalıyken kimseye haber veremez. Uyarıyı ya Power BI’ın başarısızlık e-postası ya da Pano tablosunu okuyan bir Power Automate akışı gönderir.

Akış, Excel Online (Business) bağlayıcısının “List rows present in a table” eylemiyle Pano tablosunu okur. Durum “Tamam” değilse ya da Son Yenileme bugünden eskiyse sahibine ve yedeğine e-posta gönderir. Akışı 08.30’daki yenilemeden sonraya, 09.00’a kurarım; o sabah kimse dosyayı açmadıysa da uyarı gider. Bağlayıcının sınırları: en çok 25 MB dosya, eylem varsayılan olarak 256 satır döndürür, okumak için bile dosyaya yazma izni gerekir (Microsoft Learn). Power Automate saatleri UTC ile tutar, DateTime.LocalNow() ise bilgisayarın yerel saatidir (Microsoft Learn); “bugünden eski” karşılaştırmasını akışta yerel saate çevirerek yapın.

Kalıcı hatayı (sütun, kimlik, gizlilik) hemen, zaman aşımı gibi geçici hatayı ikinci deneme de başarısız olursa bildiririm.

Excel’den web uygulamasına geçiş nerede başlar?

Aynı izleme her gün birden çok kaynakla ve birden çok kişiyle tekrarlanıyorsa Excel’in sınırına gelmişsiniz demektir. Baktığım işaretler:

  1. Yenileme bir kişiye bağlı. O kişi izne çıkınca rapor duruyor; örnekteki dördüncü arıza.
  2. Geçmiş gerekiyor. “Dün kaç satır geldi, geçen hafta hangi gün eksikti?” sorusunun Power Query’de karşılığı yok; bandı ve günlüğü elle tutmamızın sebebi bu.
  3. Hatalı satırın sahibi başka biri. Ret listesini düzeltecek kişi kalite teknisyeni. Satırı o görmeli, düzeltince kuyruktan düşmeli.
  4. İz kaydı isteniyor. Kim yeniden denedi, kim uyarıyı gördü, kim satırı düzeltti.

Bir web uygulamasında zamanlanmış çekim, çekim kaydı, sahibine giden hata kuyruğu ve rollere göre ekranlar ihtiyaca göre kurulabilir; hangilerinin ilk sürüme gireceği ilk adımda yazılı belirlenir. İş kuralı veri girilirken uygulanacak biçimde kurulabilir: ret adedine sayı dışında bir şey yazılamazsa üçüncü arıza kaynağında önlenir.

Tek rapor, tek sahip ve SharePoint ya da SQL’de duran kaynaklar varsa bu uygulamayı yaptırmanızı önermem; kontrol sayfası ve akış yeter. Otomasyon işlerinde en sık gördüğüm hata, ilk otomasyonu en karmaşık süreçten seçmek. Uygulamaya geçilecekse ilk sürümü tek kaynakla sınırlarım: örnekte elle girilen ret listesi.

Uygulama şirketiniz adına açılabilen bir sunucuda (VPS) çalışır; veri sizindir, istediğiniz an Excel ya da CSV olarak alırsınız. Küçük ve orta ölçekli ekipte kullanıcı başına lisans yok, maliyet sunucu ve bakımdır. Kaynak kod, çalıştırma talimatı, bağımlılık ve bilinen sınırlar listesiyle sizin deponuzda durur. Genel yapı: ekibinize özel web uygulamaları.

Raporunuz için ilk adım

Raporun kaynaklarını, her kaynağın nerede durduğunu ve son ay fark ettiğiniz arızaları iletişim sayfasından gönderin. İlk adımın çıktısında hangi arızanın kontrol sayfasıyla, hangisinin uygulamayla çözüleceğini yazılı veririm.

Sıkça Sorulan Sorular

Bağlantı parolasını Excel dosyasına kaydetmek güvenli mi?

Microsoft, bağlantı özelliklerinde kaydedilen parolaların şifrelenmediğini ve bu yüzden önerilmediğini yazıyor (Microsoft Destek). Power Query’nin Veri Kaynağı Ayarları’nda tuttuğu kimlik bilgileri ise veri modelinden ayrı ve şifreli saklanıyor (Microsoft Learn). Paylaşılan raporda kimliğin dosyaya değil, her kullanıcının kendi Veri Kaynağı Ayarları’na girilmesini isterim. Veritabanında rapor için yalnız okuma izni olan ayrı bir hesap açtırırım.

Bazı sorguları Tümünü Yenile’nin dışında tutabilir miyim?

Özellikler > Kullanım’daki “Tümünü Yenile seçeneğinde Bu bağlantıyı yenile” (Refresh this connection on Refresh All) kutusunu boşaltabilirsiniz. Microsoft bu kutunun etkisini yalnız Power Pivot penceresi için anlatıyor: orada Tümünü Yenile böyle bir bağlantı için “iptal edildi” der; Excel isteği göndermemiştir, büyük olasılıkla bağlantıda yenileme kapalı olduğu için. Çalışma sayfasındaki bir Power Query sorgusunda aynı mesajı görüp görmeyeceğinizi denemedim. Ağır bir geçmiş veri sorgusunu ayda bir elle yenilemek için bu kutuyu kullanırım; kontrol sayfasında o kaynağın satırına “elle” notu düşerim, yoksa her sabah “Yenilenmedi” görünür.

Mac’te Excel kullanıyorum; bu sayfadakiler geçerli mi?

Kısmen. Microsoft’a göre Power Query, Microsoft 365’in Mac sürümünde var, Mac için Excel 2016 ve 2019’da yok. Mac’te yenilenebilen kaynaklar arasında metin, CSV, XLSX, JSON ve XML dosyaları, SQL Server, çalışma kitabındaki tablolar, OData ve SharePoint sayılıyor (Microsoft Destek). Gizlilik düzeyleri Mac’te henüz desteklenmiyor (Microsoft Learn). Office Scripts Mac için Excel’de çalışıyor.

Başa dön ↑
NE İSTEYEBİLİRSİNİZ

Nasıl çalışıyorum?
Çalışma saati paketleri

WhatsApp’tan ya da telefonda işinizden ve ihtiyacınızdan bahsedin; 5 ile 40 saat arasında bir çalışma paketinde anlaşalım, ben gerekenleri yapmaya başlayayım. Aldığınız şey bir takvim aralığı değil, doğrudan sizin işinize harcanacak net mesai. 40 saati üç gün aralıksız çalışarak da kullanabiliriz, bilerek zamana yayıp bir yılda da bitirebiliriz — işin gerektirdiği neyse o. İşin ne kadar süreceğini tahmin etmeye değil, işi yapmaya vakit harcarım; harcadığım her saatin işinizde kalıcı bir karşılığı olur. Faydalı olduğunu düşündüğünüz sürece bu şekilde devam ederiz.

ÇALIŞMA BLOKLARI

Neden aylık değil?
40 saat 1 hafta mı oluyor?

Aylık sabit ücrette iki taraf da yanlış yere bakar: siz sabit gidere, karşı taraf kaç tane daha böyle sözleşme bağlayabileceğine. Saat üzerinden çalışınca ikimizin de baktığı yer aynı olur — yapılan işin gerçek değeri. "Toplamda ne kadar tutar?" sorusunun peşinen net bir cevabı olmaması bu modelin doğal maliyeti, farkındayım. Ama sonuç üretmeyen bir yapıya aylarca sabit ücret ödemek yerine yalnızca işinize ayrılan nitelikli zamanı ödersiniz, o zamanın nereye gittiğini de baştan sona görürsünüz. Müşterilerimin benimle tekrar tekrar çalışmasının sebebi bu.

5saat10.000₺ + KDVsaat başı 2.000₺Bu bloğu seç
10saat15.000₺ + KDVsaat başı 1.500₺Bu bloğu seç
20saat24.000₺ + KDVsaat başı 1.200₺Bu bloğu seç
40saat40.000₺ + KDVsaat başı 1.000₺Bu bloğu seç