Herkese merhaba,
Bugün sıklıkla kaşılaştığımız JSON ve xml dosyalarının Power BI Desktop’da nasıl içeri aktarılacağını göstereceğim. Öncesinde biraz dosya yapılarından bahsedelim.
Veriyle ilgilenenlerin genelde verilerin geldiği veritabanlarıyla da ilgilenmeleri en azından aşina olmaları beklenir. Veritabanlarını düz dosya (Flat file) ve ilişkisel (relational database) veritabanı olarak düşünebiliriz. Düz dosyalarda veriler tek yönlü depolanırken (CSV mesela) ilişkisel veritabanlarında tablolar arasında ilişki kurulur. Bu da verilerin daha kolay gruplanması, sınıflanması ve depolanmasını sağlar. Bu nedenle çoğunlukla karşımıza ilişkisel veritabanları çıkar.
Tabi veriler her zaman bir veritabanından alınmaz. Mesela web API’dan veri aktarımı oldukça sık karşımıza çıkar. Web API’dan veriler XML ve JSON olmak üzere iki şekilde alınır. XML, 1996-1998 yılları arasında kullanılmıştır ve web sitelerinde kullanılan HTML diline benzer bir köke sahiptir. Biraz hantal kabul edildiği için bunun yerine JavaScript Object Notation (JSON) geliştirildi. Adından da anlaşılacağı üzere JavaScript nesne biçinimi temel alıyor. Okunması xml’den daha kolay. Herhangi bir web API’dan veri alıyorsanız json’nın xml’den daha popüler olduğunu görebilirsiniz. Bu iki dosya biçimindeki yapısal farklılık Power BI Desktop’a veri aktarımı yaptığımızda da karşımıza çıkıyor. Farkı görebilmek için basit bir örnek veriyorum.
Öncelikle wikipedia’dan Dünyanın en kalabalık ilk 10 ülkesini ve nüfus verilerini yıllarıyla birlikte gösteren basit bir tablo hazırlıyorum.
Rank | Country | Population | Year |
1 | China | 140300300 | 2020 |
2 | India | 1363234361 | 2020 |
3 | USA | 329827541 | 2020 |
4 | Indonesia | 266911900 | 2019 |
5 | Pakistan | 220892331 | 2020 |
6 | Brazil | 211632384 | 2020 |
7 | Nigeria | 206139587 | 2020 |
8 | Bangladesh | 168748862 | 2020 |
9 | Russia | 146748590 | 2020 |
10 | Mexico | 127792286 | 2020 |
Bu basit tablonun xml görünümü;

Benzer şekilde aynı tablonun JSON dosyasındaki görünümü;

şeklindedir. Belirtmekte fayda var, tabloları json veya xml’e dönüştüren converter veya editorlere internet üzerinden ücretsiz ulaşabilirsiniz. Mesela ben hazırladığım JSON dosyasının yazımında hata olup olmadığını JSON formatter‘dan kontrol ettim. Parantezler bazen kafa karıştırabiliyor.
Bu iki dosyanın temelindeki farklılıkların Power BI’da kendini nasıl gösterdiğine bakalım. Öncelikle .xml dosyasından veri aktarımı yapıp ve veri dönüştürme ekranından advanced editor ile M dilinde nasıl yazıldığına bakıyorum.

Source’da xml dosyasını aldığımız kaynak görülmektedir. Aslında bütün işlem burada dönüyor. Xml.Tables fonksiyonu XML verilerini ayrıştırır ve kaynak verinin şekline bağlı olarak çok karşamık iç içe bir yapı döndürür.
Table= Source {0} [Table], benim örneğimde 1 adet tablo var ve birinci tabloyu seçiyorum. Bu aslında programlama dilinde sıfırıncı indekse karşılık geliyor. Dolayısıyla Source’un sıfır olmasının nedeni sıfırıncı index olmasından kaynaklanıyor.
Gelelim veri türlerinin belirlendiği son satıra. Örnekteki tablo basit olduğu için veri türleri kolaylıkla seçilebiliyor. Ancak daha kompleks tablolarda iç içe geçmiş tablolara, karmaşık veri türlerine, iç içe geçmiş yapılara bağlı olarak xml belgeleri için daha fazla kod satırı olacaktır elbette. Bu durumda ben genellikle anlayabileceğim şekilde kodları yeniden düzenlemeyi tercih ediyorum.
Benzer şekilde json dosyasından aktardığım verilerin gelişmiş düzenleyicide M dili kodlarına bakıyorum.

Source’da JSON dosyasının Json.document adlı fonksiyondan alındığını görüyorum. Buradan M dilinin genel olarak düz dosyaları (flat file) nasıl işlediğine dair modelini görebiliriz. Bu model her zaman “dosya türü.doküman fonskiyonu” şeklindedir. Daha sonra, json dizisinde saklanan veriler Power BI Desktop’da record “kayıt” listesi şeklinde döndürüldüğünden kayıt listesini tabloya dönüştürmemiz gerekiyor.

Tam olarak bahsettiğim kayıt listesini yukarıdaki resimde görülmekte. Kayıt listesinin tabloya çevirme işleminin “convert to table” fonksiyonu ile yapıldığını görüyorum. Son olarak da tabloları “Expanded {0}” ile genişleterek istediğim tabloyu elde ediyorum. Sıfırın yukarıda bahsettiğim sıfırıncı indeks yani ilk tablo olduğunu hatırlatmak isterim. Tabloları açmak verinin büyüklüğüne bağlı olarak zaman alan kafa karıştırıcı bir işlem olabilir. M diliyle işlem yapmak bazen böyle zahmetli olabiliyor çünkü bu nesnelerin şeklinin tablo biçiminde nasıl eşleneceğini belirtmemiz gerekir.
Böylece hiyerarşik veri formatlarından biriyle uğraşırken M kodlarının nasıl değiştiğini, neler ifade ettiğini görmüş olduk.
Cok verimli bir makale. Tesekkur ederiz.
LikeLiked by 1 person
Verimli olduguna sevindim. Iyi okumalar dilerim
LikeLike