Genel Bakış
Power Query M Dili (Power Query M), Power Query'nin arka planda kullandığı, işlevsel ve büyük/küçük harfe duyarlı sorgu dilidir. Veri Al ve Dönüştür bölümünde arayüzle yaptığınız her işlem (filtreleme, sütun ekleme, gruplama, birleştirme) M kodu olarak kaydedilir. M'yi öğrenirseniz arayüzün sunmadığı dönüşümleri yazabilir, mevcut sorguları düzenleyebilir ve özel işlevler oluşturabilirsiniz.
Düzenleyicide iki yer önemlidir:
Bir adım, kendisinden önceki adımların adını kullanabilir. Örneğin Kaynak adlı adımın çıktısı, sonraki Filtre adımına girdi olur. Adım adı boşluk içeriyorsa #"Adım Adı" biçiminde yazılır; Power Query arayüzü boşluklu adları böyle üretir. Açıklama satırı için çift eğik çizgi, çok satırlı açıklama için eğik çizgi ve yıldız çifti kullanılır.
M'de büyük/küçük harf ayrımı vardır: Table.SelectRows doğru, table.selectrows hatalıdır. Anahtar sözcükler (let, in, if, then, else, each, true, false, null) küçük harfle yazılır.
each sözcüğü, tek parametreli ve adsız bir işlev yazmak için kısayoldur. Köşeli parantez içinde bir sütun adı yazdığınızda, o anki satırın o sütundaki değeri alınır. Koşul için if ... then ... else kullanılır. Eşitlik denetimi tek eşittir işaretiyle, eşit değil denetimi küçüktür-büyüktür işaretleriyle yapılır; metin birleştirme için ve işareti (&) kullanılır.
Özel işlev tanımlamak için parametreler parantez içinde verilir, ardından ok işareti ve işlev gövdesi yazılır. Bu işlevi aynı sorgudaki bir adım olarak tanımlayıp sonraki adımlarda çağırabilirsiniz; üçüncü örnekte bunu göreceksiniz.
F1 hücresinden başlayan sorgu tablosunda yalnızca maaşı 35.000 ve üzeri olan personel kalır; sağ uçta M kodunun hesapladığı Yillik Maas sütunu görünür. Kaynak tabloda bir maaşı değiştirip Tümünü Yenile komutunu verdiğinizde sonuç tablosu yeniden hesaplanır. Eşik değeri değiştirmek için sorgunun Filtre adımındaki sayıyı düzenlemeniz yeterlidir.
F1 hücresinden başlayan sonuç tablosunda her departman tek satırda görünür; yanında Toplam Maas ve Kisi Sayisi sütunları yer alır. Bu özet, formül yazmadan oluşur ve kaynak tablo değiştikçe Tümünü Yenile komutuyla güncellenir. Table.Group işlevinin üçüncü bağımsız değişkeni, her grup için hesaplanacak sütunların listesidir; yeni bir toplama eklemek için bu listeye bir çift daha yazabilirsiniz.
Sonuç tablosunda siparişler KDV dahil tutara göre büyükten küçüğe dizilir; her satırda KDV Dahil ve Ay No sütunları M kodu tarafından hesaplanmıştır. KDV oranı değişirse yalnızca KdvEkle işlevinin gövdesini düzenlemeniz yeterlidir, işlevi çağıran tüm adımlar yeni oranı kullanır. Bu yapı, tekrar eden hesapları tek yerde toplamanın M'deki karşılığıdır.
Nerede bulunur
M kodunu görmek ve düzenlemek için önce Power Query Düzenleyicisi'ni açın. Bir tablo ya da aralık seçip Veri > Veri Al ve Dönüştür > Tablodan/Aralıktan (Data > Get & Transform Data > From Table/Range) komutunu kullanabilir, ya da Veri > Veri Al > Power Query Düzenleyicisi'ni Başlat (Data > Get Data > Launch Power Query Editor) yolunu izleyebilirsiniz.Düzenleyicide iki yer önemlidir:
- Gelişmiş Düzenleyici: Giriş > Sorgu > Gelişmiş Düzenleyici (Home > Query > Advanced Editor) sorgunun tüm M kodunu tek pencerede gösterir.
- Formül çubuğu: Görünüm > Düzen > Formül Çubuğu (View > Layout > Formula Bar) seçili adımın M ifadesini gösterir ve düzenlemenize izin verir.
- Uygulanan Adımlar: Sağdaki bölmede her adım, M kodundaki bir satıra karşılık gelir.
let ve in yapısı
Bir M sorgusu çoğunlukla let ve in anahtar sözcükleriyle kurulur. let bölümünde adım adı ve ifade çiftleri alt alta yazılır, adımlar virgülle ayrılır, son adımdan sonra virgül konmaz. in sözcüğünden sonra sorgunun sonuç olarak döndüreceği adım yazılır.Bir adım, kendisinden önceki adımların adını kullanabilir. Örneğin Kaynak adlı adımın çıktısı, sonraki Filtre adımına girdi olur. Adım adı boşluk içeriyorsa #"Adım Adı" biçiminde yazılır; Power Query arayüzü boşluklu adları böyle üretir. Açıklama satırı için çift eğik çizgi, çok satırlı açıklama için eğik çizgi ve yıldız çifti kullanılır.
M'de büyük/küçük harf ayrımı vardır: Table.SelectRows doğru, table.selectrows hatalıdır. Anahtar sözcükler (let, in, if, then, else, each, true, false, null) küçük harfle yazılır.
Veri türleri, işlevler ve each
M'de temel türler number, text, logical, date, time, datetime ve null değeridir. Yapısal türler ise liste, kayıt ve tablodur:- Liste: Küme parantezi içinde değerler, örneğin {1, 2, 3}.
- Kayıt: Köşeli parantez içinde ad ve değer çiftleri; tek bir satırı temsil eder.
- Tablo: Satır ve sütunlardan oluşan, sorguların asıl çalıştığı yapı.
each sözcüğü, tek parametreli ve adsız bir işlev yazmak için kısayoldur. Köşeli parantez içinde bir sütun adı yazdığınızda, o anki satırın o sütundaki değeri alınır. Koşul için if ... then ... else kullanılır. Eşitlik denetimi tek eşittir işaretiyle, eşit değil denetimi küçüktür-büyüktür işaretleriyle yapılır; metin birleştirme için ve işareti (&) kullanılır.
Özel işlev tanımlamak için parametreler parantez içinde verilir, ardından ok işareti ve işlev gövdesi yazılır. Bu işlevi aynı sorgudaki bir adım olarak tanımlayıp sonraki adımlarda çağırabilirsiniz; üçüncü örnekte bunu göreceksiniz.
Nasıl kullanılır
M kodunu arayüzle birlikte kullanmanın tipik akışı şöyledir:- Verinizi bir Excel tablosuna dönüştürün (Ekle > Tablo, Insert > Table) ve tabloya anlamlı bir ad verin.
- Tabloda bir hücre seçip Veri > Tablodan/Aralıktan komutuyla Power Query Düzenleyicisi'ni açın.
- Gerekli dönüşümleri arayüzden yapın; her işlemin Uygulanan Adımlar listesine ve M koduna eklendiğini izleyin.
- Giriş > Gelişmiş Düzenleyici ile kodu açın, adım adlarını anlaşılır hale getirin ve gerekirse ifadeleri elle değiştirin.
- Giriş > Kapat ve Yükle (Home > Close & Load) ile sonucu sayfaya yükleyin.
- Kaynak veri değiştiğinde Veri > Tümünü Yenile (Data > Refresh All) komutuyla sorguyu yeniden çalıştırın.
1. Satır süzme ve hesaplanmış sütun ekleme
A1:C9 aralığındaki personel verisi tabloya dönüştürülür ve tabloya tblPersonel adı verilir. Ardından YuksekMaas adlı bir M sorgusu kurulur: önce Maas sütunu sayı türüne çevrilir, Table.SelectRows ile maaşı 35.000 ve üzeri olan satırlar süzülür, Table.AddColumn ile maaşın 12 katı olarak Yillik Maas sütunu eklenir. Sorgu sonucu F1 hücresinden başlayan yeni bir tabloya yüklenir. Siz Excel'de aynı işlemi Tablodan/Aralıktan komutu ve Gelişmiş Düzenleyici ile yapabilirsiniz.Power Query M Dili
Formülünü incelemek için bir hücre seçin.| A | B | C | D | E | F | G | H | I | |
|---|---|---|---|---|---|---|---|---|---|
| 1 | Personel | Departman | Maas | Personel | Departman | Maas | Yillik Maas | ||
| 2 | Ayşe Demir | Satış | 42.000,00 | Ayşe Demir | Satış | 42000 | 504000 | ||
| 3 | Mehmet Kaya | Muhasebe | 36.500,00 | Mehmet Kaya | Muhasebe | 36500 | 438000 | ||
| 4 | Fatma Yıldız | Depo | 28.000,00 | Zeynep Aydın | İnsan Kaynakları | 39000 | 468000 | ||
| 5 | Ali Çelik | Satış | 31.000,00 | Elif Arslan | Muhasebe | 45000 | 540000 | ||
| 6 | Zeynep Aydın | İnsan Kaynakları | 39.000,00 | ||||||
| 7 | Hasan Şahin | Depo | 27.500,00 | ||||||
| 8 | Elif Arslan | Muhasebe | 45.000,00 | ||||||
| 9 | Murat Koç | Satış | 33.500,00 |
Maas ListesiExcelDepo v1.0.0
2. Table.Group ile departman özeti
Bu örnekte A1:C9 aralığı tblKadro adlı tabloya dönüştürülür. KadroOzet sorgusu, Departman sütununa göre gruplar; her grup için List.Sum ile toplam maaşı, Table.RowCount ile kişi sayısını hesaplar. Arayüzde aynı sonuca Dönüştür > Gruplandır (Transform > Group By) komutuyla ulaşırsınız; Gelişmiş Düzenleyici'de Table.Group satırını görürsünüz. Sonuç F1 hücresinden başlayarak sayfaya yüklenir.Power Query M Dili
Formülünü incelemek için bir hücre seçin.| A | B | C | D | E | F | G | H | |
|---|---|---|---|---|---|---|---|---|
| 1 | Personel | Departman | Maas | Departman | Toplam Maas | Kisi Sayisi | ||
| 2 | Can Özkan | Üretim | 30.000,00 | Üretim | 91500 | 3 | ||
| 3 | Selin Tekin | Üretim | 32.000,00 | Satış | 119000 | 3 | ||
| 4 | Burak Aksoy | Satış | 41.000,00 | Muhasebe | 73500 | 2 | ||
| 5 | Derya Polat | Satış | 38.000,00 | |||||
| 6 | Emre Güneş | Muhasebe | 36.000,00 | |||||
| 7 | Gül Erdem | Muhasebe | 37.500,00 | |||||
| 8 | Okan Yalçın | Üretim | 29.500,00 | |||||
| 9 | Pınar Doğan | Satış | 40.000,00 |
Departman OzetiExcelDepo v1.0.0
3. Özel işlev ve tarih işlevleri
A1:C8 aralığı tblSiparis adlı tabloya dönüştürülür. SiparisKdv sorgusunda önce KdvEkle adlı özel bir işlev tanımlanır: tutarı 1,2 ile çarpar. Sonra Tarih ve Tutar sütunlarının türleri ayarlanır, Table.AddColumn ile her satırda bu işlev çağrılarak KDV Dahil sütunu eklenir, Date.Month ile Ay No sütunu üretilir ve Table.Sort ile satırlar KDV dahil tutara göre büyükten küçüğe sıralanır. Sonuç F1 hücresinden başlar.Power Query M Dili
Formülünü incelemek için bir hücre seçin.| A | B | C | D | E | F | G | H | I | J | |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | Siparis No | Tarih | Tutar | Siparis No | Tarih | Tutar | KDV Dahil | Ay No | ||
| 2 | S-1001 | 15.01.2024 | 1.250,00 | S-1006 | 27.05.2024 | 4890 | 5868 | 5 | ||
| 3 | S-1002 | 03.02.2024 | 980,50 | S-1003 | 21.02.2024 | 3420 | 4104 | 2 | ||
| 4 | S-1003 | 21.02.2024 | 3.420,00 | S-1005 | 18.04.2024 | 2150 | 2580 | 4 | ||
| 5 | S-1004 | 09.03.2024 | 760,00 | S-1007 | 11.06.2024 | 1675 | 2010 | 6 | ||
| 6 | S-1005 | 18.04.2024 | 2.150,00 | S-1001 | 15.01.2024 | 1250 | 1500 | 1 | ||
| 7 | S-1006 | 27.05.2024 | 4.890,00 | S-1002 | 3.02.2024 | 980,5 | 1176,6 | 2 | ||
| 8 | S-1007 | 11.06.2024 | 1.675,00 | S-1004 | 9.03.2024 | 760 | 912 | 3 |
Siparis ListesiExcelDepo v1.0.0
Kullanırken dikkat edin
- Büyük/küçük harf duyarlılığı: M'de işlev, adım ve sütun adları büyük/küçük harfe duyarlıdır. Sütun adındaki küçük bir yazım farkı, Expression.Error: The field was not found hatasına yol açar. Adımların adını kopyalarken de aynı dikkati gösterin.
- Adımlar arasındaki virgül: let bölümündeki her adımın sonuna virgül konur, ancak son adımın sonuna konmaz. Gelişmiş Düzenleyici'de elle adım eklerken en sık yapılan hata budur. in sözcüğünden sonra yazdığınız ad, let içindeki bir adımla birebir aynı olmalıdır.
- Veri türünü açıkça belirleyin: Excel tablosundan gelen sütunlar çoğu zaman any türündedir. Sayı, tarih ya da metin karşılaştırması yapmadan önce Table.TransformColumnTypes ile türü belirleyin; aksi halde karşılaştırmalar beklenmedik sonuç verebilir ya da hata oluşur.
- Sorgu otomatik hesaplanmaz: Power Query sonuçları, Excel formülleri gibi anında güncellenmez. Kaynak veriyi değiştirdiğinizde Veri > Tümünü Yenile komutunu kullanmanız ya da sorgu özelliklerinden dosya açılırken yenilemeyi seçmeniz gerekir.
- Arayüz ve elle yazılan kod: Gelişmiş Düzenleyici'de yaptığınız değişiklikler Uygulanan Adımlar listesine yansır. Ancak bazı elle yazılmış ifadeler arayüzde adım ayarlarını (dişli simgesini) kullanılamaz hale getirebilir. Önemli bir sorguyu değiştirmeden önce sorguyu çoğaltıp kopya üzerinde deneyin.
- Excel formülleri ile karıştırmayın: M işlevleri Excel işlevlerinden ayrıdır; Table.SelectRows, TOPLA ya da EĞER gibi çalışma sayfası işlevlerinin yerine hücrede kullanılamaz. Ayrıca M'de ondalık ayırıcı her zaman noktadır ve liste ayırıcısı virgüldür; bölgesel ayarlardan etkilenmez.
- Sürüm ve gizlilik düzeyleri: Excel 2010 ve 2013'te Power Query ayrı eklenti olarak kurulur; Excel 2016 ve sonrasında Veri sekmesinde yerleşiktir. Farklı kaynakları birleştiren sorgularda Formula.Firewall hatası alırsanız, sorgu seçeneklerinden gizlilik düzeylerini kontrol edin.
- İlgili konular: Power Query, Tablodan/Aralıktan komutu, Sorgular ve Bağlantılar bölmesi, Gelişmiş Düzenleyici, Gruplandır komutu, Sorguları Birleştir ve Ekle komutları, Özet Tablo, Excel Tablosu, DÜŞEYARA, ÇAPRAZARA, EĞER, TOPLA.