Çö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ı. 😊