Power Query, M, ETL

Daha önce Power BI'ın öğrenimiyle ilgili önerilerde bulunurken konuları üçe ayırmıştım:

  • ETL aşaması, veri temizliği ve manipülasyonu
  • Veri modelleme ve DAX
  • PowerBI önyüz kullanımı, rapor tasarımları ve bulut servisi

Veri modelleme ve DAX'a öncelik verin önerimi tekrarlayacağım fakat, ilk aşamayı doğru geçmediğiniz taktirde diğer aşamalarda uygulamaya "taklalar attırmak" durumunda kalabilirsiniz. Başarılı bir iş zekası projesinin temeli, doğru tasarlanmış, hızlı güncellenebilen bir veri ambarı.

Power BI, kendi veri ambarını üzerinde taşımak üzere Power Query aracını içerir. Mevcut durumda -bildiğim kadarıyla- diğer bilinen iş zekası uygulamalarının çoğunun kendi ETL araçları yok. PBI'ın artılarından biri.

Bu araç sadece Power BI'a özgü değil. Excel 2016'da "Data" tabının altından "Get Data" dediğinizde de aynı araç çıkıyor.

 

Excel 2010 ve 2013 versiyonları için de ayrı bir add-in olarak var. Excel içindeki Power Query'ye başka bir yazıda değineceğim, fakat kısaca belirtmek gerekirse : Excel'in satır limitlerini ortadan kaldırıp Excel data modelleri, ya da Powerpivot modelleri kurmanızı sağlayacak araç budur.

SQL Server 2017 Analysis Service ve Azure Analysis Service'te de aynı araç var. Microsoft ismini çok zikretmeden aynı teknolojiyi birden fazla yeni nesil uygulamaya gömmüş durumda ve geliştirmeye devam ediyor.

Bir süre sonra, yılların SSIS'inin (SQL Integration Service) yerini alır mı göreceğiz.

Power BI ön yüzünde "Get Data" veya "Edit Queries" butonunu tıkladığınızda karşınıza çıkan ekran Power Query ekranı.

Power Query, aynı anda birden fazla veri kaynağına bağlanabilir. Bağlandığımız her bir kaynak, tablo, view, Excel sayfası, web sayfası -her neye bağlandıysak- sol taraftaki sorgular panosunda gözükür. Bağlandığımız veri üzerinde yaptığımız her bir işlem ise sağ taraftaki step tablosunda sıralanır. Step'i tanımlayan komut dizisi ise formül penceresinde gözükür.

** Kendi ekranınızda formül penceresini göremiyorsanız  PBI –> Options  menüsünden ilgili seçeneği işaretlemeniz gerekir.

Power Query, veri kaynağına bağlanır. Bu bir step'tir. -Diyelim- bağlandığınız veri kaynağındaki size lazım olmayan sütunları sildiniz. Bu da bir steptir. Daha sonra ilgili -diyelim- fatura satırının TL değerini bulmak için "conditional" bir sütun eklediniz. Bu da bir steptir.

PQ'de her bir sorguda ilgili veri kaynağı üzerinde yapılan her bir transformasyon,  bir step olarak kaydedilir.

Transformasyon derken neleri kastediyoruz;  veriyle ilgili ihtiyaç duyduğumuz her türlü değişiklik, X günündeki USD kurunun değerini bulmak, ay bazında satışları ürün kategorileri bazında gruplamak, bir tabloyu transpoze etmek, veya satırları pivota almak, kelimelerin ilk harflerini büyük yapmak, "null" değerleri değiştirmek, çok uzun text'lerin (müşteri, ürün ismi gibi) sadece ilk iki kelimesini almak, vs. vs.

Veri ambarı oluşturmak amacıyla yapılan çalışmalarda sıklıkla gördüğüm yanlış uygulamalardan biri, özellikle T-SQL kullanarak veri kaynağı tarafında gereksiz bir çok "joinler" yapmak, hesaplamalar yaptırmak şeklinde. Bunların hiç birine ihtiyacımız yok, çok daha fazlasını hem de çok daha az bir eforla Power Query'de yapabiliriz.

  • Aynen SQL'de olduğu gibi "join" ler yapabiliriz. (Merge)
  • Sorguları birleştirebiliriz (Append)
  • Group By, Pivot, Unpivot, Transpose gibi işlemlerle tabloların yapısının değiştirebiliriz.
  • Sütun tiplerini değiştirebilir, değerlerden "extract" yapabilir,  sütunları "split" edebiliriz.
  • M diliyle veri üzerinde bir çok manipülasyon yapabiliriz.

M dili: Power Query'nin sorgu dili.

Kendine özgü bir yapısı, syntax'ı olan, başlı başına bir dil ve Microsoft bunu çok sık ve hızlı güncelliyor. Şu anki en büyük eksiklik, Power BI'da Power Query tarafında M kodu yazarken "intellisense" özelliğinin olmayışı. O da yakında gelir diye tahmin ediyorum.

Hazırlanan tüm rapor sayfalarında raporun güncelleme saatini göstermek bir "best practice" örneği. Bunu örneğin Power Query tarafında aşağıdaki kodu kullanarak çözmeyi genellikle tercih ediyorum:

= DateTimeZone.SwitchZone(DateTimeZone.UtcNow(),3)

Önceki yazılardan birinde paylaştığım "Tarih" tablosu oluşturan şablon M dili kullanılarak yazıldı.

Power Query ve M ile ilgili konuşulacak çok şey var, bir giriş ve tanıtım yazısı olarak blogda yerini alsın bu yazı da.