یک نکته در مورد Referenced Relationship در Dimension Usage و گم شدن رکوردهای اطلاعاتی !

در رابطه ی Referenced Relationship یک Dimension واسط ارتباط بین جدول Fact و Dim اصلی مورد نظر شما می شود. 


مثلا حالتی را در نظر بگیرید که :

=================


مفروضات:

-----------

- جدول FACT شما فروش است، یک فیلد فروشنده دارد

- جدول فروشنده، Dimension شما است، در این جدول یک فیلد موقعیت جغرافیایی فروشنده وجود دارد که با Dimension موقعیت جغرافیایی در ارتباط است

- Dimension دیگری که جدول موقعیت های جغرافیایی است


* و هدف یافتن میزان فروش در هر منطقه ی فروشنده است


- ضمنا موقعیت جغرافیایی برخی فروشنده ها مشخص نیست، یعنی مقدار آن null است.


در این وضعیت در Cube مورد نظر خود در بخش Dimension Usage یک ارتباط از نوع Referenced Relationship تعریف می کنید (فرقی نمی کند که از نوع Materialized باشد یا نه). در این ارتباط Dimension فروشنده از نوع Intermediate معرفی می شود.


و اما مشکل:

با Deploy پروژه خواهید دید که رکوردهایی از نتیجه تمامی Query هایی که برروی Cube اجرا می کنید حذف می شود، خواه اینکه به Dimension موقعیت جغرافیایی اشاره کند و یا نه !


راه حل پیشنهادی:

از آنجاییکه این مساله ناشی از ارتباط inner join ی است که SSAS بین دو جدول Dimension برقرار می کند، بنابراین کنترل رفتاری آن به دست شما نیست. بنابراین بهتر است در اینگونه حالات مشکل را در سمت انبار داده خود حل نمایید. مثلا یک رکورد unknown در جدول موقعیت هایی جغرافیایی با مقدار null ایجاد کنید. 


جالب اینجاست که شرکت مایکروسافت این مساله را اشکال نمی داند و راه حل بالا را برای رفع مشکل پیشنهاد می کند.


https://social.msdn.microsoft.com/forums/sqlserver/en-US/7384db17-b0bd-45d4-87e5-48e60d84455e/materializing-a-reference-dimension-in-ssas