Çözüldü: Veri Yenilemesindeki Type Mismatch hatası

Merhaba BI Fanları,

Bu yazımızda sizlerle veri yenilemesi yaparken karşılaşılan en sık hatanın çözümü hakkında konuşacağız: Type Mismatch.

Power BI ‘da veri kaynağına bağlanıp bazı tabloları rapora çektiğinizde Power Query, bu tablolarda varsayılan bir işlem gerçekleştirir: Changed Type. Bu işlem her sütunun doğru veri türünde olmasını sağlayan işlemdir ve her tabloda uygulanır. Doğru veri türü, bizim doğru hesaplamalar yapabilmemiz için oldukça gerekli bir işlemdir.

Veri kaynağına ilk defa bağlanıldığında Power Quey, sütunlar için uygun veri tiplerini kendisi bulur ve “Change Type” adımında artık bu sütunlar için olacak olan veri türünü belirler. Veri türü belirlenmemiş sütunların veri türü şöyle görünür:

Rapor oluşturucuları da mümkün olduğunca bundan kaçınmaya çalışarak sütun için uygun veri türlerini seçmeye çalışır.

Power Query’de veri türlerinin algılanması ve sütuna uygun veri türünün uygulanması işlenmesi ilk bağlantıya özgüdür. Bundan sonra bu veri kaynağı yenilendiğinde Power BI sadece yeni gelen değerlerin ilgili sütunun belirlenen veri türüyle eşleşip eşleşmediğine bakar. Eğer yeni gelen değerler sütunun veri türüyle eşleşmiyorsa bu satırlar için hata döndürür ve karşımıza “Type Mismatch” hatasını çıkartır.

Hatalı hücreye tıkladığınızda alt alandaki hata detayı genelde şöyledir:

Bu hatayı aldığınızda 2 durum söz konusu olabilir:

  • Veri kaynağına yanlış yazım olmuştur.
  • Bu sütun için artık yeni gelecek değerle farklı bir veri türünde gelebilir.

Eğer durum birinci seçenekteki gibiyse veriyi size sağlayanlara hemen bu durumu bildirmek gerekiyor. Eğer durum ikinci seçenekteki gibiyse iki farklı yoldan bu durumu çözebilirsiniz:

1-Change Type adımını yeni veri türünü de kapsayacak şekilde düzelt.

Bu adımda “Applied Steps” adımlarında “Change Type” seçili olacak şekilde hata veren sütunun veri türünü “Text” yapabiliriz.

Bu işlemden sonra bize bir pencere çıkacak;  bu pencerede yapacağımız işlemin de bir veri türü işlemi olmasından dolayı önceki veri türü işlemi üzerine yazılsın mı diye soruluyor. Biz de buna evet diyoruz. Yeni bir adım olarak eklemek bu durumu çözmez.

Böylece tüm hatalar gitmiş ve hücrenin gerçek değeri karşımıza gelmiş oluyor.

2-Changed Type adımını kaldır

Bir diğer seçenek ise “Changed Type” adımını kaldırabilirsiniz. Bunu yaparken diğer sütunların nasıl etkileneceğini doğru analiz etmekte fayda vardır. Özellikle ondalıklı değere sahip veya binlik ayıraçlı gelen değerlere sahip sütunlar bu durumdan en çok etkilenenlerdir. Eğer üzerine tekrar bir “Change Type” adımı oluşturmazsanız karşılaşacağınız görüntü böyle olur:

Type mismatch hatasının neden oluştuğu ve bu hatayı nasıl kaldırabileceğimize dair yazımızı tamamladık. Bir başka yazımızda görüşmek üzere.

Good game well played.

Çözüldü: Veri Yenilemesindeki Premium_ASWL_Error

Merhaba BI fanları!

Bugünkü yazımızda sizlerle Power BI Portal’da veri yenilemesinde karşılabileceğiniz “Premium_ASWL_Error” hatasının nasıl çözüleceğine dair bilgileri paylaşıyor olacağız. Bu hatanın temeli direct query bağlantı modelinin power bi datasetlerinde ve Azure Analysis Services’daki kısıtlamalarından kaynaklanmaktadır. Power BI ‘da bağlantı modlarını bu yazımızda detaylı inceleyebilir ve karşılaştırmasını bulabilirsiniz.

Öncelikle bu hatayı almak için gereken senaryomuzu kurgulayalım:

Kullanıcıya iki farklı tarih aralığı seçtirterek bu aralıkları birbirleriyle kıyaslayabilecek bir analiz yaptırmak istiyorum. Veri Kaynağı olarak Azure Analysis Services’i seçiyorum ve mevcut hazırda olan modelime bağlanıyorum. Modellerin hepsinde mutlaka bir date tablosu zaten vardır. Benim yapmak istediğim analiz için 2 periyot karşılaştıracağımdan 2 farklı date tablosuna ihtiyacım var. Çünkü tek bir date tablosundan 2 farklı seçimi algılanmayacaktır.

Bunun için ekstra bir date tablosu oluşturacağız. Normalde date tablosu oluştururken bunu DAX ile “Calculated Table” olarak oluşturabiliriz. Dax ile date tablosu oluşturma yazımız için tıklayınız. Oluşturduğumuz tabloyu da hesap yapılacak tablo ile bağlıyoruz.

 

Ardından Power BI Portal’a yüküyoruz ve yenileme başlatıyoruz. Bam! İşte karşılaştığımız hata:

Eğer yenilemeyi .pbix dosyasında yaparsanız böyle bir hata almayacak ve herşey yolundaymış gibi gözükecektir. Ancak her zaman otomasyondan yana olduğumuz için her gün .pbix dosyasının yenileyip tekrar portala yüklenmesindense otomatik yenilemenin aktif olmasını isteriz. Otomatik yenileme nasıl yapılır? Yazımıza bakabilirsiniz.

 

Bu karşılaşan hatanın sebebini Microsoft’un Using DirectQuery for Power BI datasets and Azure Analysis Services (preview) yazısında buluyoruz.

Analysis Services’a direct query ile bağlantı yapılmasında bazı kısıtlamaları var. Bunlardan bir tanesi Azure Analysis Services’dan veri çekilen bir .pbix dosyasının Power BI Service’a yayınlandıktan sonra bu dosyanın içinde bulunan hesaplanmış tablolarının desteklenmemesidir. Hesaplanmış tablolar dax ile oluşturulan tablolar anlamına gelmektedir. Bizim örneğimizde de biz DAX ile Date tablosu oluşturmuştuk. Bu tabloyu silip service tarafında yenileme işlemi başlattığımda herhangi bir sorunla karşılaşmadım. Peki bu konuda ne yapabiliriz? Benim o tabloya da ihtiyacım var.

Bu konuda yapılabilecek işlem, bizim senaryomuz için Date tablosunu, sizin senaryonuzdaysa hesaplanmış tabloyu Power Query tarafında tekrar elde etmeye çalışmak.

Power Query’de de M dili kullanılmaktadır. M dilli bize birçok imkan sağlar. Dax’dan biraz daha farklı bir yapısı vardır.

Calculated table ile oluşturduğunuz tabloyu Power Query’de de M diliyle oluşturabilirsiniz. Senaryomuz için gerekli olan Date tablomuzu oluşturmak için öncelikle boş sorgu oluşturuyoruz.

Advanced Editörü açarak aşağıdaki kod bloğunu yapıştırıyoruz. Benim senaryom için bu kod bloğu ile oldukça yeterli bir Date tablosu oluşturabildim.

let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMjDUByIjAwMDpdhYAA==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [StartDate = _t]),
#"Added Custom" = Table.AddColumn(Source, "EndDate", each Date.From(DateTime.LocalNow())),
#"Changed Type2" = Table.TransformColumnTypes(#"Added Custom",{{"EndDate", type date}}),
#"Changed Type" = Table.TransformColumnTypes(#"Changed Type2",{{"StartDate", type date}}),
#"Added Custom1" = Table.AddColumn(#"Changed Type", "Dates", each {Number.From([StartDate])..Number.From([EndDate])}),
#"Expanded Dates" = Table.ExpandListColumn(#"Added Custom1", "Dates"),
#"Changed Type1" = Table.TransformColumnTypes(#"Expanded Dates",{{"Dates", type date}}),
#"Removed Columns1" = Table.RemoveColumns(#"Changed Type1",{"StartDate", "EndDate"}),
#"Added Custom2" = Table.AddColumn(#"Removed Columns1", "Year", each Date.Year([Dates])),
#"Added Custom3" = Table.AddColumn(#"Added Custom2", "Month", each Date.Month([Dates])),
#"Added Custom4" = Table.AddColumn(#"Added Custom3", "MonthName", each Date.MonthName([Dates])),
#"Added Custom5" = Table.AddColumn(#"Added Custom4", "ShortMonthName", each Text.Start([MonthName],3)),
#"Added Custom6" = Table.AddColumn(#"Added Custom5", "Quarter", each Date.QuarterOfYear([Dates])),
#"Changed Type3" = Table.TransformColumnTypes(#"Added Custom6",{{"Quarter", type text}}),
#"Added Custom7" = Table.AddColumn(#"Changed Type3", "QtrText", each "Qtr "& [Quarter]),
#"Added Custom8" = Table.AddColumn(#"Added Custom7", "Day", each Date.Day([Dates])),
#"Added Custom9" = Table.AddColumn(#"Added Custom8", "Date as Integer", each [Year]*10000 + [Month]*100+[Day]),
#"Changed Type4" = Table.TransformColumnTypes(#"Added Custom9",{{"Date as Integer", Int64.Type}}),
SelectRow = Table.SelectRows(#"Changed Type4", each Date.IsInPreviousNYears([Dates], 1) or Date.IsInCurrentYear([Dates]))

in
SelectRow

Ardından iki tablo arasında ilişki oluşturuyorum ve Power BI Service’e yayınlıyorum. Otomatik refresh ayarlarının yapıp yenileme başlatıyorum. Datasetim hiçbir sorun olmadan çalıştı. 😊