ایجاد یک راهکار جریان داده Dataflow در Power BI
مایکروسافت اخیراً پیشنمایش عمومی Power BI Streaming Dataflow را منتشر کرد که امکان ساخت یک راهکار گزارشدهی جریان داده در لحظه را با استفاده از Azure Event Hubs و Azure IoT به عنوان منابع پیام در لحظه و Power BI Dataflows به عنوان موتور ذخیرهسازی و پردازش فراهم میکند. با Streaming Dataflows میتوانیم دادههای در لحظه را ضبط کرده و Power BI Desktop را متصل کنیم (و به سرویس Power BI مستقر کنیم) تا آن دادهها را تجسم کنیم. با ویژگی Auto Page Refresh موجود در Power BI Desktop و سرویس، میتوانیم دادههای در لحظه را هنگام پردازش توسط Streaming Dataflow مشاهده کنیم.
دو روش ذخیرهسازی در Streaming Dataflow وجود دارد: گرم و سرد.
ذخیرهسازی گرم به طور پیشفرض روی 7 روز نگهداری تنظیم شده است و آخرین دادههای پردازش شده توسط Streaming Dataflow را حفظ میکند، میتوانیم این را به حداقل 24 ساعت تغییر دهیم. پس از گذشت این آستانه، دادهها از ذخیرهسازی گرم حذف میشوند. توجه داشته باشید که Streaming Dataflow برای این فرآیند باید فعال باشد، اگر غیرفعال باشد، دادهها تا زمان فعال شدن در ذخیرهسازی گرم باقی میمانند.
تمام دادهها در فضای ذخیرهسازی سرد (Cold storage) ذخیره میشوند. ما میتوانیم به هر دو نوع فضای ذخیرهسازی با Power BI Desktop/Service دسترسی داشته باشیم، فضای ذخیرهسازی سرد فقط قابلیت وارد کردن (import) دارد در حالی که فضای ذخیرهسازی گرم (Hot storage) با استفاده از DirectQuery (برای زمان واقعی) و وارد کردن (import) قابل دسترسی است.
در این پست وبلاگ، ما یک راهکار استریمینگ سرتاسری (end-to-end streaming) خواهیم ساخت که از یک برنامه C# برای تولید و ارسال پیامهای JSON “بازدید وب” به یک Azure Event Hub استفاده میکند. سپس یک Streaming Dataflow متصل به این Azure Event Hub ایجاد میکنیم و منطق پردازش را تعریف میکنیم. سپس Power BI Desktop را به Streaming Dataflow متصل میکنیم تا دادهها را تجسم کنیم و در نهایت آنها را در Power BI Service منتشر کنیم.
تصویر زیر نمونهای از گزارشی است که ایجاد خواهیم کرد.
معماری پایه راهکار
نمودار زیر یک معماری پایه برای ارائه یک راهکار گزارشدهی رویداد در لحظه را نشان میدهد.
- یک دستگاه منبع، یک پیام رویداد مبتنی بر JSON تولید کرده و به Azure Event Hub ارسال میکند.
- Power BI Streaming Dataflow به Azure Event Hub متصل میشود تا پیامها را هنگام دریافت توسط Event Hub دریافت کند.
- Power BI Data Model/Report در DirectQuery به Streaming Dataflow متصل میشود تا پیامها را تجسم کند.
تمام کد برای ایجاد راهحل در GitHub اینجا موجود است.
پیشنیازها
برای همراهی و ایجاد راهکار جامع، موارد زیر مورد نیاز است:
- توانایی اجرای برنامه C# (ویژوال استودیو)
- دسترسی به ایجاد Azure Event Hub
- Power BI Premium، Premium Per User یا Embedded A3 tier.
منابع ایجاد Azure Event Hub
ما با ایجاد یک Azure Event Hub جدید شروع خواهیم کرد زیرا به رشته اتصال و اعتبارنامههای Event Hub جدید برای برنامه تولید پیام C# JSON نیاز داریم.
- وارد https://portal.azure.com شوید
- “Event Hubs” را جستجو کنید و سرویس Event Hubs را انتخاب کنید
- روی Create کلیک کنید و اطلاعات زیر را وارد کنید.
- اشتراک مناسب را انتخاب کنید
- یک گروه منبع(Resource Group) انتخاب یا ایجاد کنید
- نام یک فضای نام را وارد کنید
- یک مکان مناسب انتخاب کنید
- برای سطح قیمتگذاری، پایه را انتخاب کنید
- واحدهای توان عملیاتی را روی مقدار پیشفرض ۱ نگه دارید
- روی Review و Create کلیک کنید
پس از ایجاد فضای نام Event Hub، اکنون باید یک Event Hub ایجاد کنیم.
- به فضای نام Event Hub تازه ایجاد شده بروید.
- در قسمت Overview روی + Event Hub کلیک کنید.
- نامی برای Event Hub مانند dhevpowerbi وارد کنید.
- تعداد پارتیشنها را روی مقدار پیشفرض ۲ نگه دارید.
- روی Create کلیک کنید.
فروش لایسنس پاور بی آی
برای خرید لایسنس نرم افزار Power BI ، میتوانید از خدمات ما استفاده نموده و درخواست خود را از طریق فرم زیر ثبت نمایید.
پس از ایجاد و فعال شدن Event Hub، باید سیاستهای ارسال و گوش دادن را ایجاد کنیم تا به برنامه C# اجازه ارسال پیامهای JSON و به Power BI Streaming Dataflow اجازه دریافت پیامها را بدهیم.
- مرور فضای نام Event Hub
- در قسمت تنظیمات، روی Shared Access Policies کلیک کنید.
- این یک سیاست موجود به نام RootManageSharedAccessKey خواهد بود، با این حال، یک سیاست جدید ایجاد خواهیم کرد.
- روی + Add کلیک کنید و نام مناسبی مانند SendEventsPolicy وارد کنید.
- ارسال را فعال کنید و سپس Save کنید.
- روی + Add کلیک کنید و نام مناسبی مانند ListenEventsPolicy وارد کنید.
- Listen را فعال کنید و سپس Save کنید.
به مقادیر فیلد Connection string-primary key توجه داشته باشید، زیرا این فیلد در برنامه C# و Streaming Dataflows به عنوان رشته اتصال استفاده خواهد شد.
لطفاً توجه داشته باشید که میتوانید Event Hub را فعال/غیرفعال کنید. در صورت غیرفعال کردن Event Hub، هیچ هزینهای متحمل نخواهید شد.
اکنون که Event Hub ایجاد و فعال شده است، آماده دریافت پیامها از برنامه C# است.
ایجاد Source JSON Event Generator
ما از یک برنامه C# برای ایجاد مجموعهای از پیامهای JSON و ارسال به سرویس Event Hubs استفاده خواهیم کرد. برنامه C# دادههای JSON مصنوعی بازدید وب را تولید میکند که شامل مجموعهای از فیلدها برای ردیابی جلسه کاربر، نوع بازدید وب (visitwebsite یا browseproduct)، تاریخ و زمان بازدید وب و محصولی که کاربر مرور کرده است در صورتی که نوع رویداد browseproduct باشد، میباشد.
ویژگیهای برنامه C# به شرح زیر است:
- ۲ کادر متنی رشته اتصال و نام مرکز رویداد برای اضافه کردن رشته اتصال و نام مرکز رویداد
- یک انتخابگر تاریخ برای انتخاب تاریخ “شروع” که میخواهیم رویدادهای ما از آن تولید شوند
- تعداد روزهایی که میخواهیم رویدادها را برای آنها تولید کنیم
- حداقل و حداکثر تعداد جلسات برای تولید هر روز. سپس این یک تعداد جلسه تصادفی در هر روز در محدوده ایجاد میکند.
قطعه کدی که برای ساخت پیام JSON و ارسال آن به Event Hub استفاده میشود، به شرح زیر است:
//create the message structure
WebVisitMessage webvisitmessage = new WebVisitMessage
{
SessionID = SessionID,
EventType = “visitwebsite”,
EventDateTime = dateincrement,
URL = URL,
Device = device
};
//serialize the JSON
string outputwebvisitmessage = JsonConvert.SerializeObject(webvisitmessage);
//send to the Azure Event Hub
await using (var producerClient = new EventHubProducerClient(connectionString, eventHubNameWebVisits))
{
using EventDataBatch eventBatch = await producerClient.CreateBatchAsync();
eventBatch.TryAdd(new EventData(Encoding.UTF8.GetBytes(outputwebvisitmessage)));
await producerClient.SendAsync(eventBatch);
}
ایجاد Streaming Dataflow پاور بی آی
اکنون جریان داده استریمینگ را ایجاد خواهیم کرد که شامل ایجاد یک فضای کاری جدید اختصاص داده شده به یک مجوز پریمیوم، ایجاد یک جریان داده استریمینگ و تعریف منطق مورد نیاز برای دریافت، پردازش و ذخیره پیامها است.
ایجاد فضای کاری پریمیوم و جریان داده استریمینگ جدید
- وارد https://app.powerbi.com شوید
- یک فضای کاری جدید به نام جریان داده استریمینگ ایجاد کنید
- مطمئن شوید که فضای کاری به یک مجوز پریمیوم اختصاص داده شده است. در این مثال، فضای کاری جدید به حالت مجوز – پریمیوم برای هر کاربر – اختصاص داده شده است. پس از ایجاد، وارد فضای کاری شوید و روی + New > Streaming Dataflow کلیک کنید
- به جریان داده استریمینگ جدید نامی مانند WebVisitsRealtime بدهید
- روی Create کلیک کنید
پس از ایجاد فضای کاری جدید و جریان دادهی استریمینگ، اکنون باید ورودی، منطق پردازش و خروجی را تعریف کنیم.
منطق جریان دادهی استریمینگ را تعریف کنید
اکنون منطق پردازشی ایجاد خواهیم کرد که به مرکز رویداد متصل میشود، انواع پیامها را به 2 جریان تقسیم میکند، سپس 2 جریان را به هم متصل میکند تا یک خروجی واحد ایجاد شود.
- روی نوار منو در بالا روی Event Hub کلیک کنید و ورودی دستی را انتخاب کنید
- نام مرکز رویداد: dhevpowerbi (یا نام رویدادی که مشخص میکنید)
- نقطه پایانی مرکز رویداد (فضای نام): sb://dhevpowerbistreaming.servicebus.windows.net/
- نام کلید دسترسی مشترک مرکز رویداد: ListenEventsPolicy
- کلید دسترسی مشترک مرکز رویداد: مقداری از فیلد کلید اصلی سیاست ListenEventsPolicy.
- پس از ایجاد، روی دکمهی «شناسایی خودکار فیلدها» کلیک کنید.
- مولد پیام C# را اجرا کنید و رویدادهای بازدید از وب را ایجاد کنید.
- اکنون باید فیلدهای موجود و پیشنمایشی از دادهها را ببینیم.
- با نگه داشتن ماوس روی فیلد EventDateTime و کلیک روی علامت سه نقطه، میتوانیم نوع داده را به Datetime تغییر دهیم.
اکنون منطق پردازش را به صورت زیر تعریف میکنیم:
- فیلتر
- نوع رویداد(EventType) = visitwebite
- فیلتر
- نوع رویداد(EventType) = browseproduct
- پیوستن
- چپ: SessionID
- راست: SessionID
- نوع پیوست: Inner
- تمام رویدادهای ظرف 30 ثانیه گذشته را به هم پیوند دهید
- جدول خروجی
- نام: WebVisitsStreamingData
- پس از ایجاد تمام منطق پردازش، روی Save کلیک کنید.
میتوانیم به فضای کاری برگردیم و Streaming Dataflow را آغاز کنیم. پس از شروع Streaming Dataflow، برنامه C# را اجرا کنید تا پیامهای JSON تولید شوند که اکنون پردازش خواهند شد.
اتصال Power BI Desktop به Streaming Dataflow
اکنون که Streaming Dataflow آغاز شده و پیامها را دریافت میکند، میتوانیم Power BI Desktop را باز کنیم و برای ایجاد گزارش به Streaming Dataflow متصل شویم.
- Power BI Desktop را باز کنید
- روی Get Data کلیک کنید و به Power Platform Dataflows (beta) متصل شوید
- Workspaces > نام فضای کاری (Streaming Dataflows) > WebVisitsRealtime > hot table را باز کنید
- Transform Data را کلیک کنید
- ستونهای زیر را حذف کنید:
- left_EventType
- right_eventType
- left_EventDateTime
- left_Device
- left_ProductID
- right_SessionID
- تغییر نام ستونها به صورت زیر:
- left_SessionID: Session ID
- left_URL: Main URL
- right_EventDateTime: Event Date Time
- right_URL: Product URL
- right_Device: Device Type
- right_ProductID: Product ID
- نام کوئری را Web Visits Realtime بگذارید.
- پنجره Power Query باید موارد زیر را نشان دهد.
Dataflow
- روی Close & Apply کلیک کنید و وقتی از شما خواسته شد حالت ذخیرهسازی را تنظیم کنید، DirectQuery را انتخاب کنید.
وقتی پنجره Power Query بسته شد، موارد زیر را در بوم گزارش انجام دهید.
- فیلد Product ID را انتخاب کنید و Summarization را روی Don’t Summarize تنظیم کنید.
- یک معیار جدید به نام Web Visit Count با کد DAX تعریف شده به صورت زیر ایجاد کنید:
Web Visit Count = COUNTROWS('Web Visits Realtime')
اکنون میتوانیم برای نمایش دادههای جریانی، مصورسازیهایی ایجاد کنیم.
- یک مصور Card visual کنید و از معیار تعداد بازدید وب استفاده کنید.
- یک نمودار دونات با موارد زیر اضافه کنید:
- معیار تعداد بازدید وب در قسمت Values
- نوع دستگاه در قسمت Legend
- یک نمودار میلهای خوشهای با موارد زیر اضافه کنید:
- معیار تعداد بازدید وب در Values
- شناسه محصول در Axis
- یک نمودار خطی با موارد زیر اضافه کنید:
- مقیاس تعداد بازدید وب در Values
- تاریخ رویداد زمان روی محور
-
- مطمئن شوید که قالب > محور X > نوع روی پیوسته تنظیم شده است
-
پس از ساخت این گزارش، میتوانیم ویژگی بهروزرسانی خودکار صفحه (Auto Page Refresh) را فعال کنیم تا دادههای بلادرنگ (real-time) در حال پردازش نمایش داده شوند.
- در پنل قالب (Format) گزارش، گزینه بهروزرسانی صفحه (Page Refresh) را روی روشن (On) قرار دهید.
- بهروزرسانی صفحه (Page Refresh) را باز کنید و موارد زیر را تنظیم کنید:
-
- نوع بهروزرسانی: بهروزرسانی خودکار صفحه (Auto page refresh)
- این صفحه را هر ۱ ثانیه بهروزرسانی کنید (Refresh this page every: 1 Second)
-
اکنون گزارش هر ۱ ثانیه تصاویر را بهروزرسانی میکند تا هرگونه داده جریانی جدید را نشان دهد.
استقرار و پیکربندی سرویس Power BI
پس از ایجاد گزارش Power BI Desktop، میتوانیم آن را در Power BI Service منتشر کنیم تا با دیگران به اشتراک گذاشته شود.
فایل Power BI Desktop را یا در فضای کاری دارای Streaming Dataflow یا در فضای کاری دیگری که دارای مجوز Premium است، منتشر کنید.
پیکربندی بهروزرسانی خودکار در Power BI Tenant
اگر میخواهیم سرعت بهروزرسانی را افزایش دهیم، باید تنظیمات بهروزرسانی خودکار را تغییر دهیم. در این سناریو، ما از حالت مجوز Premium Per User استفاده میکنیم، بنابراین در پورتال مدیریت، در تنظیمات Premium Per User میتوانیم فاصله بهروزرسانی را به مقدار دیگری تغییر دهیم. در این مورد، ۱ ثانیه.
پیکربندی بهروزرسانی خودکار در گزارش Power BI
پس از پیکربندی تنظیمات ادمین، باید بررسی/تغییر دهیم تا مطمئن شویم که گزارش روی فاصله بهروزرسانی مورد نظر ما تنظیم شده است.
- گزارش را در سرویس باز کنید و روی ویرایش کلیک کنید.
- در پنل قالببندی، مطمئن شوید که بهروزرسانی صفحه فعال است.
- باز کردن بهروزرسانی صفحه و اطمینان از موارد زیر:
-
- نوع بهروزرسانی: بهروزرسانی خودکار صفحه
- این صفحه را هر ۱ ثانیه بهروزرسانی کنید.
-
با کلیک روی نمایش جزئیات، میتوانیم آماری در مورد فاصله بهروزرسانی مشاهده کنیم تا مطمئن شویم که با تنظیمات ما مطابقت دارد. در این تصویر میتوانیم ببینیم که فاصله مدیریت به درستی تنظیمات پیکربندی مدیریت ما را روی ۱ ثانیه نشان میدهد.
خاموش کردن منابع
برای خاموش کردن Streaming Dataflow، هنگام نگه داشتن ماوس روی نام Dataflow در فضای کاری Power BI، روی آیکون Stop Dataflow کلیک کنید. برای خاموش کردن Event Hub، به Event Hub در پورتال Azure بروید و روی لینک Status (که به صورت Active نمایش داده میشود) کلیک کنید و آن را روی Disabled تنظیم کنید.
نتیجهگیری
در این وبلاگ، ما یک راهکار دادهی استریمینگ سرتاسری با استفاده از یک برنامهی C# ایجاد کردهایم تا دادههای مصنوعی بازدید وب را تولید کند، آن دادهها را به یک Azure Event Hub ارسال کند، یک Streaming Dataflow در Power BI ایجاد کند تا پیامها را از Event Hub دریافت کند و یک گزارش Power BI برای تجسم دادهها ایجاد کند.
برای خرید لایسنس نرم افزار Power BI ، میتوانید از خدمات ما استفاده نموده و درخواست خود را از طریق فرم زیر ثبت نمایید.
میتوانید پاور بی آی دسکتاپ رایگان را دانلود کنید : Power BI desktop download