4 Ocak 2018 Perşembe

Power BI Üzerinde Gerçek Zamanlı Raporlama - Real Time Reporting -4 (Satır Gönderme ve Dashboard Tasarımı)

Power BI üzerinde gerçek zamanlı raporlama konusuna dördüncü yazımızla devam ediyoruz.

Bir önceki yazımızda Power BI üzerinde gerçek zamanlı raporlama yapmak için Power BI REST API ile Workspace ve Dataset oluşturmuştuk.

Önceki yazıya şu linkten ulaşabilirsiniz:

Bu yazımızda Dataset içerisinde tasarladığımız tablonun formatına uygun satırları üretip portale göndereceğiz. Hemen ardından gönderdiğimiz verileri gerçek zamanlı izlemek için bir Dashboard (Pano) tasarımı yapacağız.

Bu çalışmada genel olarak şu adımları atacağımızı ifade etmiştik:
  1. Öncelikle Azure Active Directory servisi üzerinde OAuth 2.0 protokolüne göre güvenliğin/yetkilerin denetlenebilmesi için uygulamamızı kaydedeceğiz (register). Power BI hesapları arkaplanda Azure Active Directory Servisi ile yönetilmektedir.
  2. Kayıt sırasında uygulamamızın Power BI API'yi hangi yetkilerle kullanabileceğini belirteceğiz.
  3. Tamamen kodun işleyişine odaklanabilmek için Visual Studio'da bir Console projesi açacağız. Bu proje içerisinden gönderdiğimiz isteklerle gerekli nesneleri portalde oluşturacak, hemen ardından bir döngü ile ürettiğimiz verileri portale göndereceğiz.
  4. İhtiyacımız olan sınıfları kullanabilmek için öncelikle Azure Active Directory ve Power BI API dll'lerini projemizin referanslarına ekleyeceğiz.
  5. Kaydettiğimiz uygulama bilgilerini veya kullanıcı kimlik bilgilerini kullanarak Azure AD'den token alacağız. Bu token, API istekleri sırasında kullanılmaktadır. API'ye erişim yetkileri bu token sayesinde doğrulanmaktadır.
  6. Projemiz içerisinden sırasıyla gerekli Power BI nesnelerini oluşturacağız ve veri göndermeye başlayacağız.
  7. Gönderdiğimiz verileri Power BI portalde oluşturacağımız Dashboard (pano) üzerinde yayınlayacağız. Önceden tanımlı görselleri kullanarak akışı farklı bakış açıları ile izleyebileceğiz.

Bir Dataset İçerisindeki Tabloya Veri Göndermek


Önceki yazılarda başlattığımız Console uygulamasını açıp geilştirmeye devam edelim.
Göndereceğimiz satırları rahatça hazırlayabilmek için bir Class açıp YeniKayıt isimli bir tip tanımlıyoruz.


Hemen ardından PowerBIClient nesne örneğimiz üzerinden PostRowsInGroup metotu ile satırları göndermeye başlayabiliriz. Bu metotun istediği groupId ve datasetKey parametrelerini daha önceki yazılarımızda değişkenlerde tutmuştuk. tableName parametresine bir önceki yazıda oluşturduğumuz tablo adını veriyoruz. En son parametreye de satırların olduğu nesnemizi veriyoruz. 

Simülasyon örneğimizde bir while döngüsü içerisinde Random sınıfı ile rastgele değerler üretip gönderiyoruz.


Kodları, aynı nesneleri tekrar oluşturmayacak şekilde düzenleyip projeyi başlatalım. 



Akışın sağlıklı olduğunu gördüğümüzde akan veriyi izlemek için Power BI portale geçip bir Dashboard tasarlayalım.


Gerçek Zamanlı Raporlama için Dashboard Tasarlamak


www.powerbi.com adresinden portale giriş yapıyoruz. Sol menüden oluşturduğumuz YeniGroup isimli Workspace'i seçelim. Sağ üst köşedeki 'Create' butonu ile bir Dashboard (Pano) oluşturalım. 

Oluşturduğumuz Dashboard ekranında üstteki 'Add tile' butonu ile görselleri eklemeye başlayalım. Çeşitli görseller mevcut. Biz REAL - TIME DATA grubundaki CUSTOM STREAMING DATA butonu ile veri izlemeye odaklanalım.


Veri akşını yumuşak bir animasyonla bize sunan görselleri bu menüden seçiyoruz. Açılan pencerelerden adım adım oluşturduğumuz Dataseti ve görseli seçelim. Her bir görselin kendine ait alanları var. Uygun alanları tablonun kolonları ile eşleştirelim. Son ekranda görsele başlık ve link verebilirsiniz. 

Görselleri 'Add tile' butonu ile teker teker ekliyoruz. Böylece aşağıdakine benzer bir görüntüyü kolayca elde edebilirsiniz.


Sonuç


Eğer akış esnasında çeşitli filtrelemeler veya hesaplamalar yapmak ve bunları farklı hedeflere iletmek sizin için önemliyse gelişmiş bir çok ürünü / Azure Servislerini tercih edebilirsiniz. Bu hedeflerden birini de Power BI olarak belirleyebilirsiniz. Azure Stream Analytics servisi akan veriyi Power BI'a kolayca yönlendirebilmektedir.

Eğer Power BI haricinde bir maliyete girmek istemiyorsanız ve akışı farklı hedeflere yönlendirmek öncelikleriniz arasında değilse Power BI REST API'den faydalanabilirsiniz. Yazı serimizdeki yönlendirmeleri kendi projelerinize uygulayarak kolayca gerçek zamanlı raporlar tasarlayabilirsiniz.

Aslında bu konu oldukça geniş bir konu. Bu seride hızlıca ve kolayca neler yapabileceğimize odaklandık. 

Detaylar için:

Limitler için:

Kodlama ve testler destek için:

Dilerseniz tüm işlemleri doğrudan Http istekeri ile Json alışverişleri halinde de yapabilirsiniz. Böylece her platform üzerinden veri akışını Power BI'a iletebilirsiniz. Hatta bazı adımları kod ile değil de Power BI Portal üzerinden yapabilirsiniz. 

Bunların nasıl yapıldığına da farklı bir yazıda değiniriz.

3 Ocak 2018 Çarşamba

Power BI Üzerinde Gerçek Zamanlı Raporlama - Real Time Reporting -3 (Workspaces, Datasets)

Power BI üzerinde gerçek zamanlı raporlama konusuna üçüncü yazımızla devam ediyoruz.

Bir önceki yazımızda Power BI üzerinde gerçek zamanlı raporlama yapmak için kullanacağımız Power BI REST API'den, Azure AD üzerinde uygulama kaydetmekten ve token almaktan bahsettik.

Power BI REST API yardımıyla Power BI portal üzerindeki nesneleri programatik olarak yönetebiliyoruz. İzlemek istediğimiz veriyi yine bu API yardımıyla portale gönderiyoruz. Power BI REST API'yi belli yetkiler çerçevesinde kullanabilmekteyiz. Bu güvenlik doğrulamasının yapılabilmesi için uygulamamızı Azure AD'ye kaydetmemiz ve bir Application ID elde etmemiz gerekti. Biz de önceki yazımızda bu gereği yerine getirdik. Hem uygulama kaydetmeyi hem de kayıt bilgileri ile token elde etmeyi el aldık. Bu yazıdakileri uygulayabilmek için bir önceki yazıda geçen işlemleri uygulamanız gerekmektedir.

Önceki yazıya şu linkten ulaşabilirsiniz:


Uygulamamızı geliştirmeye devam ediyoruz. Sıra Power BI nesneleri oluşturmada ve bunları görüntülemede.

Bu çalışmada genel olarak şu adımları atacağımızı ifade etmiştik:
  1. Öncelikle Azure Active Directory servisi üzerinde OAuth 2.0 protokolüne göre güvenliğin/yetkilerin denetlenebilmesi için uygulamamızı kaydedeceğiz (register). Power BI hesapları arkaplanda Azure Active Directory Servisi ile yönetilmektedir.
  2. Kayıt sırasında uygulamamızın Power BI API'yi hangi yetkilerle kullanabileceğini belirteceğiz.
  3. Tamamen kodun işleyişine odaklanabilmek için Visual Studio'da bir Console projesi açacağız. Bu proje içerisinden gönderdiğimiz isteklerle gerekli nesneleri portalde oluşturacak, hemen ardından bir döngü ile ürettiğimiz verileri portale göndereceğiz.
  4. İhtiyacımız olan sınıfları kullanabilmek için öncelikle Azure Active Directory ve Power BI API dll'lerini projemizin referanslarına ekleyeceğiz.
  5. Kaydettiğimiz uygulama bilgilerini veya kullanıcı kimlik bilgilerini kullanarak Azure AD'den token alacağız. Bu token, API istekleri sırasında kullanılmaktadır. API'ye erişim yetkileri bu token sayesinde doğrulanmaktadır.
  6. Projemiz içerisinden sırasıyla gerekli Power BI nesnelerini oluşturacağız ve veri göndermeye başlayacağız.
  7. Gönderdiğimiz verileri Power BI portalde oluşturacağımız Dashboard (pano) üzerinde yayınlayacağız. Önceden tanımlı görselleri kullanarak akışı farklı bakış açıları ile izleyebileceğiz.

Çalışma Alanı (Workspaces -Group) Oluşturmak


Power BI'daki Dataset, Table, Report, Dashboard nesneleri Çalışma Alanları (Workspaces) içerisinde tutulur. Yetkilendirme ve çalışmaları ayırma açısından Çalışma Alanları bir hayli önemlidir. Çalışma alanına diğer kişileri davet ederek ortak çalışmalar yürütebilirsiniz. Ayrıca çalışmalarınızı Power BI App haline getirerek App menüsü altında derli toplu şekilde tutabilir, farklı kişilerle de paylaşabilirsiniz. 

Sol menüden Çalışma Alanı oluşturup, görüntüleyebilir, mevcutları düzenleyebilirsiniz. Varsayılan Çalışma Alanı 'My Workspace' dir.



Hemen bir önceki yazımızda Visual Studio üzerinde geliştirmeye başladığımız Console uygulamamızı açıp Power BI REST API'yi kullanarak bir Workspace oluşturalım.

Öncelikle gerekli kütüphaneleri yükleyelim. Power BI REST API kütüphanelerini yüklemek için Package Manager Console'a şu ibareyi yazıyoruz:
Install-Package Microsoft.PowerBI.Api


Kütüphaneler yüklendikten sonra aşağıdaki namespaceleri kullanalım ve bir PowerBIClient nesnesi örnekleyelim:
using Microsoft.PowerBI.Api.V2;
using Microsoft.PowerBI.Api.V2.Models;

PowerBIClient nesnesi önceki yazımızda elde ettiğimiz token bilgisini ve Api Base Uri istemekte. Api Uri kısmına "https://api.powerbi.com/" adresini veriyoruz. Hemen ardından PowerBIClient nesnesinin üzerinden CreateGroup metotuna ulaşıyoruz ve grubu oluşturuyoruz. Oluşturduğumuz gruba bir Id atanıyor. Bu Id'yi daha sonra kullanacağımız için bir değişken üzerinde tutalım. 

Bu arada kodlar daha açık görünsün diye Id'yi Console ekranından kopyalıyorum ve değişkene statik olarak atıyorum.


Kodu çalıştırdıktan sonra YeniGroup isimli Workspace'in oluştuğunu Power BI portal üzerinden doğrulayabiliriz.


Simdi sıra Çalışma Alanı içerisindeki Dataset ve Table nesnelerini oluşturmakta.

Veri Kümesi (Dataset) ve Tablo (Table) Oluşturmak


Power BI Portal üzerinde içerisinde tablolar barındıran farklı türden Datasetler oluşturabiliyoruz. Dataset türlerini defaultMode özellinde belirtiyoruz. Bu türler Push, Streaming, PushStreaming, AzureAS, AsOnPrem olarak belirtilebilir. Varsayılan tür Push olarak belirlenmiştir. Biz bu örneğimizde defaultMode'u Streaming olarak belirteceğiz. Bu şekilde saniyede 5 istek gönderebiliriz ve gerçek zamanlı Dashboard (pano) görsellerimizden daha yumuşak geçişli olanları kullanabiliriz. Ancak bu türü seçersek, veri akışı durduğunda sadece 1 saat daha görseller üzerindeki verileri görebiliyoruz. Yani bu türden Dataset'ler uzun süre veri tutamıyor ve portal üzerinden de rapor tasarlanmıyor. Sadece Dashboard tasarımı yapmak mümkün oluyor. Push seçildiğinde bunları yapabiliyoruz fakat bu durumda saniye 1 istek ve saatte 1 milyon satır limiti ortaya çıkıyor.

PowerBIClient nesne örneğimiz ile Dataset ve içerisinde Table oluşturalım. defaultMode özelliğini Streaming olarak belirtiyoruz ve API ile satır ekleyebilmek için addRowsAPIEnable özelliğini true olarak işaretliyoruz.

Örneğimizde bir tür rüzgar tribünü simülasyonu yapacağız. Aşağıdaki gibi bir kodla ihtiyacımız olan Dataset, Table ve Column nesnelerini oluşturabiliriz. 


Örneğimizdeki tabloyu oluştururken desteklenen veri tiplerine de değinmiş olduk. Şuradan da desteklenen tipleri inceleyebilirsiniz:

Power BI portal üzerindeki Dataset'lere erişmek isterseniz; My Workspace içerisindekiler için GetDataset, diğer Workspace içerisindekiler için GetDatasetInGroup metotlarını kullanabilirsiniz. 

Belirtilen Workspace'teki tüm Datasetler'i bir döngüyle getirebilirsiniz. Az önce oluşturduğumuz Workspace'in groupId'sini kullanarak oluşturduğumuz Dataset bilgisini görüntüleyelim. 


YeniDataSet isimli Dataset'e atanan Id'yi de bir değişken üzerinde tutalım. Daha sonra bu Id ile Dataset'e veri göndereceğiz. 

Buradaki kodlarda sadelik olsun diye Id'leri Console ekranından kopyalayıp statik olarak değişkene atadım. Sizler amaca uygun olarak bu kodları düzenlersiniz.

Bu yazımızda gerekli nesneleri oluşturmuş olduk. Bir sonraki yazımızda veri gönderme aşamasına geçebiliriz.