10 Şubat 2018 Cumartesi

Power BI Üzerinde Gerçek Zamanlı Raporlama - Real Time Reporting - Bonus (HTTP İstekleri ve Cevapları Kullanarak)

Power BI üzerinde gerçek zamanlı raporlama yapma konusuna önceki yazılarımızda değinmiştik. Yazılarımıza bir göz atarak siz de kolayca gerçek zamanlı raporlar hazırlayabilirsiniz. Takip etmek istediğiniz olaylardan anında haberdar olabilir, Power BI'ın bu hizmeti sayesinde projelerinizde fark oluşturabilirsiniz.

Bu konudaki yazılarımıza şu linklerden ulaşabilirsiniz:

Power BI Üzerinde Gerçek Zamanlı Raporlama - Real Time Reporting -1 (Giriş)

Power BI Üzerinde Gerçek Zamanlı Raporlama - Real Time Reporting -2 (Azure AD Üzerinde Uygulama Kaydetme ve Token Üretme)

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

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

Yukarıdaki yazılarımızda gerçek zamanlı raporlamanın nasıl yapıldığını anlatırken Power BI REST API dll'ni kullanmıştık. Geliştirmeyi de .net platformunda C# ile yapmıştık. Elbette farklı platformlarda kullanabileceğiniz dll'ler de mevcut. Peki bu dll'leri kullanmadan platformdan bağımsız çalışmak mümkün mü? Hemen cevap verelim; mümkün.

Bu yazımızda Power BI REST API dll'ni kullanmadan doğrudan HTTP istek/cevapları ile gerçek zamanlı raporlamanın nasıl yapılabileceğine odaklanacağız. Bu yöntemle HTTP istek gönderip /alabilen herhangi bir platform tarafından üretilen olayları doğrudan Power BI'a iletebilirsiniz.

Buradaki geliştirmeyi .net platformunda C# ile yapacağız. Ancak benzer yöntemle aynı nesneleri farklı platformlarda da kullanabilirsiniz.

Hemen bir ön bilgi gerelim; hata kontrolleri, tasarım desenleri vs. gibi geliştirme teknikleri ilk bakışta kodun anlaşılmasını engelleyebileceği için odağımızın dışında bırakıyorum. Kodları sade biçimde yazıyorum ki dikkatimiz dağılmasın. Gerçek bir projede kodları nasıl zenginleştireceğiniz ve hangi kontrolleri yapacağınız size kalmış. 

Buradaki maksadım adım adım programı yazdırmak değil. Anahtar noktaları aktarmaktır.


Http Request (İstek) Gönderme


Bir Console projesi açıyorum ve projeye WebRegRes ismini verdiğim bir sınıf ekliyorum. Bu sınıf içerisinde HTTP istek/cevaplarını gönderip/almak için kullanacağım metotları bulunduracağım.

Öncelikle ihtiyacım olan tiplere kolayca ulaşmak için ilgili şu namespace'leri ekliyorum:

using System.Net; //HttpWebRequest
using System.IO; //Stream için

İstekleri oluşturmak için kullanacağımız metodun parametrelerinde Power BI nesnesinin Resource Uri'sini, istek yöntemini (GET, POST....) ve token bilgisini bekliyoruz.


Token güvenlikle ilişkili bir bilgidir. Bu bilgiyi isteğin header'ında göndermemiz gerekiyor. Token bilgisinin nasıl elde edildiğini görmek için şu yazımızı inceleyebilirsiniz:

Power BI Üzerinde Gerçek Zamanlı Raporlama - Real Time Reporting -2 (Azure AD Üzerinde Uygulama Kaydetme ve Token Üretme)

Resource Uri ise Power BI nesnelerine ulaşmak için kullanılan bir yoldur. Mesela satıra kadar ulaşmak için şu Uri'yi kullanırız:
https://api.powerbi.com/v1.0/myorg/groups/{SecilenGroupId}/datasets/{SecilenDataSetId}/tables/{TableAdı}/rows

Bu Uri ile sırasıyla Workspace (group olarak ifade ediliyor), DataSet, Table seçilerek satırlara kadar ulaşılır. Uri üzerinden JSON ifadeleri gönderilerek yeni nesneler oluşturabilir, var olan nesneleri silip, güncelleyebilirsiniz.

Bu yöntemin önceki yazılarımızda bahsettiğimiz yöntemden farkı, HTTP isteklerini ve JSON formatındaki mesajları açık şekilde göndermektir.

HTTP Response (Cevap) Yakalayıp Okumak


Şimdi sıra geldi isteklere gelen cevapları yakalamak için kullanacağımız metodu yazmaya. Gönderdiğimiz isteğe gelen cevabı aşağıdaki gibi kolayca alalım ve StreamReader nesnesi ile okuyalım.


HTTP Request ile JSON Post Etmek


Aslında yukarıda istek gönderecek metot yazmıştık. Yine aynı metodu kullanacağız fakat burada ek olarak JSON formatında veri gönderecek şekilde kapsülleyeceğiz. Metodumuz HttpWebRequest ve JSON istiyor. Böylece oluşturmak istediğimiz nesnelerin tanımlarını JSON formatında gönderebileceğiz.

Bu yeni metodumuzda mesjaı serileştirip gönderiyoruz hemen ardından ikinci sırada yazdığımız cevap alma metodunu kullanarak gelen cevabı döndürüyoruz.


Harika! Projemize eklediğimiz WebRegRes isimli sınıfı oluşturduk. Şimdi Power BI nesnelerine ulaşmak ve tablomuza satır göndermek için Main metoduna geçip kodlamaya devam edelim.

Power BI Üzerindeki Tabloya Satır Göndermek


Satırları tabloya iletmek için çeşitli bilgilere ihtiyacımız olacak. Bunlar;
  • Token bilgisi. Nasıl elde ediliğini 2. yazımızda anlatmıştık.
  • Workspace Id'si ve DataSet Id'si: Nesnelerin Resources Uri'sini kullanarak bu bilgilere ulaşabiliyoruz.
  • Table adı. DataSet tanımlarken belirttiğimiz DataSet içindeki bir nesnedir. Yine Uri ile ulaşılabilir.
  • JSON formatında satır. İster string birleştirme ile istersen NewJson kütüphanesi gibi bir kütüphane ile JSON formatında mesajlar oluşturabilirsiniz.
Kodlarımızda simülasyon amacıyla bir While döngüsü açıyorum ve içerisinde Random sınıfını da kullanarak anonim tip tanımlıyorum. Döngü her çalıştığında yeni bir satır oluşacak. 

Hemen arından bu satırı JSON formatına dönüştürüyorum ve WebRegRes sınıfındaki en son metodu kullanarak isteği Power BI'ya gönderiyorum.


İstekleri gönderirken Power BI Resources Uri'yi mutlaka belirtmeniz gerekir. Bu örneğimizdeki GroupDataSetResourceUri isimli değişkende satırların Resource Uri'sini önceden oluşturup tutmuştum. 

GroupDataSetResourceUri isimli değişkende tuttuğumuz bu Uri'yi şu şekilde oluşturabilirsiniz:


Peki, secilenGroupid ve secilenDataSetid nasıl elde edilecek? 

Workspace Id (Group Id) ve DataSet Id Elde Etmek


Bunun için nesnelerin Resources Uri'lerini kullanarak istekte bulunuruz. Gelen JSON formatındaki cevaplardan da bu nesnelerin Id'lerini elde edebiliriz.


Gelen JSON formatındaki cevapları okumak ve mesajın bir kısmındaki bilgiyi elde etmek için NewtonJson kütüphanesinden faydalanabilirsiniz.

Workspace ve DataSet Nesneleri  Oluşturmak

Nesneler hakkında bilgi alabileceğiniz gibi nesnelerin JSON formatındaki tanımlarını göndererek bu nesneleri uygulama tarafında da oluşturabilirsiniz. Workspace, DataSet oluşturmak satır oluşturmak gibidir. Satırı göndermek için ürettiğimiz JSON yerine aynı metoda ilgili nesnenin tanımını yazabilirsiniz. Satır oluşturmaktan farkı, karışıklık olmasın diye nesneyi tekil oluşturmaya özen göstermek, nesneye özel JSON tanımını doğru göndermek ve nesnenin Resources Uri'sini doğru belirtmektir. 

Bu konudaki çalışmalarınızı sağlıklı ve kolayca yürütebilmek için girişte belirttiğim yazılara göz atmanızı ve aşağıdaki kaynakları referans almanızı tavsiye ederim.

Power BI REST API reference (Resource Uri ve nesnelere erişim metotları hakkında bilgi sunar)

Power BI API - Apiary (Geliştirme için ortam ve örnek kodlar sunar)




Hiç yorum yok:

Yorum Gönderme