Refresh anındaki bu hatadan tamamen kurtulun!
Bu yazıda Power BI’da, kaynak tabloda sütun adı değişince, sütun silinince ya da sütun eklenince neler olabileceğinden ve aldığımız hatalar için kullandığımız birkaç yöntemden bahsedeceğiz.
Örneğimiz için, Excel’den Satışlar tablosunu Power BI Dekstop’a çektim. İlk çekerken içerisinde Marka diye bir sütun vardı. Daha sonra Excel’e dönüp bu sütunun adını “Marka Kodu” olarak değiştirip kaydedip kapattım. Power BI’ya geçip refresh ettiğimde kaynak olarak tanımlı tablo içinde Marka Kodu sütununu bulamadığı için aşağıdaki hatayı aldım.
Eğer şuan olduğu gibi hangi sütunun adının nasıl değiştiğini biliyorsak kolayca aşağıdaki yol izlenerek hata ortadan kaldırılabilir.
Home Sekmesi’nden Transform Databutonuna tıklayarak Power Query penceresine geçeriz. Burada Advanced Editör butonuna tıklarız. Advanced Editör, verileri içeri çekerken Power Qouery tarafından otomatik oluşan sorgunun bütününü göstermektedir.
Yukarıdaki komut dizisinde #”Changed Type” satırında; Power Query, tablomuzdaki sütunların veri tipleri algılamaya çalışmaktadır. Burada default olarak her sütunun adı yazar. Alttaki görseldeki adım sırasıyla, Marka gördüğümüz yeri Marka Kodu olarak değiştirip kaydederek kapatırsak hatayı gidermiş oluruz. Böylece Refresh esnasındaki hatadan kurtuluruz.
Kaynak datadan bir sütun silinirse ne olur?
Sütun adı değiştiğinde aldığımız hatayı, sorgumuzun yapısına bağlı olarak sütun silindiğinde de alıyoruz. Silinen sütun raporun herhangi bir yerinde kullanılmamış bir sütun olsa bile, eğer sorguda ilgili sütunun adı geçiyorsa, sütun bulunamadı hatası alırız. Çözüm için ilgili sütun başlığının Advanced Editörde ilk defa geçtiği yerden itibaren ismi geçen her yerden o sütun adını kaldırmaktır. Örneğin sadece “ChangedType” adımında ismi varsa,oradan süslü parantezleriyle beraber silebiliriz.
Veri kaynağına sonradan Yeni Sütun eklenirse ne olur?
Diğer durumlarda olduğu gibi bu durum da sorgunuzun yapısına bağlıdır. Eğer datanızı ilk defa içeri çekerken özel bir sorgu yazmadıysanız, standart get data işlemi yaptıysanız, bağlandığınız verilere yeni sütun eklendiğinde, Power BI’ı refresh ettiğimizde yeni sütunlar da Power BI’a otomatikman gelir.
Veri kaynağına yeni sütun eklendi ama rapora gelmiyor?
Olası bir durumdur. Böyle bir durumda hemen ilgili tablonun sorgusunu kontrol etmeliyiz. Sorgu içerisinde bir şekilde sütun seçip, diğer sütunları ignore etmişizdir. O sorgu satırını bulmamız gerekir.
Örneğin “Remove Other Columns” işlemi yapmış olabiliriz.
Bu durumda sadece seçtiğimiz sütunları modele yükler. Diğer hiçbir sütunu modele yüklemez.
Yeni eklenen sütunun da modele eklenmesi için bu adımda o sütunun da seçilmesini sağlamamız gerekir.
Yukarıda açılan pencere “Choose Columns” penceresidir. Remove Other Columns yerine direkt Choose Columns işlemi de yapmış olabiliriz. Bu şekilde rapora yüklenmesini istediğimiz sütunları seçmişsek, diğer hiçbir sütun bu seçime eklenmediği sürece modele yüklenmez. Yukarıdaki ekranda yaptığımız gibi Applied Steps bölümünden aynı adımın ayarlar ikonuna basıp yeni eklenen sütunun adını seçmek gerekir
Sütun seçen komutlaran daha bir çok örnek sayılabilir. Örneğin bir web linkten veri çekiyorsak, sütunları Expand eden bir query satırı oluşacaktır, dolayısıyla oradaki sütun adlarında da yeni sütun adımızın seçilip seçilmediğini kontrol etmemiz gerekebilir.
Özetle, sorunun kaynağı kesinlikle Query’dir. Applied Steps ya da direkt Advanced Editör bu konuda tarama yapmamız gereken kısımdır.
Eğer sütun başlıkları dönem dönem değişik gelen bir tablo ise ne yapabiliriz?
Tabloda sütunların sırası aynı ama sütun başlıkları bir ay Sales diğer ay Satışlar şeklinde farklı olan bir veri setine sahipseniz işler biraz daha zor. Bu durumda, Power Query’nin sütun isimleri yerine sütun numaralarını (indeksleri) kullanmasını sağlamalıyız. Bunun için Power Query adımlarımıza, veri tipi dönüşümünden önce columnList komutunu ekleriz, böylece refresh anındaki kaynaktaki mevcut sütunların dinamik olarak listelenmesini sağlarız.
Daha sonra da bu listedeki sıraya göre tiplerinin belirlenmesini sağlayabiliriz. Bunun için mevcut kodunuza bir columnList satırı ekleyip, sütun isimleri yazan yerleri de sırasıyla aşağıdaki koyu renkli alanlardaki gibi değiştirmelisiniz.
let
Source = Excel.Workbook(File.Contents(“C:\Users\Bahar DURMUŞ\Desktop\Projeler\Retail Sales.xlsx”), null, true),
Satislar_Table = Source{[Item=”Satislar”,Kind=”Table”]}[Data],
columnList=Table.ColumnNames(Satislar_Table),
#”Changed Type” = Table.TransformColumnTypes(Satislar_Table,
{
{columnList{0}, type text},
{columnList{1}, type any},
{columnList{2}, type text},
{columnList{3}, type text},
{columnList{4}, Int64.Type},
{columnList{5}, Int64.Type},
{columnList{6}, type date}
})
in
#”Changed Type”
NOT: büyük küçük harf duyarlıdır. Dikkat ediniz.
Bu yöntemde, Excel’de sütun başlıkları değişse bile hata almazsınız. Çünkü Refresh esnasında sütun başlıklarını kendisi bir daha listeler ve sonra veri tipi değişimi adımına geçer. Ancak varolan bir sütun kaldırılırsa yine hata alırız. Çünkü listeden kaldırılsa bile, #”Changed Type” adımında manuel yazdığımız kısımda fazla indeks kalmış olur. (Bu kısım için önerisi olan varsa yoruma yazabilirsiniz)
Veri Tipi Dönüşümünü Tamamen Kaldırma Yöntemi
#”Changed Type” bölümünü tamamen kaldırabiliriz. Böylece yalnızca tabloyu içeri çeker, sütunların veri tipleri ile ilgilenmez. Tek tek sütun kaydı yazılmadığı için de sütun başlığı değişimi ya da sütun silinmesi gibi durumlarda bir hata ile karşılaşmayız.
Bu yöntemde, verileri içeri aldıktan sonra veri tiplerini bizim tanımlamamız gerekir. Sadece ilgilendiğimiz sütunların tipini değiştireceğimiz için diğer ilgilenmediğimiz sütun başlıkları için sorguda bir kayıt oluşmamış olur.
let
Source = Excel.Workbook(File.Contents(“C:\Users\Bahar DURMUŞ\Desktop\Projeler\Retail Sales.xlsx”), null, true),
Satislar_Table = Source{[Item=”Satislar”,Kind=”Table”]}[Data]
in
#”Satislar_Table”
Refresh anındaki tüm hataları atlatsanız bile, değişen ya da silinen sütunlarınızı Power BI Rapor ekranınızda bir grafikte kullandıysanız, artık mevcut sütun bulunamadığı için grafiğiniz de hata verecektir. Refresh anındaki hatayı atlattıktan sonra, kaynaktan gelen yeni sütun isimlerinizi yeniden grafiğinizin üzerine sürükleyip bırakarak grafiğinizi hatadan kurtarabilirsiniz.
Sevgiler