جهت روابط در Power BI

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

بیایید گام به گام با هم جلو برویم. اگر با SQL Server آشنایی دارید و به پایگاه داده AdventureWorksDW دسترسی دارید جداول DimProduct ،DimCustomer FactInternetSales (جداول کالا، مشتری و فروش) را در مدل خود بارگذاری کنید. این جداول پس از بارگذاری به خاطر سادگی به Product ،Customer و Sales تغییر نام داده شدند. حال به قسمت روابط در Power BI بروید و روابط را مشاهده کنید. همان طور که در تصویر قابل مشاهده است ۳ جدول از طریق این روابط با یکدیگر ارتباط برقرار کرده اند.

به سادگی قابل مشاهده است که جهت روابط از سمت یک به سمت چند است. اگر با روابط یک به چند آشنایی ندارید باید بدانید نحوه شناسایی سمت یک و چند به این نحو است که به طور مثال در جدول کالا یک ردیف مربوط به کالای X و ویژگی های آن وجود دارد اما همین کالای X در چندین ردیف جدول فروش دیده می شود پس کالا سمت یک رابطه و فروش سمت چند رابطه است. همین طور در مورد مشتری هر ردیف از جدول مشتری بیانگر یک مشتری است ولی هر کدام از این مشتریان می توانند چندین بار خرید کنند و در جدول خرید تکرار شوند لذا مشتری سمت یک رابطه و فروش سمت چند رابطه است.

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

Direction_of_Relationship_image1

جهت روابط

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

Direction_of_relationship_image2

این گزارش قابل دستیابی است چرا که جهت رابطه از سمت مشتری (سمت یک) به سمت فروش (سمت چند) است و هر ویژگی جدول مشتری می تواند اعداد و ارقام جدول فروش را فیلتر کند. پس اگر یک مدل سازی خوب انجام داده باشید می توانید Fact را بر اساس Dimension ها فیلتر کنید.

 

فیلتر بر خلاف جهت

تمام مطالبی که گفته شد در مورد رفتار طبیعی روابط در Power BI بود. حال فرض کنید بخواهیم فیلتری بر خلاف جهت رابطه انجام دهیم. فرض کنید می خواهیم گزارش تعداد کالا های فروش رفته را بر اساس مدرک تحصیلی افراد را تهیه کنیم. برای تهیه این گزارش مدرک تحصیلی (EnglishEducation) را از جدول مشتری (Customer) و همچنین کلید جدول کالا (ProductKey) را انتخاب نموده و تابع تجمیعی را از حالت Don’t Summarize که به صورت پیش فرض قرار گرفته است به COUNT تغییر می دهیم.

 

Direction_of_relationship_image3

 

در واقع انتظار ما از این گزارش این بود که تعداد کالا ها را بر اساس انواع مختلف مدرک تحصیلی مشاهده کنیم، اما آن چه مشاهده می کنیم اعداد یکسان برای همه گروه های تحصیلی است. در واقع جدول مشتری قادر به فیلتر کردن جدول کالا نبوده است. بار دیگر به تصویر جداول و روابط بین آن ها دقت کنید. جدول مشتری (Customer) بر اساس جهت رابطه جدول فروش (Sales) را فیلتر می کند، اما این فیلتر قادر نیست به جدول کالا (Product) انتشار یابد چرا که جهت رابطه از سمت جدول کالا به سمت جدول فروش است نه بر عکس.

 

Direction_of_Relationships_image4

 

پس همان طور که مشاهده می کنید میزان فروش یا هر اطلاعاتی از جدول فروش می توانند بر اساس ویژگی های جدول کالا یا مشتری فیلتر شوند چرا که سمت رابطه از جدول مشتری و جدول کالا به سمت جدول فروش است اما حرکت خلاف این جهت ها امکان پذیر نمی باشد.

روابط دو طرفه

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

به منظور دستیابی به راه حل مورد نظر می توانیم از Bi-Directional filtering یا رابطه دو طرفه استفاده کنیم. اما مراقب باشید که همیشه از این ترفند استفاده نکنید. روابط دو طرفه باعث کاهش در عملکرد می شوند و گاهی باعث ایجاد ابهام در مدل می شوند که در مطالب آینده به آن خواهیم پرداخت. حال صرفنظر از مشکلات بالقوه بر روی رابطه بین جداول کالا و فروش (رابطه ای که فیلتر در آن قابل انتشار نبود) دو بار کلیک کنید و حالت رابطه را از Single به Bi-directional تغییر دهید.

 

Direction_of_relationships_image5

حال به گزارش خود نگاهی بیندازید. اعداد در گزارش تغییر کرده اند. در واقع ۶۰۶ جمع کل کالا ها بود که برای همه گروه های تحصیلی نمایش داده می شد .

Direction_of_relationships_image6

 

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

 

Bi-directional-filtering-image1

 

عملکرد رابطه دو طرفه

شاید با خود فکر کنید رابطه دو طرفه یک ویژگی بسیار قدرتمند است. پس چرا همیشه از آن استفاده نمی کنیم؟ یکی از دلایل مهم عدم استفاده از این روابط کاهش چشمگیر در عملکرد مدل است و گاهی باعث ایجاد حلقه و ابهام در مدل می شود. پس راه حل چیست؟!

روش اول: تغییر در دیتا مدل و طراحی مناسب

طراحی مناسب مدل  تا جای ممکن ما را از استفاده از رابطه ی دو طرفه بی نیاز می کند. اگر خیلی از سناریو های شما نیاز به رابطه دو طرفه دارد مدل خود را خوب طراحی نکرده اید.

 

روش دوم: استفاده از تابع CROSSFILTER

اگر مدل خود را به خوبی طراحی کردید و باز هم به آنچه می خواهید نمی رسید می توانید از تابع CROSSFILTER به جای دو طرفه کردن رابطه استفاده کنید. در واقع تابع CROSSFILTER همان عمل دو طرفه کردن رابطه را انجام می دهد اما فقط و فقط در طی یک محاسبه خاص. در واقع مدل شما همیشه عملکرد طبیعی و خوب خود را دارد و فقط و فقط در خلال محاسبه یک فرمول خاص دو طرفه می شود. برای این منظور رابطه ی خود را یک طرفه کنید یک new measure بسازید و از کد زیر استفاده کنید. خواهید دید که اعداد دقیقا مشابه اعدادی است که با دو طرفه کردن رابطه حاصل شد.

CountOfProduct = CALCULATE(COUNT(‘Product’[ProductKey]),

                                           CROSSFILTER(‘Product’[ProductKey],

                                                                   Sales[ProductKey],

                                                                   Both)

 

جمع بندی

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

 

 

حسین وثوقی

حسین وثوقی

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

دیدگاه بگذارید

avatar
  عضویت  
به دوستتان خبر دهید.