: شما در اینجا هستید
کیوب , Cube , Measure , میجر , Calculated , , OLAP , SSAS , SSDT , Aggrigate , Process , پراسس

همانطور که میدانید، Calculated Measure ها مانند Measure های عادی نیستند و مقدار آن ها هنگام Process کردن کیوب از پیش محاسبه و ذخیره نمیشود، بلکه با توجه به فرمول تعریف شده برای آن ها در زمان درخواست محاسبه و نمایش داده میشوند، حالا فرض کنید ما کیوب ای داریم که دارای یک Dimension به اسم City است، کارفرما از ما میخواهد یکی از Measure های کیوب مان (مثلا Salary) را در صورتی که CityCD = ‘X’ باشد در 3 و در غیر این صورت در 2.5 ضرب کنیم، با فرض اینکه امکان اعمال تغییرات در Data Source را نداریم و باید این موضوع را از لایه ی SSAS حل کنیم، چه کاری باید انجام دهیم؟

به نظر میرسد اگر Calculated Measure ای با فرمول MDX بسازیم که با یک IF این مساله را کنترل میکند، همه چیز درست باشد، اینطور نیست ؟ خیر، اینطور نیست، در این حالت Calculated Measure ما تنها در صورتی درست است که موقع Query گرفتن از کیوب حتما از Dimension با نام City هم در Query استفاده کرده باشیم (تحلیل کنید چرا؟)

راه حل چیست؟ یک راه این است که از Keyword ای با عنوان EXIST در فرمول MDX خود استفاده کنیم و کیوب را مجبور کنیم که در هر Query که از این Measure استفاده میکند، Dimension مورد نیاز خودش را یعنی City دخیل کند، اما اگر اینکار باعث سنگین شدنQuery هایی که از این Measure استفاده میکنند شد چه ؟

یک راه حل دیگر هم وجود دارد و آن، جایگزین کردن Fact Table مربوطه در DSV با یک View است که این Measure در آن پیاده سازی شده است، این کار باعث میشود، محاسبات هنگام Process Cube انجام شده و این Measure مانند Measure های عادی عمل کند. برای اینکار SSDT را اجرا کنید و از DSV مربوطه روی Fact Table کلیک راست کرده و گزینه ی Replace Table => With New Named Query… را کلیک کنید و در پنجره ی باز شده Query مناسب را (مانند نوشتن یک View) بنویسید و کار تمام است، الان میتوانید در کیوب خود Measure ای که میخواهید را اضافه کنید.

برای آشنایی بیشتر با این مطلب اینجا را کلیک نمایید

Last Updated On مارس 19, 2018
Leave Comment