Özellik ikonu

Power Query

İndirme izni yok

Genel Bakış

Power Query (Power Query), Excel'de farklı kaynaklardan veri almanızı, bu veriyi adım adım temizleyip dönüştürmenizi ve sonucu çalışma sayfasına ya da veri modeline yüklemenizi sağlayan veri hazırlama aracıdır. Yaptığınız her işlem bir adım olarak kaydedilir; kaynak veri değiştiğinde tek tıkla yenileyerek aynı işlemleri yeniden uygularsınız. Bu sayfada Power Query'nin nerede bulunduğunu, Düzenleyici'yi, kaynakları, yükleme seçeneklerini, başlıca dönüşümleri, M dilini, sürüm farklarını, performans ipuçlarını ve sık karşılaşılan sorunların çözümlerini örneklerle öğreneceksiniz.

Nerede bulunur​

Excel 2016 ve sonrasında Power Query, Veri (Data) sekmesindeki Veri Al ve Dönüştür (Get & Transform Data) grubundadır. Microsoft 365 ve Excel 2021'de grupta Veri Al (Get Data), Metin/CSV'den (From Text/CSV), Web'den (From Web), Tablodan/Aralıktan (From Table/Range) ve Son Kaynaklar (Recent Sources) düğmeleri yer alır. Excel 2016'da aynı komutlar Yeni Sorgu (New Query) düğmesinin altındadır. Excel 2010 ve 2013'te Power Query ayrı bir eklenti olarak kurulur ve kendi POWER QUERY sekmesini kullanır.
  • Düzenleyiciyi açma: Bir sorgu oluşturduğunuzda ya da Sorgular ve Bağlantılar (Queries & Connections) bölmesinde sorguya çift tıkladığınızda Power Query Düzenleyicisi (Power Query Editor) penceresi açılır. Boş bir Düzenleyici için Veri Al menüsündeki Power Query Düzenleyicisi komutunu kullanabilirsiniz.
  • Sorgular ve Bağlantılar bölmesi: Veri > Sorgular ve Bağlantılar ile açılır. Sorguya sağ tıklayınca Düzenle, Sil, Yinele (Duplicate), Başvuru (Reference), Birleştir, Ekle, Yükle ve Yenile komutları görünür.
  • Sorgu sekmesi: Sorgu sonucunun yüklendiği tablonun içinde bir hücre seçtiğinizde şeritte Sorgu (Query) bağlamsal sekmesi belirir; buradan Düzenle, Yenile ve Özellikler komutlarına ulaşırsınız.
  • Yenileme kısayolları: Alt+F5 seçili sorguyu, Ctrl+Alt+F5 ise Veri > Tümünü Yenile (Refresh All) ile bütün sorguları ve bağlantıları yeniler.
  • Tablo oluşturma kısayolu: Aralığı sorguya hazırlamak için Ctrl+T ile tablo oluşturun.
  • Mac: Microsoft 365 Mac sürümlerinde Veri sekmesinde Veri Al (Power Query) düğmesi bulunur; yetenekler Windows sürümünden daha sınırlıdır.

Nasıl kullanılır​

En yaygın akış, aynı çalışma kitabındaki bir tabloyu temizleyip yeni bir tabloya yüklemektir. Aynı adımlar dosya, klasör, web ya da veritabanı kaynaklarında da geçerlidir; yalnızca ilk adım (kaynağın seçilmesi) değişir.
  • Verinizin içinde bir hücre seçin ve Ctrl+T ile tablo oluşturun. Tablo Tasarımı (Table Design) sekmesinden tabloya anlamlı bir ad verin.
  • Veri > Tablodan/Aralıktan (Data > From Table/Range) komutunu seçin. Power Query Düzenleyicisi açılır ve ilk adım olan Kaynak (Source) otomatik eklenir.
  • Sütun başlığındaki simgeden veri türünü doğrulayın. Excel çoğu zaman Değiştirilen Tür (Changed Type) adımını kendisi ekler.
  • Giriş, Dönüştür ve Sütun Ekle sekmelerinden gerekli işlemleri uygulayın: filtre, sıralama, sütun silme, bölme, gruplama, hesaplanan sütun gibi.
  • Sağdaki Uygulanan Adımlar (Applied Steps) listesini kontrol edin. Adımın üzerine tıklayarak o andaki sonucu önizleyebilirsiniz.
  • Giriş > Kapat ve Yükle (Close & Load) ile sonucu yeni sayfaya tablo olarak yükleyin. Başka bir hedef için Kapat ve Şuraya Yükle (Close & Load To) komutunu kullanın.
  • Kaynak veri değiştiğinde sonuç tablosuna sağ tıklayıp Yenile (Refresh) deyin ya da Veri > Tümünü Yenile komutunu kullanın.
Düzenleyicinin arka planda yazdığı kod M dilindedir. Basit bir sorgu şuna benzer:
Kod 5 satır
let
    Kaynak = Excel.CurrentWorkbook(){[Name="Satislar"]}[Content],
    TurDegisti = Table.TransformColumnTypes(Kaynak,{{"Adet", Int64.Type}})
in
    TurDegisti

Power Query Düzenleyicisi ve Uygulanan Adımlar​

Düzenleyici penceresi birkaç bölgeden oluşur ve her bölgenin görevi farklıdır.
  • Şerit: Dosya, Giriş (Home), Dönüştür (Transform), Sütun Ekle (Add Column), Görünüm (View) ve Yardım sekmeleri bulunur. Giriş sekmesinde Kapat ve Yükle, Gruplandır, Sorguları Birleştir/Ekle, Parametreleri Yönet ve Gelişmiş Düzenleyici komutları yer alır.
  • Sorgular bölmesi: Soldaki bölme çalışma kitabındaki tüm sorguları listeler. Sorguları gruplara ayırarak düzenli tutabilirsiniz.
  • Veri önizleme: Ortadaki tabloda seçili adımın sonucu görünür. Önizleme tüm veriyi değil, kısmi bir örneği gösterebilir; asıl sonuç yüklemede oluşur.
  • Sorgu Ayarları ve Uygulanan Adımlar: Sağdaki bölmede sorgunun adı ve adımlar bulunur. Adımın solundaki X adımı siler, dişli simgesi adımın penceresini yeniden açar, sürükleyerek sırayı değiştirebilirsiniz. Sağ tıklayarak ad değiştirebilir, adıma açıklama ekleyebilir ya da Sonuna Kadar Sil diyebilirsiniz.
  • Formül çubuğu: Görünüm > Formül Çubuğu (View > Formula Bar) ile açılır ve seçili adımın M kodunu gösterir.
  • Sütun kalitesi, dağılımı ve profili: Görünüm sekmesindeki bu seçenekler boş, hatalı ve benzersiz değer sayılarını gösterir. Varsayılan profil ilk 1000 satıra dayanır; alt durum çubuğundan tüm veri kümesine geçebilirsiniz.
Adımlar yukarıdan aşağıya sırayla çalışır; bir adım önceki adımın çıktısını girdi olarak alır. Araya adım eklerken ya da bir adımı silerken sonraki adımların bozulabileceğini unutmayın.

Veri kaynakları ve yükleme seçenekleri​

Veri Al menüsü kaynakları gruplar halinde sunar: Dosyadan (Excel Çalışma Kitabı, Metin/CSV, XML, JSON, PDF, Klasör), Veritabanından (SQL Server, Access, Oracle ve ODBC/OLE DB bağlantıları), Online Hizmetlerden (SharePoint listesi, Dynamics 365 vb.), Diğer Kaynaklardan (Web, OData, Boş Sorgu) ve mevcut sorgulardan. Kullanılabilir bağlayıcılar sürüme ve aboneliğe göre değişir.
Bu sayfadaki örnekler aynı çalışma kitabındaki tabloları kaynak olarak kullanır; bu durumda M kodu Excel.CurrentWorkbook işleviyle başlar. Dosya, web ya da veritabanı kaynağında ise ilk adım kaynağa özgü işlevdir (örneğin Excel.Workbook, Csv.Document, Web.Contents, Sql.Database) ve ilk bağlantıda kimlik bilgisi istenebilir.
  • Tablo (Table): Sonucu çalışma sayfasına tablo olarak yükler. Raporlama ve formül başvuruları için en yaygın seçimdir.
  • Özet Tablo Raporu / Özet Grafik: Sonucu doğrudan özet tablo ya da grafiğe bağlar.
  • Yalnızca Bağlantı Oluştur (Only Create Connection): Veri sayfaya yazılmaz; sorgu başka sorgular için ara adım olarak kullanılır.
  • Bu Veriyi Veri Modeline Ekle (Add this data to the Data Model): Milyonlarca satırı sayfa sınırına takılmadan tutar ve Power Pivot ile ilişkiler kurmaya olanak verir.
  • Yeni ya da Var Olan Çalışma Sayfası: Tablonun nereye yazılacağını belirler.
Yenileme davranışı Sorgu Özellikleri ya da Bağlantı Özellikleri (Connection Properties) penceresinden ayarlanır: arka planda yenileme, her n dakikada bir yenileme, dosya açılırken yenileme ve Tümünü Yenile'ye dahil etme. Kimlik bilgileri ve gizlilik düzeyleri Veri Al > Veri Kaynağı Ayarları (Data Source Settings) penceresinde yönetilir.

Başlıca dönüşümler​

Aşağıdaki işlemler Düzenleyici'de en sık kullanılanlardır. Her biri tek tıkla bir M işlevine karşılık gelir.
  • Filtreleme ve sıralama: Sütun başlığındaki açılır oktan yapılır; Table.SelectRows ve Table.Sort işlevlerini üretir.
  • Sütun seçme, silme, yeniden adlandırma: Giriş > Sütunları Seç ve Sütunları Kaldır ile yapılır; başlığa çift tıklayarak ad değiştirirsiniz.
  • Sütunu Böl (Split Column): Dönüştür > Sütunu Böl ile sınırlayıcıya, karakter sayısına, büyük harfe ya da rakama göre bölünür.
  • Biçim: Dönüştür > Biçim altında Küçük Harf, BÜYÜK HARF, Her Sözcüğün İlk Harfini Büyük Yap, Kırp (Trim), Temizle (Clean) ve Ön Ek Ekle komutları vardır.
  • Doldur: Dönüştür > Doldur > Aşağı (Fill Down) birleştirilmiş görünümlü, boş bırakılmış hücreleri üstteki değerle doldurur.
  • Değerleri Değiştir ve Hataları Değiştir/Kaldır: Belirli değerleri, boşları ya da hata hücrelerini toplu düzeltir.
  • Gruplandır (Group By): Toplam, ortalama, sayı, en küçük ve en büyük gibi özetleri satır grupları için üretir.
  • Pivot Sütunu ve Sütunların Pivotunu Kaldır: Aylar gibi yatay sütunları satırlara çevirmek için Diğer Sütunların Pivotunu Kaldır (Unpivot Other Columns) en güvenli seçenektir; sonradan eklenen yeni sütunlar da otomatik dahil olur.
  • Özel Sütun, Koşullu Sütun, Örneklerden Sütun, Dizin Sütunu: Sütun Ekle sekmesindeki bu komutlar yeni hesaplanan sütunlar üretir.
  • Sorguları Birleştir (Merge Queries): İki tabloyu ortak sütunla eşleştirir. Birleştirme türleri: Sol Dış (Left Outer), Sağ Dış (Right Outer), Tam Dış (Full Outer), İç (Inner), Sol Anti (Left Anti) ve Sağ Anti (Right Anti).
  • Sorguları Ekle (Append Queries): Aynı yapıdaki tabloları alt alta ekler; sütunlar ada göre eşleşir.
  • Veri türü: Metin, Tam Sayı, Ondalık Sayı, Sabit Ondalık Sayı, Yüzde, Tarih/Saat, Tarih, Saat, Tarih/Saat/Saat Dilimi, Süre, Doğru/Yanlış ve İkili türleri bulunur. Yerel Ayarı Kullanarak (Using Locale) seçeneği, metinden gelen tarih ve sayıların hangi bölgesel kurala göre okunacağını belirler.

M dili ve ileri teknikler​

Power Query'nin dili M, let ve in yapısından oluşur: let bölümünde adımlar sırayla tanımlanır, in bölümünde sonuç olarak döndürülecek adım yazılır. M büyük/küçük harfe duyarlıdır; Table.SelectRows doğru, table.selectrows hatalıdır. Kodu görmek ve düzenlemek için Giriş > Gelişmiş Düzenleyici (Advanced Editor) komutunu kullanın.
  • each ve alt çizgi: each, tek parametreli işlev kısayoludur; satır üzerinde çalışan işlevlerde [Sütun Adı] ile geçerli satırdaki değere ulaşırsınız.
  • Hata yakalama: try ... otherwise ile hatalı hücreleri kodla yönetebilirsiniz.
  • Yineleme ve başvuru: Sorguya sağ tıklayıp Yinele dediğinizde sorgunun bağımsız kopyası oluşur; Başvuru (Reference) dediğinizde yeni sorgu mevcut sorgunun çıktısından başlar. Ortak temizliği bir kez yapıp üzerine farklı özetler kurmak için başvuru idealdir.
  • Parametreler: Giriş > Parametreleri Yönet ile ya da sayfadaki bir hücreyi kaynak alarak dosya yolu, tarih sınırı gibi değerleri koddan ayırırsınız.
  • Klasörden birleştirme: Veri Al > Dosyadan > Klasörden ile aynı yapıdaki yüzlerce dosyayı tek tabloda toplayabilirsiniz; yeni dosya klasöre eklenince yenilemede otomatik dahil olur.
  • Sorgu katlama (query folding): Veritabanı kaynaklarında bazı adımlar SQL'e çevrilip sunucuda çalışır. Adıma sağ tıklayınca Yerel Sorguyu Göster seçeneği etkinse adım katlanıyor demektir.
Hatalı sayı dönüşümünü yönetmek için kullanılabilecek örnek kod:
Kod
Table.TransformColumns(Kaynak, {{"Tutar", each try Number.From(_) otherwise null, type nullable number}})
Sayfadaki bir hücreyi parametre olarak okumak için örnek kod:
Kod 5 satır
let
    Parametre = Excel.CurrentWorkbook(){[Name="Ayarlar"]}[Content],
    SinirTarih = Parametre{0}[BaslangicTarihi]
in
    SinirTarih

Sınırlar ve sürüm farkları​

Power Query'nin yetenekleri sürüme göre değişir.
  • Excel 2010 ve 2013: Ayrı eklenti olarak yüklenir; arayüz ve bağlayıcılar yeni sürümlerden geridir.
  • Excel 2016: Özellik yerleşiktir ve Yeni Sorgu menüsünden kullanılır; bağlayıcı çeşitliliği 2019 ve sonrasına göre daha azdır.
  • Excel 2019 ve 2021: Veri Al menüsü ve güncel Düzenleyici bulunur; bazı yeni bağlayıcılar yalnızca Microsoft 365'te gelir.
  • Microsoft 365: En yeni bağlayıcılar, Düzenleyici iyileştirmeleri ve yeni dönüştürme işlevleri önce burada yayımlanır.
  • Excel Web: Sorgu oluşturma ve düzenleme masaüstü uygulamasında yapılır; web sürümünde yenileme yetenekleri kısıtlıdır.
  • Mac: Microsoft 365 Mac sürümlerinde sorgu yenileme ve sınırlı düzenleme desteklenir; bazı kaynaklar ve gelişmiş özellikler Windows'a özgüdür.
  • Satır sınırı: Çalışma sayfasına en çok 1.048.576 satır yüklenebilir; daha büyük veri için Veri Modeli kullanın.
  • Kimlik bilgileri: Kaynak kimlik bilgileri dosyanın içinde değil kullanıcının bilgisayarında saklanır; dosyayı başka birine gönderdiğinizde yenilemede kimlik bilgisi istenebilir.

Performans​

Büyük verilerde yenileme süresini kısaltmak için şu ilkeleri uygulayın.
  • Gereksiz sütunları erken kaldırın: Kullanmayacağınız sütunları ilk adımlarda silmek bellek ve süre kazandırır.
  • Satırları erken filtreleyin: Veritabanı kaynaklarında filtre adımları sunucuya katlanabilir; gereksiz satırlar hiç indirilmez.
  • Yalnızca bağlantı kullanın: Ara sorguları sayfaya yüklemeyin; Yalnızca Bağlantı Oluştur seçeneği gereksiz yazma işlemini önler.
  • Başvuru zincirlerine dikkat: Aynı kaynağa başvuran çok sayıda sorgu kaynağı birden çok kez okuyabilir; ağır kaynaklarda ara sonucu ayrı bir sorguda hazırlamak ya da Table.Buffer ile belleğe almak gerekebilir.
  • Birleştirmeleri azaltın: Büyük tablolarda birleştirmeden önce anahtar sütunlar dışındaki sütunları ayıklayın.
  • Arka planda yenileme: Birbirine bağlı sorgularda arka planda yenilemeyi kapatmak, sıralı ve öngörülebilir çalışma sağlar.
  • Tür dönüşümlerini sınırlayın: Her sütun için ayrı tür adımı yerine tek bir Table.TransformColumnTypes adımı kullanın.

Neden çalışmıyor?​

Sık karşılaşılan sorunlar, nedenleri ve çözümleri:
  • Veri Al düğmesi gri ya da yok: Neden: Sayfa korumalı olabilir, hücre düzenleme modunda olabilirsiniz ya da sürüm Power Query'yi desteklemiyordur (Excel Web). Çözüm: Korumayı kaldırın, Esc ile düzenlemeden çıkın, masaüstü Excel kullanın.
  • DataSource.Error, dosya bulunamadı: Neden: Kaynak dosya taşınmış ya da yeniden adlandırılmış. Çözüm: Düzenleyici'de Kaynak adımının dişlisinden yolu düzeltin ya da yolu parametreye bağlayın.
  • Expression.Error, sütun bulunamadı: Neden: Kaynakta sütun adı değişmiş ya da silinmiş. Çözüm: Hatalı adımı açıp yeni sütun adını yazın; kalıcı çözüm için sütun adlarını sabit tutun.
  • DataFormat.Error, değer sayıya dönüştürülemedi: Neden: Sütunda sayı olmayan metin ya da ondalık ayracı farkı var. Çözüm: Hataları Değiştir ya da Hataları Kaldır kullanın, Yerel Ayarı Kullanarak türü değiştirin, kaynağı düzeltin.
  • Formula.Firewall hatası: Neden: Farklı kaynaklar birleştirilirken gizlilik düzeyleri çakışıyor. Çözüm: Veri Kaynağı Ayarları ve gizlilik düzeylerini gözden geçirin; kaynak okuma ve birleştirme işlemlerini ayrı sorgulara bölün.
  • Yenilemede eski veri görünüyor: Neden: Yenileme otomatik değildir ya da arka plan yenileme bitmemiştir. Çözüm: Tümünü Yenile komutunu kullanın, dosya açılırken yenilemeyi etkinleştirin.
  • Yenilemeden sonra biçim ve sütun genişliği bozuluyor: Neden: Tablo özellikleri yenilemede biçimi korumuyor. Çözüm: Sorgu Özellikleri'nde sütun genişliğini ve hücre biçimini koruma seçeneklerini işaretleyin.
  • Sorgu sonucuna elle yazdığım değerler kayboluyor: Neden: Yenileme tabloyu yeniden yazar. Çözüm: Düzeltmeleri sorguya adım olarak ekleyin; hesaplamaları tablonun yanındaki ayrı sütunlarda formülle yapın.
  • Türkçe harfler yanlış büyük ya da küçük oluyor: Neden: Kültür belirtilmediğinde i, ı, İ ve I harflerinin eşlenmesi çalışma ortamının yerel ayarına bağlıdır ve beklediğiniz sonucu vermeyebilir; örneğin kültür verilmeyen Text.Lower büyük I harfini ı yapabilir. Çözüm: Text.Proper, Text.Upper ve Text.Lower işlevlerinde kültürü açıkça belirtin (Türkçe metinlerde tr-TR) ve sonucu kontrol edin.
  • Sorgu çok yavaş yenileniyor: Neden: Gereksiz sütunlar, geç uygulanan filtreler ya da çok sayıda başvuru. Çözüm: Performans bölümündeki ilkeleri uygulayın.

1. Tablodan sorgu oluşturma ve veri türleri​

Satış listesini bir tabloya çevirip Power Query ile yeni bir tabloya yükleyeceksiniz.
  • Verilerin içinde bir hücre seçip Ctrl+T ile tablo oluşturun ve tabloya Satislar adını verin.
  • Veri > Tablodan/Aralıktan (Data > From Table/Range) komutunu seçin.
  • Düzenleyici'de Adet sütununu Tam Sayı, Birim Fiyat sütununu Ondalık Sayı yapın; Ürün ve Şehir sütunlarını Metin olarak bırakın.
  • Giriş > Kapat ve Yükle komutuyla sonucu yeni tablo olarak sayfaya yükleyin.
Düzenleyici'nin ürettiği M kodu şuna benzer:
Kod 5 satır
let
    Kaynak = Excel.CurrentWorkbook(){[Name="Satislar"]}[Content],
    TurDegisti = Table.TransformColumnTypes(Kaynak,{{"Ürün", type text}, {"Şehir", type text}, {"Adet", Int64.Type}, {"Birim Fiyat", type number}})
in
    TurDegisti
Power Query
Formülünü incelemek için bir hücre seçin.
ABCDEFGHIJK
1ÜrünŞehirAdetBirim FiyatÜrünŞehirAdetBirim Fiyat
2Klavyeİstanbul12450,00Klavyeİstanbul12450
3FareAnkara25220,00FareAnkara25220
4Monitörİzmir63.200,00Monitörİzmir63200
5KulaklıkBursa18780,00KulaklıkBursa18780
6WebcamAnkara9950,00WebcamAnkara9950
7Yazıcıİstanbul44.100,00Yazıcıİstanbul44100
Satış ListesiExcelDepo v1.0.0
Soldaki A:D aralığı kaynak tablodur; H sütunundan başlayan tablo ise sorgunun çıktısıdır. Çıktıdaki sütunlar artık belirlenen veri türleriyle gelir. Kaynak tabloya yeni satır eklediğinizde çıktı tabloya sağ tıklayıp Yenile demeniz yeterlidir; sorguyu yeniden kurmanız gerekmez.

2. Filtreleme ve sıralama​

Sevkiyat listesinden yalnızca durumu Bekliyor olan kayıtları ağırlığa göre azalan sırada listeleyeceksiniz.
  • Veriyi tabloya çevirip Sevkiyat adını verin ve Veri > Tablodan/Aralıktan komutunu seçin.
  • Durum sütunundaki açılır oktan yalnızca Bekliyor değerini işaretleyin.
  • Kg sütunundaki açılır oktan Azalan Sırala seçin.
  • Giriş > Kapat ve Yükle ile sonucu yükleyin.
Oluşan M kodu:
Kod 7 satır
let
    Kaynak = Excel.CurrentWorkbook(){[Name="Sevkiyat"]}[Content],
    TurDegisti = Table.TransformColumnTypes(Kaynak,{{"Kg", Int64.Type}}),
    Bekleyen = Table.SelectRows(TurDegisti, each [Durum] = "Bekliyor"),
    Sirali = Table.Sort(Bekleyen,{{"Kg", Order.Descending}})
in
    Sirali
Power Query
Formülünü incelemek için bir hücre seçin.
ABCDEFGHIJK
1Sevk NoŞehirDurumKgSevk NoŞehirDurumKg
2SVK-101İstanbulBekliyor120SVK-105AnkaraBekliyor310
3SVK-102AnkaraYolda85SVK-103İzmirBekliyor240
4SVK-103İzmirBekliyor240SVK-101İstanbulBekliyor120
5SVK-104BursaTeslim Edildi60SVK-107İstanbulBekliyor95
6SVK-105AnkaraBekliyor310
7SVK-106AdanaYolda150
8SVK-107İstanbulBekliyor95
9SVK-108KonyaTeslim Edildi180
SevkiyatExcelDepo v1.0.0
H sütunundan başlayan çıktı tabloda yalnızca Bekliyor durumundaki sevkiyatlar bulunur ve en ağır sevkiyat en üstte yer alır. Teslim Edildi ve Yolda durumundaki satırlar sonuca hiç alınmaz, ancak kaynak tabloda aynen kalır. Bir sevkiyatın durumu Bekliyor olarak değiştirilip sorgu yenilenirse satır sonuca kendiliğinden eklenir.

3. Hesaplanan sütun ekleme ve sütun silme​

Stok listesinde her ürün için tutarı ve KDV dahil tutarı hesaplayacak, KDV oranı sütununu sonuçtan çıkaracak ve Birim Fiyat sütununun adını kısaltacaksınız.
  • Veriyi tabloya çevirip Stok adını verin ve Veri > Tablodan/Aralıktan komutunu seçin.
  • Sütun Ekle > Özel Sütun (Add Column > Custom Column) ile Tutar adlı sütuna Adet ile Birim Fiyat çarpımını yazın.
  • İkinci özel sütunu KDV Dahil Tutar adıyla ekleyin.
  • KDV sütununa sağ tıklayıp Kaldır (Remove) deyin; Birim Fiyat başlığına çift tıklayıp Fiyat yazın.
  • Giriş > Kapat ve Yükle ile sonucu yükleyin.
M kodu:
Kod 9 satır
let
    Kaynak = Excel.CurrentWorkbook(){[Name="Stok"]}[Content],
    TurDegisti = Table.TransformColumnTypes(Kaynak,{{"Adet", Int64.Type}, {"Birim Fiyat", type number}, {"KDV", type number}}),
    TutarEkle = Table.AddColumn(TurDegisti, "Tutar", each [Adet] * [Birim Fiyat], type number),
    KdvliEkle = Table.AddColumn(TutarEkle, "KDV Dahil Tutar", each [Tutar] * (1 + [KDV]), type number),
    KdvKaldir = Table.RemoveColumns(KdvliEkle, {"KDV"}),
    Yeniden = Table.RenameColumns(KdvKaldir, {{"Birim Fiyat", "Fiyat"}})
in
    Yeniden
Power Query
Formülünü incelemek için bir hücre seçin.
ABCDEFGHIJKL
1ÜrünAdetBirim FiyatKDVÜrünAdetFiyatTutarKDV Dahil Tutar
2Tablet108.500,0020%Tablet10850085000102000
3Telefon Kılıfı40150,0020%Telefon Kılıfı4015060007200
4Kitap25120,0010%Kitap2512030003300
5Defter10035,0010%Defter1003535003850
6Şarj Aleti30280,0020%Şarj Aleti30280840010080
7Kalem Seti6045,0010%Kalem Seti604527002970
Stok TutarıExcelDepo v1.0.0
Çıktı tabloda Ürün, Adet, Fiyat, Tutar ve KDV Dahil Tutar sütunları bulunur; KDV oranı sütunu hesaplamada kullanıldıktan sonra sonuçtan çıkarılmıştır. Hesaplanan sütunlar sayfa formülü değil sorgu adımıdır; bu yüzden kaynaktaki Adet ya da fiyat değişince yenileme ile güncellenir ve sütunu elle formülle doldurmanız gerekmez.

4. Gruplandırma ile şehir özeti​

Satış hareketlerini şehre göre gruplayıp toplam tutarı ve işlem sayısını bulacaksınız.
  • Veriyi tabloya çevirip Satis adını verin ve Veri > Tablodan/Aralıktan komutunu seçin.
  • Tarih sütununu Tarih, Tutar sütununu Ondalık Sayı türüne çevirin.
  • Giriş > Gruplandır (Group By) komutunu açın; Şehir sütununu seçin.
  • Yeni sütun olarak Toplam Tutar için Toplam (Sum) ve İşlem Sayısı için Satırları Say (Count Rows) işlemlerini ekleyin.
  • Toplam Tutar sütununu azalan sıralayın ve Kapat ve Yükle komutunu kullanın.
M kodu:
Kod 7 satır
let
    Kaynak = Excel.CurrentWorkbook(){[Name="Satis"]}[Content],
    TurDegisti = Table.TransformColumnTypes(Kaynak,{{"Tarih", type date}, {"Tutar", type number}}),
    Gruplu = Table.Group(TurDegisti, {"Şehir"}, {{"Toplam Tutar", each List.Sum([Tutar]), type nullable number}, {"İşlem Sayısı", each Table.RowCount(_), Int64.Type}}),
    Sirali = Table.Sort(Gruplu,{{"Toplam Tutar", Order.Descending}})
in
    Sirali
Power Query
Formülünü incelemek için bir hücre seçin.
ABCDEFGHIJ
1TarihŞehirÜrünTutarŞehirToplam Tutarİşlem Sayısı
204.03.2024İstanbulKlavye5.400,00İstanbul358403
305.03.2024AnkaraFare5.500,00Ankara236503
405.03.2024İzmirMonitör19.200,00İzmir225002
506.03.2024İstanbulKulaklık14.040,00Bursa27001
607.03.2024AnkaraWebcam8.550,00
708.03.2024İzmirFare3.300,00
809.03.2024İstanbulYazıcı16.400,00
911.03.2024BursaKlavye2.700,00
1012.03.2024AnkaraMonitör9.600,00
Şehir ÖzetiExcelDepo v1.0.0
Dokuz satırlık hareket listesi, şehir başına tek satıra indirilir. Toplam Tutar azalan sıralandığı için ilk satırda İstanbul şehri ve toplam tutarı 35840 görünür. Gruplama sonucu bir özet tablo değildir; sorgu adımıdır ve yenilemede kaynaktaki yeni satırları da kapsar.

5. Metin temizleme​

Elle girilmiş personel listesindeki fazla boşlukları, karışık büyük/küçük harfleri ve e-posta adreslerini düzelteceksiniz.
  • Veriyi tabloya çevirip Personel adını verin ve Veri > Tablodan/Aralıktan komutunu seçin.
  • Ad Soyad sütununu seçip Dönüştür > Biçim > Kırp (Format > Trim) ve Temizle (Clean) komutlarını uygulayın. Kırp yalnızca baştaki ve sondaki boşlukları siler; sözcük arasındaki çift boşluğu temizlemek için Değerleri Değiştir ya da aşağıdaki gibi M kodu kullanın.
  • Her Sözcüğün İlk Harfini Büyük Yap komutunu uygulayın; Türkçe harfler için formül çubuğunda kültür olarak tr-TR ekleyin.
  • E-posta sütununa Küçük Harf ve Kırp işlemlerini uygulayıp Kapat ve Yükle ile yükleyin.
M kodu:
Kod 8 satır
let
    Kaynak = Excel.CurrentWorkbook(){[Name="Personel"]}[Content],
    Temiz = Table.TransformColumns(Kaynak, {
        {"Ad Soyad", each Text.Proper(Text.Combine(List.Select(Text.Split(Text.Clean(Text.Trim(_)), " "), each _ <> ""), " "), "tr-TR"), type text},
        {"Departman", each Text.Proper(Text.Trim(_), "tr-TR"), type text},
        {"E-posta", each Text.Lower(Text.Trim(_)), type text}})
in
    Temiz
Power Query
Formülünü incelemek için bir hücre seçin.
ABCDEFGHIJ
1Ad SoyadDepartmanE-postaAd SoyadDepartmanE-posta
2 ayşe YILMAZ satış AYSE.YILMAZ@firma.com Ayşe YılmazSatışayse.yılmaz@firma.com
3MEHMET demirMUHASEBE mehmet.demir@firma.comMehmet DemirMuhasebemehmet.demir@firma.com
4fatma ÖZTÜRK SatışFatma.Ozturk@Firma.comFatma ÖztürkSatışfatma.ozturk@firma.com
5 ıŞIK kayainsan kaynakları isik.kaya@firma.com Işık Kayaİnsan Kaynaklarıisik.kaya@firma.com
6emre ŞAHAN BİLGİ işlemEMRE.SAHAN@FIRMA.COMEmre ŞahanBilgi İşlememre.sahan@fırma.com
PersonelExcelDepo v1.0.0
Çıktı tabloda adlar tek boşlukla ayrılmış ve her sözcüğün yalnızca ilk harfi büyük olur; Türkçe kültür kullanıldığı için ı ve İ harfleri doğru eşlenir. Departman adları biçimlendirilir, e-posta adresleri ise baştaki ve sondaki boşluklar silinerek küçük harfe çevrilir. Ancak e-posta sütununda kültür belirtilmediği için bazı adreslerde büyük I harfi ı olarak küçülmüştür (örneğin ayse.yılmaz ve fırma). Bu nedenle e-posta sonuçlarını kontrol edin ve gerekirse küçük harfe çevirirken kültürü açıkça belirtin.

6. Sütunu sınırlayıcıyla bölme​

Ürün kodlarını kategori ve sıra numarası olarak iki sütuna ayıracaksınız.
  • Veriyi tabloya çevirip Urunler adını verin ve Veri > Tablodan/Aralıktan komutunu seçin.
  • Ürün Kodu sütununu seçin ve Dönüştür > Sütunu Böl > Sınırlayıcıya Göre (Transform > Split Column > By Delimiter) komutunu açın.
  • Sınırlayıcı olarak tire karakterini seçin ve her sınırlayıcıda bölme seçeneğini bırakın.
  • Yeni sütunları Kategori Kodu ve Sıra No olarak adlandırın; Sıra No sütununu Tam Sayı yapın.
  • Kapat ve Yükle ile sonucu yükleyin.
M kodu:
Kod 6 satır
let
    Kaynak = Excel.CurrentWorkbook(){[Name="Urunler"]}[Content],
    Bolunmus = Table.SplitColumn(Kaynak, "Ürün Kodu", Splitter.SplitTextByDelimiter("-", QuoteStyle.Csv), {"Kategori Kodu", "Sıra No"}),
    Turler = Table.TransformColumnTypes(Bolunmus,{{"Kategori Kodu", type text}, {"Sıra No", Int64.Type}})
in
    Turler
Power Query
Formülünü incelemek için bir hücre seçin.
ABCDEFGHIJK
1Ürün KoduÜrün AdıStokKategori KoduSıra NoÜrün AdıStok
2ELK-1001Tablet14ELK1001Tablet14
3ELK-1002Kulaklık40ELK1002Kulaklık40
4MOB-2001Koltuk8MOB2001Koltuk8
5MOB-2002Çalışma Masası5MOB2002Çalışma Masası5
6GID-3001Zeytinyağı120GID3001Zeytinyağı120
7GID-3002Bal65GID3002Bal65
Ürün KodlarıExcelDepo v1.0.0
Çıktı tabloda Ürün Kodu sütunu yerine Kategori Kodu (ELK, MOB, GID) ve Sıra No sütunları görünür; Ürün Adı ve Stok sütunları aynen korunur. Bölme işlemi bir sorgu adımı olduğu için kaynağa eklenen yeni kodlar da yenilemede aynı kurala göre ayrılır. Kategori Kodu artık süzgeç ve gruplama için bağımsız bir sütun olarak kullanılabilir.

7. Boş hücreleri aşağı doldurma​

Bölge adı yalnızca grubun ilk satırına yazılmış bir hedef listesini, her satırda bölge görünecek biçimde düzelteceksiniz.
  • Veriyi tabloya çevirip Hedefler adını verin ve Veri > Tablodan/Aralıktan komutunu seçin.
  • Bölge sütununu seçin; boş hücreler Düzenleyici'de null olarak görünür.
  • Dönüştür > Doldur > Aşağı (Transform > Fill > Down) komutunu uygulayın.
  • Hedef sütununu Ondalık Sayı yapın ve Kapat ve Yükle ile yükleyin.
M kodu:
Kod 6 satır
let
    Kaynak = Excel.CurrentWorkbook(){[Name="Hedefler"]}[Content],
    Doldur = Table.FillDown(Kaynak, {"Bölge"}),
    Turler = Table.TransformColumnTypes(Doldur,{{"Hedef", type number}})
in
    Turler
Power Query
Formülünü incelemek için bir hücre seçin.
ABCDEFGHIJ
1BölgeŞehirHedefBölgeŞehirHedef
2Marmaraİstanbul500.000Marmaraİstanbul500000
3Bursa220.000MarmaraBursa220000
4Kocaeli180.000MarmaraKocaeli180000
5Egeİzmir300.000Egeİzmir300000
6Manisa90.000EgeManisa90000
7İç AnadoluAnkara350.000İç AnadoluAnkara350000
8Konya140.000İç AnadoluKonya140000
HedeflerExcelDepo v1.0.0
Kaynak listede yalnızca grubun ilk satırında bulunan bölge adı, çıktı tabloda her şehir satırında görünür: Bursa ve Kocaeli Marmara, Manisa Ege, Konya İç Anadolu altında yer alır. Her satırda bölge bilgisi bulunduğu için liste artık süzülebilir, sıralanabilir ve özet tabloya kaynak olabilir.

8. Sütunların pivotunu kaldırma​

Aylar yatay sütun olarak duran satış tablosunu, özet tablo ve grafiğe uygun uzun biçime çevireceksiniz.
  • Veriyi tabloya çevirip AylikSatis adını verin ve Veri > Tablodan/Aralıktan komutunu seçin.
  • Ürün sütununu seçin.
  • Dönüştür > Sütunların Pivotunu Kaldır > Diğer Sütunların Pivotunu Kaldır (Transform > Unpivot Columns > Unpivot Other Columns) komutunu uygulayın.
  • Öznitelik sütununun adını Ay, Değer sütununun adını Adet yapın.
  • Kapat ve Yükle ile yükleyin.
M kodu:
Kod 6 satır
let
    Kaynak = Excel.CurrentWorkbook(){[Name="AylikSatis"]}[Content],
    Eritilen = Table.UnpivotOtherColumns(Kaynak, {"Ürün"}, "Ay", "Adet"),
    Turler = Table.TransformColumnTypes(Eritilen,{{"Adet", Int64.Type}})
in
    Turler
Power Query
Formülünü incelemek için bir hücre seçin.
ABCDEFGHIJ
1ÜrünOcakŞubatMartÜrünAyAdet
2Klavye12095140KlavyeOcak120
3Fare200180210KlavyeŞubat95
4Monitör455038KlavyeMart140
5Kulaklık8011095FareOcak200
6Webcam302540FareŞubat180
7FareMart210
8MonitörOcak45
9MonitörŞubat50
10MonitörMart38
11KulaklıkOcak80
12KulaklıkŞubat110
13KulaklıkMart95
14WebcamOcak30
15WebcamŞubat25
16WebcamMart40
Aylık SatışExcelDepo v1.0.0
Beş ürün ve üç aydan oluşan 5x3 tablo, çıktı tabloda Ürün, Ay ve Adet sütunlarından oluşan on beş satıra dönüşür. Bu uzun biçim özet tablo, grafik ve süzgeç için uygundur. Diğer Sütunların Pivotunu Kaldır seçildiği için kaynağa Nisan gibi yeni bir ay sütunu eklendiğinde yenilemede otomatik satırlara dahil edilir.

9. Sorguları birleştirme (Merge)​

Sipariş listesini ürün koduyla fiyat listesine bağlayıp her sipariş için tutarı hesaplayacaksınız. Fiyat listesinde bulunmayan ürün kodu için sonuç boş kalır.
  • İki aralığı ayrı tablolara çevirip Siparisler ve Fiyatlar adlarını verin.
  • Her iki tablo için Veri > Tablodan/Aralıktan ile sorgu oluşturun ve Kapat ve Yükle > Yalnızca Bağlantı Oluştur seçeneğini kullanın.
  • Siparisler sorgusunda Giriş > Sorguları Birleştir (Merge Queries) komutunu açın.
  • Her iki tabloda Ürün Kodu sütununu seçip birleştirme türü olarak Sol Dış (Left Outer) seçin.
  • Yeni sütunun başlığındaki genişlet düğmesinden yalnızca Birim Fiyat sütununu işaretleyin.
  • Özel sütunla Tutar hesaplayıp Kapat ve Yükle ile yükleyin.
M kodu:
Kod 8 satır
let
    Siparis = Excel.CurrentWorkbook(){[Name="Siparisler"]}[Content],
    Fiyat = Excel.CurrentWorkbook(){[Name="Fiyatlar"]}[Content],
    Birlesik = Table.NestedJoin(Siparis, {"Ürün Kodu"}, Fiyat, {"Ürün Kodu"}, "FiyatTablosu", JoinKind.LeftOuter),
    Acilan = Table.ExpandTableColumn(Birlesik, "FiyatTablosu", {"Birim Fiyat"}, {"Birim Fiyat"}),
    Tutar = Table.AddColumn(Acilan, "Tutar", each [Adet] * [Birim Fiyat], type number)
in
    Tutar
Power Query
Formülünü incelemek için bir hücre seçin.
ABCDEFGHIJKL
1Sipariş NoÜrün KoduAdetÜrün KoduBirim FiyatSipariş NoÜrün KoduAdetBirim FiyatTutar
2S-001P-015P-01450,00S-001P-0154502250
3S-002P-032P-02220,00S-005P-0134501350
4S-003P-0210P-033.200,00S-002P-03232006400
5S-004P-041P-04780,00S-003P-02102202200
6S-005P-013S-004P-041780780
7S-006P-057S-006P-057
8S-007P-034S-007P-034320012800
Sipariş FiyatExcelDepo v1.0.0
Çıktı tabloda her siparişin yanında ürün koduna göre fiyat listesinden çekilen Birim Fiyat ve hesaplanan Tutar görünür; örneğin ilk siparişin tutarı 2250 olur. Fiyat listesinde olmayan P-05 kodlu siparişte fiyat ve tutar boş kalır; çünkü Sol Dış birleştirme sol tablodaki tüm satırları korur. Bu, DÜŞEYARA yerine kullanabileceğiniz yenilenebilir bir eşleştirme yoludur.

10. Sorguları ekleme (Append)​

Ocak ve Şubat satış tablolarını, ay bilgisi eklenmiş tek bir listede alt alta birleştireceksiniz.
  • İki aralığı ayrı tablolara çevirip OcakSatis ve SubatSatis adlarını verin.
  • Her ikisi için Veri > Tablodan/Aralıktan ile sorgu oluşturun; her sorguda Sütun Ekle > Özel Sütun ile Ay sütununu ekleyin ve sorguları Yalnızca Bağlantı Oluştur olarak kapatın.
  • Giriş > Sorguları Ekle > Yeni Olarak Ekle (Append Queries as New) komutunu seçin.
  • İki tablo seçeneğini işaretleyip birinci ve ikinci tabloyu belirleyin.
  • Kapat ve Yükle ile yeni sorguyu yükleyin.
M kodu:
Kod 8 satır
let
    Ocak = Excel.CurrentWorkbook(){[Name="OcakSatis"]}[Content],
    Subat = Excel.CurrentWorkbook(){[Name="SubatSatis"]}[Content],
    OcakAy = Table.AddColumn(Ocak, "Ay", each "Ocak", type text),
    SubatAy = Table.AddColumn(Subat, "Ay", each "Şubat", type text),
    Birlesik = Table.Combine({OcakAy, SubatAy})
in
    Birlesik
Power Query
Formülünü incelemek için bir hücre seçin.
ABCDEFGHIJ
1ÜrünAdetÜrünAdetÜrünAdetAy
2Klavye120Klavye95Klavye120Ocak
3Fare200Fare180Fare200Ocak
4Monitör45Monitör50Monitör45Ocak
5Kulaklık80Kulaklık110Kulaklık80Ocak
6Webcam25Klavye95Şubat
7Fare180Şubat
8Monitör50Şubat
9Kulaklık110Şubat
10Webcam25Şubat
Ocak ŞubatExcelDepo v1.0.0
Çıktı tabloda önce Ocak, ardından Şubat satırları alt alta gelir ve her satırın Ay sütunu hangi tablodan geldiğini gösterir. Webcam yalnızca Şubat tablosunda bulunduğu için listede bir kez görünür. Ekleme sütunları ada göre eşleştirir; bu nedenle iki tabloda aynı sütun adlarını kullanmak önemlidir. Mart tablosu eklendiğinde Table.Combine listesine bir ad eklemeniz yeterlidir.

Kullanırken dikkat edin​

  • Önce veriyi tabloya çevirin: Aralığı Ctrl+T ile tabloya çevirip anlamlı bir ad verirseniz sorgu tablo adıyla bağlanır ve satır eklendikçe kapsam kendiliğinden genişler. Adsız aralıklar kaynak yeniden tanımlanmadıkça yeni satırları kaçırabilir.
  • Adımlara anlamlı ad verin: Uygulanan Adımlar listesinde adıma sağ tıklayıp Yeniden Adlandır deyin ve ne yaptığını anlatan kısa adlar kullanın. Sorgu büyüdüğünde hataların bulunması ve başkasına devredilmesi kolaylaşır.
  • Veri türlerini bilinçli belirleyin: Sütun türü yanlışsa sıralama, toplama ve birleştirme beklenmedik sonuç verir; metin olarak gelen sayılar alfabetik sıralanır. Türleri önce temizlik adımlarını, sonra hesaplamaları yapacak biçimde ayarlayın ve Otomatik Tür Algılama sonuçlarını kontrol edin.
  • Sonuç tablosunu elle düzenlemeyin: Yenileme çıktı tabloyu yeniden yazar; üzerine elle yazdığınız değerler ve silip eklediğiniz satırlar kaybolur. Düzeltmeleri sorguya adım olarak ekleyin ya da hesaplamaları tablonun yanındaki ayrı sütunlarda formülle yapın.
  • Yenileme otomatik değildir: Varsayılan olarak sorgu, siz yenileyene kadar eski veriyi gösterir. Sağ tık menüsünden Yenile, Alt+F5 ya da Ctrl+Alt+F5 kullanın; dosya açılırken ya da düzenli aralıklarla yenilemeyi Bağlantı Özellikleri penceresinden etkinleştirin.
  • Türkçe harflerde kültür belirtin: Text.Proper, Text.Upper ve Text.Lower işlevlerinde kültür belirtmezseniz i, ı, İ ve I harflerinin dönüşümü çalışma ortamının yerel ayarına bağlı kalır ve beklediğinizden farklı olabilir; Örnek 5'te kültür verilmeyen Text.Lower, e-posta adreslerindeki büyük I harfini ı yapmıştır. Ad ve şehir gibi Türkçe metinlerde kültür olarak tr-TR verin; e-posta ve kod gibi alanlarda da sonucu mutlaka kontrol edin ve Türkçe karakter istemiyorsanız kültürü açıkça belirtin.
  • Tarih ve sayı biçimi için yerel ayar: Metin olarak gelen 01.03.2024 ya da 1.250,50 gibi değerler yanlış okunabilir. Sütun türünü değiştirirken Yerel Ayarı Kullanarak (Using Locale) seçeneğiyle Türkçe (Türkiye) belirleyin.
  • Dosya yolunu parametreleştirin: Dosya ve klasör kaynaklarında yolu koda gömmek yerine bir parametreye ya da sayfadaki bir hücreye bağlayın. Dosya başka bilgisayara taşındığında yalnızca tek değeri değiştirirsiniz.
  • Gizlilik düzeyleri ve kimlik bilgileri: Farklı kaynakları birleştirirken Formula.Firewall hatası alırsanız Veri Kaynağı Ayarları'ndan gizlilik düzeylerini kontrol edin. Kimlik bilgileri dosyanın içinde değil kullanıcının bilgisayarında saklandığı için dosyayı paylaştığınızda alıcıdan bilgi istenebilir.
  • Satır sınırı: Bir çalışma sayfası en çok 1.048.576 satır alır. Daha büyük sonuçları Bu Veriyi Veri Modeline Ekle seçeneğiyle yükleyin ve özet tablo ya da Power Pivot ile çözümleyin.
  • Sürüm ve platform farkları: Excel Web'de sorgu oluşturma ve düzenleme yapılamaz, Mac'te yetenekler Windows sürümünden sınırlıdır. Paylaşacağınız dosyada alıcının sürümünün sorgunuzdaki bağlayıcı ve işlevleri desteklediğinden emin olun.
  • Sorgu silmeden önce bağımlılıkları kontrol edin: Başka sorgunun kaynağı olan bir sorguyu silmek ya da yeniden adlandırmak o sorguları bozar. Düzenleyici'de Görünüm > Sorgu Bağımlılıkları (Query Dependencies) ile ilişkileri görebilirsiniz.
  • VBA ile sorgu kurma: Sorgu tanımları kod yoluyla ActiveWorkbook.Queries.Add yöntemiyle eklenir ve sonuç bir QueryTable nesnesiyle sayfaya yüklenir; bu sayfadaki örnekler bu yöntemle kurulmuştur. Mevcut sorguları yenilemek için ThisWorkbook.RefreshAll kullanabilirsiniz.
  • Kısayollar: Ctrl+T tablo oluşturur, Alt+F5 seçili sorguyu yeniler, Ctrl+Alt+F5 bütün sorguları ve bağlantıları yeniler. Düzenleyici'de adımı seçip formül çubuğundan M kodunu görmek, adımın ne yaptığını anlamanın en hızlı yoludur.
  • İlgili konular: Excel tabloları (Ctrl+T), Veri Al ve Dönüştür grubu, Sorgular ve Bağlantılar bölmesi, Veri Modeli ve Power Pivot, Özet Tablo ve Özet Grafik, Metni Sütunlara Dönüştür, Yinelenenleri Kaldır, Bağlantı Özellikleri; işlevler: DÜŞEYARA, ÇAPRAZARA, KIRP, TEMİZ, METİNBİRLEŞTİR; VBA öğeleri: Workbook.Queries, WorkbookQuery, QueryTable, RefreshAll.
Örneklerdeki tabloları indirilebilir Excel dosyasında kendiniz de deneyebilirsiniz.
Yazar
ExcelDepo
İndirme sayısı
0
Gösterim
16
İlk yayın
Güncel

Puanlar

0.00 Oylama 0 İnceleme
Geri
Üst