Power BI Topoloji -2, DataFlow Nedir?

PowerBI tenant'ınızı yönetilebilir olmaktan çıkarmamanın yollarından ilki "golden dataset" kullanmaksa, ikincisi de dataflow'ları kullanmak! Peki dataflow nedir?

Golden dataset'i kısaca tekrar özetlemeden önce yapıyı hatırlayalım:

powerbi topoloji 8

Eğer üzerinde rapor üreteceğimiz dataset, kendi raporlarını oluşturacak kişilerin ihtiyaçlarını da karşılayacak şekilde her şeyi kapsıyorsa, herkes bu "golden dataset'e" bağlanır, kendi raporunu oluşturur, yetkisinin olduğu çalışma alanlarında (workspace) yayınlayarak başkalarıyla da paylaşır veya kendi çalışma alanında yayınlar. Tüm espri aynı veriyi gereksiz yere birden fazla buluta çıkarmamak üzerinedir, artı tek bir dataset yönetirsiniz, gateway'de bu dataset'i besler.

Kapsam, konu veya departman bazlı modellerde tek bir dataset oluşturup bunu ilgili kişilerle paylaşmak ideal bir durum. Tek bir finans modeliniz (dataset'iniz) var, tüm finans raporları bunun üzerinde çalışıyor. Başka bir topoloji yazı konusu olan row level securiy (RLS) ile yetkilendirme de yaptınız. Güzel!

Fakat tüm departmanların bütün ihtiyaçlarını karşılayacak tek bir model (dataset) oluşturmak çok ideal bir durum değil. Teknik olarak yapmak daha zorlaşır, refresh -büyük ihtimalle- daha uzun sürer, rapor yaratacak kişilerin önüne daha kompleks bir yapı koymuş olursunuz vs vs.

Burada ufak bir ara not açmakta fayda var; hemen hemen yaptığım -misal- tüm finansal modellerde, bazen satıştan, bazen satınalmadan verileri aynı model içerisine gömdüm. İhtiyaç böyleydi. Fakat bunu yaparken genellikle sadece lazım olan detay seviyesinde (granularity) gömdüm, misal satış datası ise fatura seviyesine kadar inmedim. Vesaire. Söylemek istediğim şu, hiç bir departman birbirinden tamamen ayrık/bağımsız değil, mutlaka ortaklaşa lazım olan veriler var, bunları da dahil etmek gerekiyor. Tüm her şeyi aynı modele gömmemek lazım ama hangi seviyede ortak veri olacağı biraz ihtiyaca / duruma bağlı. Tek bir cevabı yok.

Çok basit bir örnek var aslında dataflow'un nerede devreye girdiğini gösteren: Cari bilgileri! Cari dediğimiz şey, eğer şirket içerisinde başka bir jargon kullanmıyorsanız duruma göre, sizin müşterileriniz ve tedarikçilerinizdir. Genelde çoğu ERP'de tek bir tabloda dururlar ve basit bir flag sütunu ile ayrışır.

Diyelim "müşteriler" üzerinden bir model kuracağız, müşterilere ürün/hizmet satıyoruz dolayısıyla satış ayağı var (sipariş, irsaliye, fatura, varsa bütçesi vs ), aynı müşterinin finansal ayağı da var ( vadeler, çekler, hesap hareketleri vs) . Her iki kapsamı da aynı dataset'e gömdüysek sorun yok, "golden dataset" işimizi görmeye devam eder. (Ama RLS 'yi yönetmek zorlaşır, rapor yaratıcılarının önüne daha kompleks bir yapı koymuş olursunuz, "bu bunu görsün ama şunu görmesin" durumlarını yönetmek zorlaşır vs.)

Ortak lazım olan veriler olsa da genellikle bu tür durumlarda farklı datasetler oluştururuz: Biri satış için, diğeri finans için. Bu farklı dataset'leri güncellemek istediğimizde de kaçınılmaz bir durum oluşur: Aynı verileri -misal cari bilgisi ve fatura hareketlerini- birden fazla defa buluta göndeririz.

Çünkü bu durumda yapı şu hale gelmiştir.

dataflow nedir

Gateway'in görüntüsü sizi yanıltmasın, gateway üzerinde veri tutan bir yapı değildir, bulut servisi ile on-prem veri kaynakları arasında güvenlik amacıyla basit bir el sıkışma (hand shake) yapar, veri kaynağından veriyi çeken/isteyen dataset'in kendisidir. Bu durumda -yukarıdaki örneğe göre- cari bilgileri ile fatura hareketleri her bir dataset'in her bir refresh'inde buluta çıkacak!

Gateway ile orijinal veri kaynakları arasına on-prem bir datawarehouse koyalım derseniz orijinal veri kaynaklarından veriyi bir kez çıkartmış olursunuz ama her halükarda DW'den aynı veri her dataset'in her refresh'inde buluta çıkar.

Dataflow kavramının devreye girdiği yer işte burası: on-prem'de değil bulutta bir datawarehouse yaratmak!

Bir dataflow yarattığımızda bulut servisinde bir nevi veri ambarı (DW) yaratmış oluruz. Ve dataset'leri bu dataflow'u kullanacak şekilde ayarladığımızda, on-prem'den veri buluta sadece bir kez çıkar, verinin çıktığı yer dataflow'dur, dataset'ler bu dataflow üzerinden güncellenir.

topoloji dataflow 2

Dikkat ederseniz iki farklı refresh (güncelleme) var burada: İlki gateway üzerinden dataflow'un güncellenmesi, ikincisi dataflow üzerinden dataset'lerin güncellenmesi. Her ikisinin de mantığı, prosedürleri hemen hemen aynı, ama bunlar birbirini otomatik tetiklemeyen birbirinden bağımsız farklı iki refresh. Dataflow'un güncellenmesi dataset'leri otomatikman güncellemiyor!

Önce dataflow'un sonra ardından dataset'in güncellenmesini PowerAutomate ile otomatiğe bağlamak mümkün. Ama önce bir dataflow oluşturmamız lazım!

Dataflow Nedir ve Nerede Oluşturuluyor?

Dataflow'ları oluşturduğumuz yer bulut servisi! My Workspace 'te ( Çalışma Alanım) mevcut durumda dataflow oluşturamıyoruz ama yetkinizin olduğu bir çalışma alanında yaratabilirsiniz.

topoloji dataflow 3

Eğer ilk kez dataflow yaratıyorsak "Define New Tables" 'ı seçip devam edebiliriz.

topoloji dataflow 4

Karşımıza çıkan ekran, hangi veri kaynaklarına bağlanarak dataflow yaratacaksak bunun bir listesini çıkartıyor. Ve sol üst köşede bir ibare var: Power Query ! Tahmin edeceğiniz üzere, dataflow, buluttan tetiklediğimiz bir Power Query aslında.

topoloji dataflow 5

On-prem bir veri kaynağına bağlanarak dataflow oluşturacaksak daha öncesinde bir gateway kurmuş olmak işleri biraz daha kolaylaştırır, ama şart da değil, sonradan da aynı dataset refresh eder gibi dataflow refresh'i ayarlanabilir.

topoloji dataflow 6

İlk bağlantı ekranlarını geçtikten sonra karşımıza çıkan "şey" bildiğimiz Power BI Desktop'taki Power Query ekranlarının neredeyse aynısı!

topoloji dataflow 7

Hatta belki daha yeteneklisi, misal SQL ile çalışırken query folding devrede mi anlamak için "View Native Query" var mı yok mu diye bakmak gerekirken bunda direkt ikonlardan anlamak mümkün!

topoloji dataflow 8

Ne yapacaksak veriyle yaptık diyelim, "Save & Close" deyip dataflow'u yarattığımızda, bize dataflow'un güncellenmeye hazır olduğunu söylüyor!

topoloji dataflow 9
topoloji dataflow 10

Karşımıza çıkan refresh ekranları da aynen dataset günceller gibi, bir farkı yok!

topoloji dataflow 11

Dataflow oluştu, hatta refresh de oldu. Bu dataflow'a Power BI Desktop'tan bağlanmak için yapmamız gereken tek şey, Get Data –> Power BI Dataflows demek!

topoloji dataflow 12
topoloji dataflow 13

Bu noktadan sonra dataflow artık bizim veri kaynağımız, desktop'taki PQ ile üzerinde gene transformasyonlar yapabiliriz elbette ama dataflow'un amaçlarından biri hazır temizlenmiş, düzenlenmiş, veri modeline uygun bir veri kaynağını bulutta yaratmak, dolayısıyla minimal transformasyon gerektirir genelde.

Eğer dataset'leri bu dataflow'lara bağlayarak oluşturursak aynı verinin sadece bir kez buluta çıkmasını ve farklı dataset'lerin refresh'inde kullanılmasını sağlayabiliriz.

Aklımıza gelen sorulardan biri muhtemelen şu: Bu dataflow nerede? Veriler nereye yazıldı? Nereden okuyoruz verileri, dataflow'u güncellediğimizde veri nereye gidiyor.

Dataflow'un çıktısı, Azure Data Lake Storage'ta (ADLS) tenant'ınıza ait, Power BI servisi tarafından otomatik olarak yönetilen bir storage'ta "csv" formatında duruyor! Herhangi bir şey yapmanıza gerek yok bununla ilgili.

Başka önemli detaylar da var elbette dataflow'la ilgili ama topolojiyi anlamak açısından şu cümle yeterli sanırım: Dataflow, Power BI'ın bulut veri ambarı servisi! Kullanacağımız verileri temizleyip, ETL'ini yapıp bulutta otomatik bir data lake storage'ta tutmamızı sağlayan bir yapı. Refresh edilebilir, birden fazla dataset'in güncellenmesinde kullanılabilir. Misal hesap hareketlerini bir dataflow'a koyarsınız, bunu model kuracak herkes kullanabilir, tek bir dataflow refresh'inden tüm dataset'ler faydalanır, aynı veri on-prem'den sadece bir kez çıkmış olur.

Detaylara girmek yazıyı makul uzunlukta tutmak açısından çok mümkün değil ama bazı önemli noktaları kısa notlar olarak belirtmeden geçmek istemiyorum:

  • Dataflow'un kapasitesi kullandığınız lisansın sunduğu kapasiteyle ilgili. Pro lisans -mevcut durumda- size 10 GB alan sunuyor toplamda, tüm dataset'ler + dataflow'lar bu 10 GB'ın içinde! Premium lisans kullanıyorsanız bu kapasite 100 GB. Tüm dataset'leriniz + dataflow'larınız gene aynı kapasite içinde. Ekstra bir lisans maliyeti vs bu tip bir dataflow yarattığınızda yok!
  • Free lisansla dataflow oluşturamazsınız.
  • Power BI dataflow'ları -ki şu ana kadar anlattığım dataflow tipi bu- sadece Power BI tarafından kullanılabiliyor. Office 365 kullanıyorsanız Excel ile de bağlantı yapabilirsiniz. Bu henüz resmi olarak gelmedi ama ufak bir hack yöntemiyle şu anda mümkün, resmi olanı da yakında duyurulur muhtemelen. Bu bana sorarsanız büyük bir haber, çünkü kendi verisini çekip Excel'lerle çalışan herkese yönetilebilir merkezi bir veri ambarı vermiş oluyorsunuz.
  • Power BI tenant'ınıza veya workspace'lere Azure üzerinde açtığınız bir ADLS Gen 2 storage hesabınız varsa bunu da bağlayabilirsiniz. BYOD (Bring Your Own Data) diye isimlendiriyor MS bu yöntemi! Kapasite bu durumda tamamen Azure hesabınıza yazıyor. Maliyeti de öyle! Bu linke göz atmak isteyebilirsiniz. Bu tür ADLS Gen 2 dataflow'a sadece Power BI değil diğer uygulamalarla da erişebilirsiniz.
  • Premium lisans ile oluşturduğunuz dataflow'lar size teknik anlamda Pro lisans ile oluşturulmuş dataflow'lara göre daha fazla teknik kabiliyet sunuyor. Misal, Pro lisans ile oluşturduğunuz dataflow'u incremental refresh edemiyorsunuz, ama Premium ile oluşturduysanız edebiliyorsunuz. Bu listeye bakmak isteyebilirsiniz. ( Pro ile de dolaylı olarak incremental refresh yapılabilir! Bir topoloji yazısında hack'lere dolaylı yöntemlere girmesek daha iyi, ama mümkün.)
  • Dataflow kavramı Microsoft'un diğer bazı servislerinde de var. Power BI dataflow'u tek dataflow tipi değil yani! PowerApps için de dataflow var! Azure Data Factory için de dataflow var. Mantıkları aynı, ortamları farklı. Power Apps ile oluşturulmuş analitik dataflow'ları Power BI ile de kullanmak mümkün. Bu yazıya göz atmak isteyebilirsiniz.
  • Power BI dataflow 'ları gerçek (artık gerçek sizin için ne anlam ifade ediyorsa) bir veri ambarının yerini tutar mı sorusunun "evet tutar" – "hayır tutmaz" şeklinde net bir yanıtı yok! Microsoft, veri ambarı dediğiniz zaman Azure Data Factory + Synapse çözümüne yönlendiriyor sizi. Bu yönlendirmenin içinde -bana sorarsanız- biraz pazarlama, biraz ölçeklenebilirlik ve duruma göre performans farkı var. Soruya ilk cevabım ne derseniz "evet tutar" olur, ama ölçeklenebilirlik ve performans açısından -duruma göre- diye değiştiririm. Ama ben olsam, Synapse + ADF ikilisine girişmeden önce dataflow'u mutlaka kullanırım.
  • Dataflow ile dataset kavramları bazen birbirine karıştırılıyor ama aslında fark çok net: Dataset analitik bir model, içinde veri modeli var, hesaplamalar var, bağlanıp direkt raporlarınızı oluşturabilirsiniz. Dataflow ise bir veri kaynağı, temizlenmiş, modellemeye uygun hale getirilmiş bir veri ambarı.
  • Geçen ay duyurulan datamart henüz olgunlaşmamış bir konu. MVP olmanın bir avantajı olarak önizlemelerde çok heyecan verici bulmuştum ama ilk lansmandan tam tatmin olamadım malesef. Bekleyeceğiz bi süre. Bu konuyla ilgili hissiyatımı açıklayan en iyi yazıyı Power BI CAT takımından Matthew Roche'un blogunda okudum.
  • Aslında Microsoft biz fanilere, ister online ister Power BI Desktop'taki Power Query'de, çıktıyı gönderebileceğimiz çoklu bir destinasyon opsiyonu sunsa, yanına yaklaşılması çok zor olan şahane bir ETL aracı yaratmış olacak ama… Bakalım, göreceğiz.

Bloga sosyal medya hesabınızla hızlı üyelik-giriş için ilgili ikonu tıklayabilirsiniz.