جهت روابط در Power BI
رفتار روابط در Power BI با سایر سیستم های رابطه ای متفاوت است. در بیشتر سیستم ها، روابط وجود دارند اما دارای جهت نمی باشند اما در Power BI روابط دارای جهت هستند. جهت روابط نقش اساسی در نحوه ی کارکرد فیلترها ایفا می کند. آگاهی از نحوه ی رفتار روابط و جهت آن ها یک گام اساسی در مدل سازی داده ایفا می کند.
بیایید گام به گام با هم جلو برویم. اگر با SQL Server آشنایی دارید و به پایگاه داده AdventureWorksDW دسترسی دارید جداول DimProduct ،DimCustomer FactInternetSales (جداول کالا، مشتری و فروش) را در مدل خود بارگذاری کنید. این جداول پس از بارگذاری به خاطر سادگی به Product ،Customer و Sales تغییر نام داده شدند. حال به قسمت روابط در Power BI بروید و روابط را مشاهده کنید. همان طور که در تصویر قابل مشاهده است 3 جدول از طریق این روابط با یکدیگر ارتباط برقرار کرده اند.
به سادگی قابل مشاهده است که جهت روابط از سمت یک به سمت چند است. اگر با روابط یک به چند آشنایی ندارید باید بدانید نحوه شناسایی سمت یک و چند به این نحو است که به طور مثال در جدول کالا یک ردیف مربوط به کالای X و ویژگی های آن وجود دارد اما همین کالای X در چندین ردیف جدول فروش دیده می شود پس کالا سمت یک رابطه و فروش سمت چند رابطه است. همین طور در مورد مشتری هر ردیف از جدول مشتری بیانگر یک مشتری است ولی هر کدام از این مشتریان می توانند چندین بار خرید کنند و در جدول خرید تکرار شوند لذا مشتری سمت یک رابطه و فروش سمت چند رابطه است.
توجه داشته باشید برای ایجاد یک رابطه ی یک به چند بین دو جدول، باید از هر یک از دو جدول یک ستون را به Power BI معرفی کنید و حتما و حتما یکی از این ستون ها باید مقادیر یکتا داشته باشند، در غیر اینصورت با خطا مواجه خواهید شد.
جهت روابط
جهت روابط به چه معنی است؟ جهت روابط به معنی فیلتر کردن است. در واقع این جهت به شما می گوید که Power BI چگونه داده های شما را فیلتر می کند. همان طور که در تصویر بالا مشاهده نمودید جهت رابطه از سمت جدول مشتری به سمت جدول فروش است. این به این معنی است که هر ویژگی از جدول مشتری می تواند داده های جدول فروش را فیلتر کند. در واقع شما به راحتی می توانید از میزان فروش بر اساس ویژگی های مشتری گزارش تهیه کنید. به طور مثال شما می توانید گزارش میزان فروش بر اساس سطح تحصیلات مشتری به راحتی تهیه کنید.
این گزارش قابل دستیابی است چرا که جهت رابطه از سمت مشتری (سمت یک) به سمت فروش (سمت چند) است و هر ویژگی جدول مشتری می تواند اعداد و ارقام جدول فروش را فیلتر کند. پس اگر یک مدل سازی خوب انجام داده باشید می توانید Fact را بر اساس Dimension ها فیلتر کنید.
فیلتر بر خلاف جهت
تمام مطالبی که گفته شد در مورد رفتار طبیعی روابط در Power BI بود. حال فرض کنید بخواهیم فیلتری بر خلاف جهت رابطه انجام دهیم. فرض کنید می خواهیم گزارش تعداد کالا های فروش رفته را بر اساس مدرک تحصیلی افراد را تهیه کنیم. برای تهیه این گزارش مدرک تحصیلی (EnglishEducation) را از جدول مشتری (Customer) و همچنین کلید جدول کالا (ProductKey) را انتخاب نموده و تابع تجمیعی را از حالت Don’t Summarize که به صورت پیش فرض قرار گرفته است به COUNT تغییر می دهیم.
در واقع انتظار ما از این گزارش این بود که تعداد کالا ها را بر اساس انواع مختلف مدرک تحصیلی مشاهده کنیم، اما آن چه مشاهده می کنیم اعداد یکسان برای همه گروه های تحصیلی است. در واقع جدول مشتری قادر به فیلتر کردن جدول کالا نبوده است. بار دیگر به تصویر جداول و روابط بین آن ها دقت کنید. جدول مشتری (Customer) بر اساس جهت رابطه جدول فروش (Sales) را فیلتر می کند، اما این فیلتر قادر نیست به جدول کالا (Product) انتشار یابد چرا که جهت رابطه از سمت جدول کالا به سمت جدول فروش است نه بر عکس.
پس همان طور که مشاهده می کنید میزان فروش یا هر اطلاعاتی از جدول فروش می توانند بر اساس ویژگی های جدول کالا یا مشتری فیلتر شوند چرا که سمت رابطه از جدول مشتری و جدول کالا به سمت جدول فروش است اما حرکت خلاف این جهت ها امکان پذیر نمی باشد.
روابط دو طرفه
بار دیگر به مثال تعداد کالا بر اساس مدرک تحصیلی باز گردیم. مشکل آن جا بود که ما تعداد کالا ها را بر اساس مدرک تحصیلی از جدول مشتری فیلتر کردیم. فیلتر از جدول مشتری به جدول فروش انتشار یافت اما از جدول فروش به جدول کالا انتشار نمی یافت چرا که این فیلتر بر خلاف جهت رابطه بود.
به منظور دستیابی به راه حل مورد نظر می توانیم از Bi-Directional filtering یا رابطه دو طرفه استفاده کنیم. اما مراقب باشید که همیشه از این ترفند استفاده نکنید. روابط دو طرفه باعث کاهش در عملکرد می شوند و گاهی باعث ایجاد ابهام در مدل می شوند که در مطالب آینده به آن خواهیم پرداخت. حال صرفنظر از مشکلات بالقوه بر روی رابطه بین جداول کالا و فروش (رابطه ای که فیلتر در آن قابل انتشار نبود) دو بار کلیک کنید و حالت رابطه را از Single به Bi-directional تغییر دهید.
حال به گزارش خود نگاهی بیندازید. اعداد در گزارش تغییر کرده اند. در واقع 606 جمع کل کالا ها بود که برای همه گروه های تحصیلی نمایش داده می شد .
اما با دو طرفه کردن رابطه فیلتر از جدول فروش به جدول کالا انتشار یافت و اعداد را برش زد. نتایج پس از دو طرفه کردن رابطه در تصویر بالا قابل مشاهده است.
عملکرد رابطه دو طرفه
شاید با خود فکر کنید رابطه دو طرفه یک ویژگی بسیار قدرتمند است. پس چرا همیشه از آن استفاده نمی کنیم؟ یکی از دلایل مهم عدم استفاده از این روابط کاهش چشمگیر در عملکرد مدل است و گاهی باعث ایجاد حلقه و ابهام در مدل می شود. پس راه حل چیست؟!
روش اول: تغییر در دیتا مدل و طراحی مناسب
طراحی مناسب مدل تا جای ممکن ما را از استفاده از رابطه ی دو طرفه بی نیاز می کند. اگر خیلی از سناریو های شما نیاز به رابطه دو طرفه دارد مدل خود را خوب طراحی نکرده اید.
روش دوم: استفاده از تابع CROSSFILTER
اگر مدل خود را به خوبی طراحی کردید و باز هم به آنچه می خواهید نمی رسید می توانید از تابع CROSSFILTER به جای دو طرفه کردن رابطه استفاده کنید. در واقع تابع CROSSFILTER همان عمل دو طرفه کردن رابطه را انجام می دهد اما فقط و فقط در طی یک محاسبه خاص. در واقع مدل شما همیشه عملکرد طبیعی و خوب خود را دارد و فقط و فقط در خلال محاسبه یک فرمول خاص دو طرفه می شود. برای این منظور رابطه ی خود را یک طرفه کنید یک new measure بسازید و از کد زیر استفاده کنید. خواهید دید که اعداد دقیقا مشابه اعدادی است که با دو طرفه کردن رابطه حاصل شد.
CountOfProduct = CALCULATE(COUNT(‘Product’[ProductKey]),
CROSSFILTER(‘Product’[ProductKey],
Sales[ProductKey],
Both)
جمع بندی
جهت روابط از موضوعات مهم در مباحث مدل سازی در Power BI به شمار می رود. جهت رابطه به معنی مسیری است که فیلتر در جهت آن انتشار می یابد. رابطه یک طرفه یک جدول را براساس دیگری فیلتر می کند. اما گاهی اوقات نیاز است فیلتر بر خلاف جهت رابطه انجام شود و این جایی است که ویژگی دو طرفه کردن روابط به کمک ما می آید که البته برخورداری از این مزیت با کاهش در عملکرد همراه است. در مورد استفاده از روابط دو طرفه احتیاط کنید و بی دلیل از آن ها استفاده نکنید. ابتدا از مناسب بودن مدل خود اطمینان حاصل کنید و اگر به نتیجه مورد نظر نرسیدید از تابع CROSSFILTER استفاده کنید. تابعی که همان کار دو طرفه کردن روابط را انجام می دهد اما فقط و فقط در محاسبه مورد نیاز ما.
درباره حسین وثوقی
دانش آموخته مهندسی صنایع و مدیریت فناوری اطلاعات دانشگاه تهران، علاقه مند به تحلیل و ارائه راه حل برای مسائل و بهینه سازی راه حل ها هستم ...
نوشته های بیشتر از حسین وثوقیمطالب زیر را حتما بخوانید
-
داده های نمونه و تمرینی برای یادگیری پاور بی آی | Power BI
273 بازدید
-
تنظیم مقدار پیش فرض اسلایسر تاریخ در Power BI
168 بازدید
-
دومین مسابقه بزرگ Power BI ایران
318 بازدید
-
نمونه پروژه داده های اقتصادی با Power BI
707 بازدید
-
نمونه پروژه قند مواد غذایی با Power BI
806 بازدید
-
اولین مسابقه طراحی داشبورد با Power BI
1.37k بازدید
سلام. ممنون از مطالب سایتتون.
خوب توضیح داده شده. از یک آموزش ویدیویی دارم پیش میرم خیلی جاهایی که به مشکل میخورم از مطالب سایت شما استفاده میکنم و برام حل میشه.
خدا قوت
سلام
ممنون از لطفتون
خوشحالیم که مطالب سایت براتون مفید بوده
سلام.بعضي از عكس هاي مطلب لود نميشه
اصلاح شد. بررسی کنید.