مفهوم SLOWLY CHANGING DIMENSION یا الگوی طراحی جداول ابعاد

داده های موجود در دایمنشن ها معمولا استاتیک می باشند ولی ممکن است حالتی پیش بیاید که به آرامی تغییر کنند و این تغییرات قابل پیش بینی نباشند. مثلا ممکن است شما قصد تولید و پیاده سازی یک سیستم داشبورد مدیریتی بانکی را داشته باشید. فرض کنید شعبه ای داریم که نام آن دارد تغییر می کند. باید چکار کنیم؟

 

به منظور مشاوره رایگان در خصوص مباحث مربوط به هوش تجاری، و رزور دوره های خصوصی با قیمت ارزانتر از دوره های عمومی شرکت ها با آی دی تلگرام research_moghimi@ ارتباط برقرار کنید. یا با شماره تلفن ۰۹۳۶۷۹۳۸۰۱۸ تماس حاصل فرمایید. همچنین لیسن قیمت برخی از دوره ها در اینجا وجود دارد.

بیشتر اوقات مقادیر موجود در جداول ابعاد (Dimensions) ثابت هستند و تغییری در آنها رخ نمی‌دهد. به عنوان مثال تغییر در نام ماه های سال تقریبا غیر ممکن است. اما برخی از اطلاعات قابل تغییر هستند، مانند نام یا نام خانوادگی و آدرس افراد. جهت شرح چنین شرایطی از اصطلاح SCD یا slowly changing dimension استفاده میشود. SCD الگوی طراحی جداول ابعاد است.

در برخی از گزارشات، زمانی که چنین تغییری در داده رخ دهد، می بایست تغییرات را به صورتی اعمال کرد که تاریخچه تغییرات آن مشخص باشد. به طور مثال در نظر بگیرید که در گزارشی میزان فروش شخصی ثبت شده باشد، این شخص پس از مدتی نام خود را تغییر می‌دهد، اگر نام شخص را بروزرسانی کنیم تمامی اطلاعات قدیمی با نام جدید نمایش داده میشود که در این صورت امکان رسیدن به نام قدیم از بین می‌رود.

SCD یک مفهوم جدید نیست بلکه نوع دیگری از طراحی می‌باشد که برای کمک به حل چنین مشکلاتی مفید واقع می‌شود.

بروزرسانی Dimension موارد زیر را شامل می‌شود:

پیگیری تاریخچه

انجام بروزرسانی

تشخیص رکوردهای جدید

مدیریت surrogate keys

 

چنانچه با یک Dimension کوچک مواجه هستید (با مقدار هزاران رکورد یا کمتر، که با صدها هزار رکورد یا بیشتر ضدیت دارد)،  می‌توانید از تبدیل “Slowly Changing Dimension” که بصورت Built-in در SSIS موجود است، استفاده نمائید.

سه نوع طراحی برای SCD وجود دارد.

نوع صفرم: هیچ تغییراتی روی داده های دایمنشن رخ نمی دهد.

نوع اول: SCD  داده ها روی داده های قبلی جایگزین می شوند.

نوع دوم : تاریخ شروع و تاریخ پایان به همراه یک کلید اصلی جدید جهت ثبت تاریخچه تغییرات به جدول اضافه می‌کنیم.

به منظور ثبت تغییرات، جدول سمت چپ به جدول سمت راست تغییر می‌کند و توسط فرآیند ETL داده‌ها به شکل نمایش داده می شود

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

به هر روی با آنکه این تبدیل چندین ویژگی محدودکننده Performance دارد، اغلب کارآمدتر از پروسسه هایی که توسط خودتان ایجاد می‌شود. در واقع فرآیند بارگذاری در جداول Dimension با مقایسه داده‌ها بین مبداء و مقصد انجام می‌شود. به طور معمول مقایسه روی یک ورژن جدید و یا مجموعه ای از سطرهای جدید یک جدول با مجموعه داده‌های موجود در جدول متناظرش صورت می‌گیرد. پس از تشخیص چگونگی تغییر در داده ها، یک سری عملیات درج و بروزرسانی انجام می‌شود. شکل زیر نمونه ای از پردازش سریع در Dimension را نمایش می‌دهد؛ که شامل مراحل اساسی زیر است:

منبع فوقانی سمت چپ، رکوردها را در یک SSIS از یک سیستم مبداء (یا یک سیستم میانی) به شکل Pull دریافت می‌کند. منبع فوقانی سمت راست، داده‌ها را از خود جدول Dimension به شکل Pull دریافت می‌کند.

با استفاده از Merge Join رکوردها از طریق Source Key شان مقایسه می‌شوند. (در شکل بعدی جزئیات این مقایسه نمایش داده شده است.)

با استفاده از یک Conditional Spilt داده‌ها ارزیابی می‌شوند؛ سطرها یا مستقیماً در جدول Dimension درج می‌شوند (منبع تحتانی سمت چپ) و یا در یک جدول عملیاتی (منبع تحتانی سمت راست) جهت انجام بروزرسانی درج می‌شوند.

در گام پایانی (که نمایش داده نشده) مجموعه ای از بروزرسانی بین جدول عملیاتی و جدول Dimension صورت می‌گیرد.

همین کار را می توان به سادگی در SSIS انجام داد.

با Merge Join ارتباطی بین رکوردهای مبداء و رکوردهای مقصد برقرار می‌شود. (در این مثال “CustomerAlternateKey”). هنگامی که از این دیدگاه استفاده می‌کنید، خاطر جمع شوید که نوع Join با مقدار “Left outer join” تنظیم شده است؛ بدین ترتیب قادر هستید تا رکوردهای جدید را از مبداء تشخیص دهید؛ از آنجا که هنوز در جدول Dimension قرار نگرفته اند.

گام پایانی به منظور تشخیص اینکه آیا رکورد، جدید یا تغییر یافته است (یا بلاتکلیف است)، مقایسه داده هاست. شکل زیر نمایش می‌دهد چگونه این ارزیابی با استفاده از تبدیل “Conditional Spilt” صورت می‌گیرد.

Conditional Spilt مستقیماً با استفاده از یک Adapter تعریف شده روی مقصد یا یک جدول کاری بروزرسانی که از یک Adapter تعریف شده روی مقصد استفاده می‌کند؛ توسط مجموعه دستور Update زیر، رکوردها را در جدول Dimension قرار می‌دهد. دستور Update زیر مستقیماً با استفاده از روش Join روی جدول Dimension و جدول کاری، مجموعه ای را بصورت انبوه بروزرسانی می‌کند.

به صورت خلاصه در جدول زیر می توان موارد را مشاهده کرد :

Slowly changing dimensions Action Effects on facts

Type 1

Overwrite attribute value in dimension table Restate history
Type 2 Insert new row in dimension table Preserves unlimited history
Type 3 Create a pair of attributes to keep previous and current values. No new rows are added.

Ability to analyze facts recorded before and after change happened using old value and new value.

 

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

به پژوهشیار خوش آمدید. نیاز به مشاوره آنلاین دارید؟ ما همیشه آنلاین هستیم پس کلیک کنید