فهرست
دیتامدلینگ (Data Modeling)
دیتا مدل به یک یا چند جدول گفته میشود که از طریق ارتباطاتی به یکدیگر متصل شدهاند. منظور از ارتباط(Relationship) چیست؟
زمانی که دو جدول از طریق یک ستون مشابه از نظر تایپ و مقادیر به همدیگر متصل شوند، دو جدول با یکدیگر ارتباط پیدا میکنند. ارتباط بین دو جدول موجب میشود فیلتر یکی از آنها با توجه به جهت رابطه بر دیگری نیز تاثیر بگذارد.
ارتباط بین جدول مختلف ممکن است بصورتهای مختلفی باشد مانند آنکه هر جدول با فیلد مشخصی به جدول دیگری متصل شود ولی نوع ارتباطی که بین جداول در پاوربیآی وجود دارد معمولا از نوع Star Schema است.
در مدل Star Schema یک جدول وجود دارد به نام Fact که در آن تمام انواع دادههای به اصطلاح تراکنشی ثبت و ضبط میشود. جدولهای دیگر Dimension گفته میشوند که معمولا اطلاعات تکمیلی فیلدهای مربوط به جدول Fact در آنها ذخیر میشود. جداول Dimension از طریق فیلد یا ستونی به نام Primary Key به جدول Fact متصل میشوند.
تشخیص جداول Fact و Dimension از ابتدا مشخص نیست و در حقیقت بعد از ارتباط بین جداول مشخص میشود.
شکل زیر مدل Star Schema را توضیح میدهد.
پاوربیآی در قسمت مدل Model این امکان را میدهد تا دیاگرام مربوط به دیتا مدل دادههای خود را ببینید.
در این قسمت شما میتوانید ارتباط بین جداول مختلف را و نوع ارتباط آنها ببینید و اگر لازم است تغییر دهید. پاوربیآی بعد از اینکه دادهها لود میشود بصورت خودکار و براساس نوع فیلد جداول مختلف را به یکدیگر متصل میسازد. برای اینکه این قابلیت پاوربیآی که بطورر پیشفرض وجود دارد را بردارید میتوانید از طریق مسیر زیر عمل کنید:
File -> Option and Setting -> Options -> Current File -> Data Load -> Relationships -> Autodetect New Relationship After Data Is Loaded
اگر پاوربیآی بطور خودکار روابط را تشخیص داده باشد و بخواهید آن را تغییر دهید و یا اینکه خودتان بخواهید روابط بین جداول را تعیین کنید می توانید از دکمهی Manage Relationship در نوار ابزار بالای صفحه این کارها را انجام دهید.
زمانی که Manage Relationship را میزنید، پنجرهای باز میشود که نام جداول و ارتباط بین آنها مشخص است. اگر ارتباطی از قبل تعیین نشده باشد در این صورت این پنجره خالی خواهد بود.
در صورتی که ارتباطی بین دو جدول برقرار باشد نام این دو جدول روبروی یکدیگر در دو ستون From و To مشخص است. جدولی که ارتباط از آن شروع شده است در From قرار میگیرد و جدول دیگر در To. ستون Active مشخص میکنند که آیا ارتباط برقرار شده فعال هست یا نه. یعنی آیا فیلترینگ بر روی جدول مبدا بر دیگری تاثیر میگذارد با خیر. شاید با خود بگویید چرا باید ارتباط غیرفعال بین دو جدول برقرار باشد چه فایدهای دارد؟
در این صورت باید بدانید که برعکس Sql در پاوربیآی امکان ارتباط بین یک جدول با خودش وجود ندارد. در حقیقت بدلیل شمای ستارهای که در پاوربیآی رعایت میشود نمیتوان هیچ ارتباط لوپی در آن تشکیل داد.
مثلا اگر جدول ۱ به جدول تاریخ متصل باشد و ارتباط فعال داشته باشد، جدول ۲ نیز با جدول تاریخ ارتباط فعال داشته باشد، اگر امکان این وجود داشته باشد که دو جدول ۱ و ۲ را به همدیگر کنیم، در صورت تعریف این رابطه، ارتباط غیرفعال خواهد بود. زیرا هر دوی این جداول با جدول تاریخ ارتباط فعال دارند. در صورتی که بخواهید ارتباط بین جدول ۱ و ۲ را فعال کنید باید رابطهی یکی از آنها را با جدول تاریخ غیرفعال کنید تا از ایجاد لوپ رابطه بین جداول جلوگیری شود. حال چرا گاهی این رابطهی غیرفعال را تعریف میکنیم؟ زیرا در زبان تحلیلی پاوربیآی یعنی DAX این امکان وجود دارد که از طریق رابطهی غیرفعال اطلاعات لازم را بین دو جدول ردوبدل کرد.
در پایین صفحهی Manage Relationship چهار دکمه میبینید؛ New برای ایجاد ارتباط جدید، Autodetect برای روشن شدن تشخیص خودکار پاوربیآی، Edit برای ایجاد تغییر بر روابط از قبل تعریف شده و Delete برای پاک کردن ارتباط بین دو جدول است.
در صورت تعریف یا ویرایش یک رابطه پنجرهای بدین صورت باز میشود:
در این پنجرهها نام دو جدولی که میخواهید بهم متصل کنید را در دو باکس بالای هر Preview مشخص کنید. سپس فیلد موردنظر که ارتباط از طریق آن برقرار میشود را روی هر دو جدول انتخاب کنید.
بعنوان مثال شمارهی کارمندی کارمندان یک سازمان را در پورتال حضور و غیاب وجود دارد، اطلاعات فردی هر کارمند نیز در جدول دیگری وجود دارد. این دو جدول از طریق شماره کارمندی که در هر دو جدول یکسان هستند به یکدیگر متصل خواهند شد.
بعد از مشخص کردن جداول و Primary Key آنها، باید چند چیز دیگر را نیز تعیین کنید:
۱- نوع ارتباط بین جدولها (Cardinality) : جدولها به چند طریق به یکدیگر متصل میشوند؛ یک به یک (One to One)، یک به چند (One to Many) و چند به چند(Many to Many).
ارتباط یک به یک؛ یعنی به ازای یک مقدار، یک ردیف در جدول مبدا و یک ردیف در جدول مقصد وجود دارد.
ارتباط یک به چند؛ یعنی به ازای یک مقدار، یک ردیف در جدول مبدا و چند ردیف در جدول مقصد وجود دارد.
ارتباط چند به چند؛ یعنی به ازای یک مقدار چند ردیف در جدول مبدا و چند ردیف در جدول مقصد وجود دارد.
نکتهای که در پاوربیآی دربارهی این جداول وجود دارد این است که امکان برقراری تمام این سه نوع رابطه امکانپذیر است، اما در پاروبیآی دسکتاپ ریپورت سرور رابطهی Many to Many اگر تعریف کنید، زمان بارگذاری بر روی ریپورت سرور این رابطه شناسایی نمیشود و در نتیجه گزارش شما ناقص نمایش داده میشود. پس اگر میخواهید گزارشی را روی ریپورت سرور بارگذاری کنید باید توجه داشته باشید که چنین رابطهای در مدل خود نداشته باشید.
در نهایت در مدل نهایی برای نشان نوع ارتباط جدولها از 1 و * استفاده میشود. ۱ برای جدولی که یک ردیف برای یک مقدار دارد و * برای جدولی که چند ردیف به ازای یک مقدار دارد.
۲- سمت ارتباط جدولها (Cross Filter Direction): بدین معنی که آیا دو جدول بتوانند بر یکدیگر تاثیر بگذارد یا اینکه فقط جدول مبدا بتواند جدول مقصد را فیلتر کند.
در صورتی که یکی از جداول بر دیگری تاثیر بگذارد رابطه یکطرفه است(Single). مثلا تغییر و فیلتر بر روی جدول حضور و غیاب بر روی جدول اطلاعات فردی کارمندان تغییری یا فیلتری را اعمال نکند. در صورت فیلترینگ هردو بر یکدیگر تاثیرگذار باشد، در این صورت باید سمت ارتباط دوطرفه تعیین شود (Both).
در مدل نهایی این ارتباط یکطرفه یا دوطرفه را بصورت فلشهایی بروی خط اتصال بین دو جدول مشاهده میکنید.
۳- فعال یا غیرفعال کردن ارتباط (Make this relationship active): همانطور که توضیح داده شد مشا میتوانید ارتباط بین جداول را غیرفعال کنید. در این صورت باید تیک این قسمت را بردارید. در صورتی که تیک را برندارید و ارتباط جدید تعریف شده باعث ایجاد لوپ در مدل بشود پاوربیآی به شما ارور خواهد داد.
ارتباط غیرفعال بین دو جدول در دیاگرام نهایی بصورت خطچین مشخص میشود.
بهبود عملکرد پاوربیآی
با توجه به محدودیتهایی که دربارهی مدل در پاوربیآی اشاره شد میتوان دو کار انجام داد تا بر این محدودیتها فائق آمد.
برای استفاده از ارتباط غیرفعال دو جدول میتوانید از یک تابع DAX به نام USERELATIONSHIP کمک بگیرید.
برای آنکه بتوانید از ایجاد لوپ استفاده کنید، میتوانید جدول Dimension را کپی کنید و دو تا از یک جدول داشته باشید تا بتوانید روابط را فعال کنید.
و در نهایت برای آنکه بتوانید رابطهی Many to Many داشته باشید میتوانید یکی از این جداول را انتخاب کنید و ردیفهای Duplicate را حذف کنید. در این صورت یک جدول با ردیفهای یکتا در یک فیلد دارید که از طریق آن میتوانید ارتباط یک به چند برقرار کنید.
با توجه به مطالبی که تا به الان گفته شد برای آنکه بتوانید یک دیتامدل خوب طراحی کنید بهتر است که این ویژگیها را در مدل خود رعایت کنید:
- استفاده از Star Schema
- جداول Dimension مشترک
- استفاده از روابط یک طرفه
- استفاده از روابط 1 to Many
لازم به ذکر است که اگر دادههای شما حجیم باشد، سرعت پاوربیآی برای لود کردن در نسخهی غیرپولی کم میشود. به همین دلیل بهتر است که نکاتی در پاکسازی و طراحی مدل و تحلیل و ایجاد داشبورد رعایت کنید.
- حذف ستونهای غیرضروی
- حذف سطرهای اضافی
- تقسیمبندی بر اساس یک نوع داده یا Entity
- فیلتر بر اساس زمان
- گروهبندی و خلاصه کردن داده
- درست بودن دیتاتایپها: پاوربیآی از انواع داده پشتیبانی میکند ولی تمام آنها را به عدد برمیگرداند . پردازش میکند. پس تا جایی که میتوانید دیتا تایپها را Integer در نظر بگیرید.
- استفاده از Custom Column در پاور کوئری بجای استفاده از Calculated Column در Dax
- غیرفعال کردن Query Load