- Özel sütun ne zaman M ile, ne zaman DAX ile yazılır?
- Özel sütun penceresinin arkasındaki M ifadesi
- Adım adım: ilk özel sütunu yazmak
- Koşul, metin, tarih ve sayı işlemleri için kalıplar
- Null, hata ve tür uyuşmazlığı nasıl yönetilir?
- Sık yapılan hatalar ve performans notları
- Bu beceriyi Mindset programlarında nerede çalışırsınız?
- Sık sorulan sorular
M diliyle özel sütun: formül yazmadan önce bilinmesi gerekenler
Power Query'de M diliyle özel sütun yazmayı örnek formüllerle öğrenin: Table.AddColumn, each yapısı, koşul, metin işlemleri ve hata yönetimi.
Özel sütun ne zaman M ile, ne zaman DAX ile yazılır?
Power BI'da yeni bir sütun üretmenin farklı yolları vardır. Veri modele yüklenmeden önce Power Query Düzenleyicisi'nde M diliyle üretilen sütun, yenileme sırasında hesaplanır ve sonucu modele hazır bir değer olarak girer. Modele yüklendikten sonra DAX ile yazılan hesaplanan sütun ise model belleğinde hesaplanır ve tablolar arası ilişkilerden yararlanabilir.
Pratik kural şudur: Sütun yalnızca kaynak satırın kendi alanlarına bakıyorsa (birim fiyat çarpı adet, ad ile soyadı birleştirme, tarihten yıl ayıklama, metin temizleme, kategori etiketi atama) M tarafında üretmek daha temizdir. Kaynak sistem uygunsa dönüşüm veritabanı tarafında da çalışabilir. Sütun başka tabloların toplamına, ilişkili satırlara ya da kullanıcının filtre seçimine bağlıysa bu iş DAX ölçüsünün konusudur.
Bu ayrım model boyutunu da etkiler. Gereksiz hesaplanan sütunlar DAX tarafında şişkinlik yaratır; M tarafında doğru dönüşüm yapıldığında model daha sade kalır ve rapor daha hızlı açılır.
Özel sütun penceresinin arkasındaki M ifadesi
Power Query Düzenleyicisi'nde sütun ekleme sekmesinden özel sütun komutunu seçtiğinizde açılan pencere, aslında tek bir M fonksiyonunu sizin için yazar. Formül çubuğuna baktığınızda şunu görürsünüz:
Table.AddColumn(OncekiAdim, "Toplam Tutar", each [Fiyat] * [Adet], type number)
Microsoft belgesine göre Table.AddColumn şu bağımsız değişkenleri alır: üzerine eklenecek tablo, yeni sütunun adı, her satır için çalışacak bir üretici fonksiyon ve isteğe bağlı sütun türü. Üretici fonksiyon tablonun her satırını girdi olarak alır ve o satır için bir değer döndürür.
Buradaki each sözcüğü, tek bağımsız değişkenli bir fonksiyonun kısa yazımıdır. Satırı temsil eden örtük değişken alt çizgidir ve köşeli parantezle yazılan [Fiyat], o satırın Fiyat alanını okur. Yani each [Fiyat] * [Adet] ifadesi "her satır için o satırın fiyatını adedi ile çarp" anlamına gelir. Son bağımsız değişken olan type number yazılmazsa sütun herhangi bir tür olarak kalır ve yüklemede veri türü sorunları çıkabilir. Türü bilinen sütunlarda bu parametreyi vermek iyi alışkanlıktır.
Pencerede yazdığınız formül ile formül çubuğundaki adım aynı şeydir. Bu yüzden özel sütunu ilk kez yazarken pencereyi kullanın, sonra oluşan adımı okuyarak M sözdizimini öğrenin.
Adım adım: ilk özel sütunu yazmak
Örneğin elinizde Satislar tablosu olsun ve Fiyat, Adet, IndirimTutari alanları bulunsun. Net tutarı bir sütun olarak üretmek isteyelim.
- Düzenleyicide Satislar sorgusunu açın ve sütun ekleme sekmesindeki özel sütun komutuna girin.
- Yeni sütun adı olarak NetTutar yazın. Ad, tablodaki başka bir sütunla çakışmamalıdır.
- Formül kutusuna her satırdaki değerleri köşeli parantezle çağıran ifadeyi yazın: [Fiyat] * [Adet] - [IndirimTutari]
- Tamam'a basın, sonra sütunun veri türünü ayrıca ayarlayın. Pencere sütunu çoğu zaman her tür olarak bırakır; ondalık sayı ya da para birimi türü seçmek raporda toplamların doğru biçimlenmesini sağlar.
Alan adında boşluk varsa köşeli parantez içinde olduğu gibi yazılır: [Net Tutar]. Adım adlarında boşluk varsa ise ad #"Net Tutar" biçiminde alıntılanır; formül çubuğunda bu yazımı sık görürsünüz.
Bir kontrol alışkanlığı kazanın: Sütun eklendikten sonra tablonun ilk satırlarında hesabı elle doğrulayın ve null içeren bir satır bulup sonucuna bakın.
Koşul, metin, tarih ve sayı işlemleri için kalıplar
Pratikte özel sütunların çoğu birkaç kalıba dayanır. Örnekler kurgusaldır; alan adlarını kendi tablonuza uyarlayın.
Koşullu etiket: if [Tutar] >= [Hedef] then "Hedef üstü" else "Hedef dışı". M'de koşul if, then, else üçlüsüyle yazılır ve else dalı zorunludur. Birden çok koşul için else if zincirleyebilirsiniz.
Metin temizleme: Text.Trim([Customer]) başındaki ve sonundaki boşlukları siler. Belgeye göre ikinci bağımsız değişkenle silinecek karakterleri de verebilirsiniz. Metinleri birleştirmek için & operatörü kullanılır: [Ad] & " " & [Soyad]. Sayıyı metne katarken önce Text.From ile çevirin, aksi halde tür hatası alırsınız.
Tarih parçalama: Date.Year([SiparisTarihi]) tarihten yıl bileşenini döndürür. Aynı mantıkla ay ve gün için kardeş fonksiyonlar vardır.
Yuvarlama: Number.Round fonksiyonu sayıyı yuvarlar; ikinci bağımsız değişken olarak ondalık basamak sayısını verirsiniz. Belgeye göre varsayılan davranış en yakın çifte yuvarlamadır; yani yarım değerler bankacı yuvarlamasıyla işlenir. Finans raporunda farklı bir kural bekleniyorsa yuvarlama modunu açıkça verin.
Önemli bir ayrıntı: M büyük ve küçük harfe duyarlıdır. text.trim değil, Text.Trim yazılmalıdır; hata iletisi çoğunlukla bu yüzden "ad bulunamadı" biçiminde gelir.
Null, hata ve tür uyuşmazlığı nasıl yönetilir?
Özel sütunun en sık kırıldığı yerler boş değerler ve karışık türlerdir. Aritmetikte null içeren bir işlem null döner; yani Fiyat boşsa NetTutar da boş olur. Bunu istemiyorsanız koşulu açıkça yazın: if [Fiyat] = null then [Varsayilan] else [Fiyat] * [Adet]. Bu tür varsayımların iş kuralı olduğunu unutmayın: eksik fiyatı sıfır saymak mı, satırı dışarıda bırakmak mı, kaynağı düzeltmek mi, iş sahibiyle konuşularak karara bağlanmalıdır.
Hata durumunda try ve otherwise birlikte çalışır: try Number.From([Metin]) otherwise null. Bu ifade dönüşüm başarısız olduğunda sorguyu durdurmaz, o satıra null yazar. Ancak her şeyi susturmak tehlikelidir. Hatalı satırları ayrı bir sütunda işaretlemek ya da düzenleyicideki hata satırlarını koruma seçeneğiyle incelemek, sessizce kaybolan veriye karşı daha güvenlidir.
Tür uyuşmazlığı için kural basittir: Metinle sayıyı doğrudan toplamayın. Önce hangi sütunun hangi türde olduğunu sütun başlığındaki simgeden kontrol edin, gerekiyorsa sütun türünü değiştirin ya da özel sütunda dönüşümü açıkça yapın. Yerel ayara bağlı sayı biçimlerinde (virgüllü ondalık gibi) dönüşüm sonuçları farklı çıkabilir; kaynak biçimini bilmeden kopyalamayın.
Sık yapılan hatalar ve performans notları
Sık görülen hatalar kısa bir listeyle özetlenebilir:
- Satır bağlamını unutmak: each olmadan yazılan ifade, satır değil tablo bağlamında çalışır ve hata verir.
- Alan adını yanlış yazmak: Köşeli parantez içindeki ad kaynakla birebir aynı olmalıdır. Kaynaktaki bir sütun yeniden adlandırılırsa bu sütunu okuyan adım kırılır.
- Tür vermemek: Sütun her tür olarak kalır, sonraki birleştirme ve model ilişkilerinde sürpriz çıkar.
- Çok adım, tek iş: Aynı sütunun üzerine art arda özel sütun eklemek yerine mantıksal olarak ilişkili hesapları tek ifadede toplamak formül çubuğunu sade tutar. Aşırısı da okunabilirliği bozar; bir adımın tek bir niyeti olsun.
- Büyük tablolarda ağır işlev: Her satır için pahalı bir arama ya da başka bir sorguya başvuran özel sütun yenileme süresini ciddi ölçüde uzatır. Böyle bir ihtiyaç varsa birleştirme (merge) ile aynı sonucu almak çoğunlukla daha verimlidir.
Bir diğer pratik: Adımlara anlamlı ad verin. "Eklenen Özel" gibi varsayılan adlar, aylar sonra sorguyu okuyan kişi için bir şey anlatmaz. Karmaşık bir formülün üstüne açıklama notu olarak // ile başlayan yorum satırı ekleyebilirsiniz.
Bu beceriyi Mindset programlarında nerede çalışırsınız?
M diliyle özel sütun yazmak, rapor hazırlayan finans, satış operasyonu ve raporlama ekipleri için "veriyi Excel'de elle düzeltme" döngüsünden çıkmanın en doğrudan yoludur. Her yenilemede aynı temizleme ve hesaplama adımları kendiliğinden tekrarlanır.
Power BI Veri Modelleme programının modül başlıkları arasında ETL tasarımı ve Power Query mimarisi ile ölçüler ve hesaplanan sütunlar yer alır; M ile DAX ayrımını model temizliği bağlamında çalışabileceğiniz yer burasıdır. Excel Power Query ve Power Pivot programı ise Excel tarafından gelen ekipler için veri dönüştürme ve temizleme ile ileri Power Query tekniklerini içerir. Kurumsal ekiplerde raporları devralan analistlerin ortak bir M yazım standardı oluşturması için bu programlar birlikte değerlendirilebilir.
İlgili Mindset programı
Power BI Veri Modelleme
Sık sorulan sorular
M dilini bilmeden özel sütun eklenebilir mi?
Evet. Düzenleyicinin arayüzü, sütun ekleme komutlarının çoğunu tıklayarak uygular ve arka planda M kodunu kendisi yazar. Ancak koşul, hata yakalama ve birden çok alanı birleştiren sütunlarda formülü elle yazmak gerekir. Oluşan adımları formül çubuğundan okuyarak M'yi pratikte öğrenmek en hızlı yoldur.
Table.AddColumn ile Table.TransformColumns arasındaki fark nedir?
Table.AddColumn tabloya yeni bir sütun ekler ve değerini satırın alanlarından hesaplar. Table.TransformColumns ise var olan sütunun değerlerini yerinde değiştirir. Orijinal değeri korumak ve karşılaştırmak istiyorsanız yeni sütun eklemek, yalnızca temizleme yapıyorsanız dönüşümü tercih etmek mantıklıdır.
Özel sütunda yazdığım formül neden hata veriyor?
En yaygın nedenler büyük küçük harf hatası, olmayan bir alan adı, each ifadesinin eksikliği ve metinle sayının doğrudan işleme sokulmasıdır. Hata iletisindeki ad bilgisine bakın, sütun veri türlerini kontrol edin ve formülü önce tek bir basit işlemle sınayıp adım adım genişletin.
Özel sütun mu DAX hesaplanan sütunu mu daha hızlıdır?
Yenileme zamanında M ile üretilen sütun modele hazır değer olarak girer; DAX hesaplanan sütun ise model bellekte hesaplanır. Yalnızca kaynak satırla ilgili işlerde M çoğunlukla modeli sade tutar. Tablolar arası ilişkiye ihtiyaç duyan hesaplarda DAX gerekir. Hangisinin hızlı olduğu veri hacmine ve kaynağa bağlıdır, ikisini ölçerek karar verin.
Excel'deki Power Query ile Power BI'daki M dili aynı mı?
M dili aynıdır. Excel ve Power BI'daki düzenleyiciler aynı sorgu dilini kullanır, bu nedenle bir sorgunun kodunu gelişmiş düzenleyiciden kopyalayıp diğer araca taşıyabilirsiniz. Farklar daha çok desteklenen bağlayıcılar ve yayımlama özelliklerindedir; formül sözdizimi değişmez.
İlgili rehberler
İlgili eğitimler
Kategori: Veri Analitiği ve İş Zekası