ایجاد مدل داده در Power BI

اگر بخواهیم به اختصار مدل داده یا Data Model را تعریف کنیم؛ می توانیم بگوییم به نحوه ارتباط جداول مختلف موجود، مدل داده گفته می شود. در طراحی مدل داده جداول عمدتا به دوسته تقسیم می شوند. دسته اول جداول ابعاد یا دایمنشن (Dimension) هستند. و دسته دوم جداول، واقعیت ها یا فکت (Fact ) می باشند. 

جداول دایمنشن یا ابعاد (Dimension)

این جداول داده های ما را توصیف می کنند. به عنوان مثال اگر بخواهیم داشبوردی برای فروش در Power BI بسازیم؛ جداولی همچون، جدول اطلاعات محصولات، جدول اطلاعات مشتری ها، جدول تاریخ، جدول فروشگاه و ... می توانند جداول دایمنشن ما باشند. ساختار جداول دایمنشن به نحوی است که از هر موجودیت (Entity) تنها یک ردیف (فعال) وجود دارد. مثلا در جدول دایمنشن محصولات هر رکورد در بر دارنده اطلاعات یک محصول است. ساختار جداول دایمنشن از دو نوع ستون کلید (key) و مشخصه (Attribute)  تشکیل می شود. ستون کلیدی ستونی است که در بر دارنده آیدی آن موجودیت مثلا محصول است. ستون های مشخصه، اطلاعات تکمیلی در مورد آن موجودیت هستند. مثلا ستونهای دایمنشن کالا به صورت زیر است.

جداول فکت (Fact)

جداول فکت در واقع نشان دهنده مقادیر قابل محاسبه برحسب دایمنشن ها هستند. به عنوان مثال مقادیر فروش، مالیات، تعداد فروش و ... در این جدول قرار می گیرد. این جداول در واقع ارتباط بین جداول های دایمنشن را برقرار می کنند. ستونهای این جداول دو دسته ستونهای کلید دایمنشن ها و ستونهای مقادیر است. نمونه ای از این جداول به صورت زیر است.


مدل داده (Data Model)

 نحوه ارتباط بین جداول دایمنشن و فکت تعیین کننده مدل داده خواهد بود. اگر تنها یک فکت و چندین دایمنشن داشته باشیم و دایمنشنها با جدول فکت در ارتباط باشند و هیچ دایمنشنی با دایمنشن دیگر در ارتباط نباشد؛ این مدل داده، ستاره یا Star Schema خواهد بود.  اگر تنها یک فکت و چندین دایمنشن داشته باشیم و دایمنشنها با جدول فکت در ارتباط باشند و جداول دایمنشن نیز با هم در ارتباط باشند؛ مدل داده دانه برفی یا Snowflake Schema است. تصویر اول مدل ستاره و تصویر دوم مدل دانه برفی است. تصویر دوم که مدل دانه برفی است؛ دایمنشن مارکت دارای دو دایمنشن دیگر است؛ پس مدل داده دانه برفی است.

                                                                                                  مدل ستاره

                                                                  مدل دانه برفی

ضرورت ایجاد مدل داده

دو دلیل عمده برای ایجاد مدل داده وجود دارد. دلیل اول کاهش تکرار (Redundancy) داده ها و در نتیجه کاهش حجم داده و دلیل دوم نیازهای محاساتی است. برای مثال داده های تصویر زیر که فایل آن نیز از این لینک قابل دانلود است (شیت Flat Data)؛ دارای تکرارهای زیاد است که منجر به افزایش حجم داده ها می شود.

در صورتی که با ایجاد مدل داده می توان ستونهای مرتبط با مشتری را به جدول دایمنشن مشتری و ستونهای مرتبط با کالا را به جدول دایمنشن کالا منتقل کرد و در جدول فکت تنها آیدی کالا و مشتری باشد. در نهایت ساختار جدول فکت به صورت زیر می شود.(شیت FactSale فایل دانلودی) 

دلیل دوم ایجاد مدل داده، ضروتهای محاسباتی و ساخت نمودار ها است. به عنوان مثال فرض کنید دو جدول خرید و فروش تعدادی کالا را داریم که فایل Power BI آن از این لینک قابل دانلود است. چون کالا در هر دو جدول در ردیف هایی تکرار شده است نمی توانیم بین این دو جدول ارتباط برقرار کنیم. 


اگر بخواهیم همزمان تعداد خرید و تعداد فروش را بر حسب کالا روی یک نمودار ببینیم چون ارتباطی بین دو جدول وجود ندارد؛ اعداد یکی از مقادیر فروش یا خرید اشتباه محاسبه می شود؛ چون باید نام کالا را از یکی از جداول، مثلا فروش، به نمودار اضافه کنیم و بنابراین مقادیر خرید را به دلیل عدم وجود ارتباط درست محاسبه نمیکند. تصویر زیر این موضوع را نشان می دهد.


برای رفع این مشکل باید یک جدول دایمنشن کالا داشته باشیم که به هر دو جدول خرید و فروش متصل باشد. و در نمودار نام کالا را از جدول دایمنشن انتخاب کنیم. چون دایمنشن هر دو جدول خرید و فروش را فیلتر میکند، مقادیر روی نمودار درست خواهد بود.

ایجاد مدل داده  در Power BI

برای ایجاد مدل داده در Power BI، راهکار، کپی کردن جدول اصلی و ساخت دایمنشن و مرج کردن دایمنشن با جدول اصلی است. برای مثال ما از فایل اکسل زیر که به صورت زیر است برای ساخت یک دایمنشن مشتری استفاده می کنیم.این فایل اکسل و فایل Power BI نهایی را از این لینک می توانید دانلود کنید.

 برای ساخت مدل داده ابتدا به فایل در Power BI متصل می شویم. وارد محیط پاور کویری می شویم و با کلیک بر روی کویری FlatFile گزینه Dupplicate را انتخاب می کنیم. در کویری جدید ایجاد شده تمامی ستونهایی که به مشتری مربوط هستند را نگه داشته و بقیه ستونها را حذف می کنیم.یعنی ستونهای تعداد خرید و قیمت واحد و مبلغ خرید و تاریخ خرید را حذف میکنیم.

همانطور که گفته شد در دایمنشن مشتری باید برای هر مشتری یک رکورد باشد. برای حذف رکوردهای تکراری از ستون کدملی می توانیم استفاده کنیم. برای این کار ستون کد ملی در کویری FlatFile(2) را انتخاب کرده و کلیک راست نموده بر روی گزینه Remove Duplicate  را انتخاب می کنیم تا مشتری های تکراری حذف شود. سپس برای ایجاد کد مشتری از منوی Add Column گزینه Index Column گزینه From 1 را انتخاب می کنیم تا برای هر مشتری یک کد ایجاد شود. نام ستون جدید را کد مشتری می گذاریم.

حال کویری FlatFile را انتخاب کرده از منوی Merge Queries گزینه Merge Queries را انتخاب میکنیم. از کویری FlatFile ستون کد ملی و از FlatFile(2) نیز کد ملی را انتخاب میکنیم. 

پس از ادغام دو کویری در خروجی از ستون آخر که نام FlatFile(2) دارد بر روی ایکون دو فلش برعکس کلیک کرده و ستون کد مشتری را انتخاب می کنیم.

پس از آن در کویری FlatFile که در واقع همان جدول فکت است می توانیم ستونهای مرتبط با مشترر را بغیر از ستون کد مشتری حذف کنیم. در نهایت نام کویری FlatFile را به Fact و نام کویری FlatFile(2) را به DimCustomer تغییر می دهیم. خروچی به صورت زیر خواهد بود.

در نهایت پس از اعمال تغییرات در پاور کویری، پنجره پاور کویری را بسته و در محیط اصلی نرم افزار در قسمت Model ارتباط بین ستونهای کد مشتری جدول فکت و دایمنشن را برقرار می کنیم.


پایان