مقدمه بر جدوال حقایق (Facts Table) در انباره داده
در ادامه مباحث مربوط به انبار داده، یکی دیگر از مفاهیم انبار داده را بررسی می کنیم. جدول حقایق جدولی است که دربردارنده واقعیت عددی (measure یا معیار) مورد علاقه است. برای مثال مقدار فروش چنین واقعیتی است که یکی از معیارهای مورد علاقه در فروشگاه است. یک Fact Table شامل مقادیری عددی است که به وسیله ی اندازه گیری های عملیاتی تولید شده است. علاوه بر این هر fact table شامل همه ی کلیدهای خارجی مربوط به ابعاد مرتبط نیز می باشد
سه نوع از Fact ها یا حقایق وجود دارد:
- Additive – جمع پذیر: این دسته fact هایی هستند که می توان آنها را در همه ابعاد موجود در fact table تجمیع نمود، یعنی قابلیت جمع شوندگی دارد
- Semi-Additive – نیمه جمع پذیر: این نوع، fact هایی هستند که برای بعضی از بعدهای fact table قابل جمع شوندگی دارند و برای بقیه ابعاد این جدول قابل جمع شوندگی ندارند. به عبارتی این fact ها مقادیری هستند که جمع شوندگی آنها تنها بر روی بعضی از ابعاد مرتبط با آن Fact معنادار است.
- Non-Additive جمع ناپذیر: این دسته fact هایی هستند که برای هیچ کدام از بعدهای موجود در fact table قابل جمع زدن نیستند. برخی مقادیر نیز به طور کامل در هیچ یک از ابعاد قابلیت جمع پذیری ندارند. مانند نسبت ها که در هیچ بعدی نه زمان، نه مشتری و نه … قابلبت جمع پذیری ندارد. مثلا در نظر بگیرید نسبت جاری ( نسبت جمع دارایی های جاری به جمع بدهی های جاری) در سال ۱۳۹۳ چطور بتواند با نسبت جاری در سال ۱۳۹۴ جمع شود و مفهوم نسبت جاری در دوسال ۱۳۹۳ و ۱۳۹۴ را داشته باشد؟
جمع پذیری از این جهت مهم است که اطلاعات fact table معمولا بصورت تعداد زیادی از سطرها واکشی می شوند و باید عملیاتی مانند جمع روی آنها اعمال گردد.
برای این که از سردرگمی خارج شویم بهتر است برای هر کدام یک مثال بزنیم: در اولین مثال فرض کنیم شما یک فروشنده هستید و یک جدول fact به صورت زیر دارید:
تاریخ روز |
فروشگاه |
محصول |
مقدار فروش |
هدف این جدول این است که مقدار فروش را برای هر محصول در هر فروشگاه به صورت روزانه ثبت کند. fact در جدول بالا، “مقدار فروش” است. در این مورد مقدار فروش یک fact جمع پذیر است زیرا می توانید این fact را در با در نظر گرفتن هر کدام از سه بعد دیگری که در جدول وجود دارد (یعنی: تاریخ، فروشگاه و محصول) جمع بزنید. یعنی مقدار فروش بر روی تمامی این ابعاد جمع پذیر است و جمع آنها معنادار است. به عنوان نمونه جمع مقادیر فروش روزهای یک هفته برابر با مقدار فروش در هفته است.
حالا فرض کنید یک بانک را فرض کنید، این بانک یک جدول fact به صورت زیر دارد:
تاریخ روز |
حساب |
موجودی فعلی |
سود سپرده |
هدف این جدول ثبت موجودی فعلی برای هر حساب و همچنین سود سپرده در پایان روز است. “موجودی فعلی” و “سود”، fact های جدول ما هستند. موجودی فعلی یک fact نیمه جمع پذیر است. چرا؟
آیا درست است که موجودی فعلی در پایان هر روز هفته را با هم جمع کنیم تا موجودی فعلی در پایان هفته به دست بیاید؟
مسلم است که نه. پس چنین جمع زدنی اطلاعات مفیدی به ما نمی دهد. زیرا این یک مقدار از نوع Last Valued است و آخرین مقدار را همواره در خود نگه می دارد بنابراین در بازه های زمانی میانی بی معنا خواهد بود. پس موجودی فعلی حساب روی بعد تاریخ یک fact تجمیع نیست.
آیا درست است که موجودی فعلی را برای همه حساب ها را با هم جمع بزنیم تا موجودی فعلی بانک بدست بیاید؟
بله همین طور است. تجمیع موجودی حساب بر روی حساب معنادار است به عنوان مثال مجموع موجودی کل حساب های بانک، مفهومی منطقی و قابل درک و پذیرش است بنابراین موجودی فعلی روی بعد حساب یک fact جمع پذیر است.
پس با توجه به تعریف، موجودی فعلی یک fact نیمه جمع پذیر است به این دلیل که روی بعضی از ابعاد جدول fact، جمع شونده و روی بعضی دیگر از ابعاد قابلیت جمع شوندگی ندارد.
انواع جدول fact
بر اساس دسته بندی بالا دو نوع جدول fact داریم:
- Cumulative fact table – جدول fact افزایشی: این نوع از جدول fact آن چه در گذشت زمان اتفاق می افتد را نشان می دهد. برای مثال این جدول fact فروش کل را روی بعدهای محصول، فروشگاه و تاریخ روز نشان می دهد. Fact ها در این نوع از جدول fact اکثرا fact های جمع پذیر هستند. مثال اول یک جدول fact افزایشی است.
- Snapshot یا لحظه ای: این نوع از جدول fact وضعیت چیزها را در لحظه ای از زمان نشان می دهد و معمولا دربردارنده fact های جمع پذیر یا جمع ناپذیر است. مثال دوم که موجودی حساب و سود سپرده fact های آن بودند، یک جدول fact لحظه ای است.