كيفية استبعاد عضو معين من مكالمة MDX التي تحصل على جميع أحفاد العضو في مستوى أعلى

StackOverflow https://stackoverflow.com/questions/148875

  •  02-07-2019
  •  | 
  •  

سؤال

في قاعدة بيانات OLAP التي أعمل معها، يوجد تسلسل هرمي "للموقع" يتكون من مستويات الشركة -> المنطقة -> المنطقة -> الموقع -> الغرفة.أنا أستخدم MDX التالي للحصول على جميع أحفاد عضو معين على مستوى الشركة.

DESCENDANTS([Location].[Test Company],[Location].[Site], SELF_AND_BEFORE)

لدي الآن متطلب لاستبعاد منطقة معينة تسمى "زائدة عن الحاجة" من التقرير.كيف يمكنني تغيير MDX أعلاه لاستبعاد هذه المنطقة بالذات (وجميع فروعها)؟أعلم أن هذه المنطقة ستسمى "زائدة عن الحاجة" ولكني لا أرغب في ترميز أي من أسماء المناطق الأخرى، حيث قد تتغير هذه الأسماء.

هل كانت مفيدة؟

المحلول

ستأخذ الدالة EXCEPT مجموعة وتزيل الأعضاء الذين لا تريدهم.في حالتك عليك أن تقول:

EXCEPT(
{DESCENDANTS([Location].[Test Company],[Location].[Site], SELF_AND_BEFORE)},
{DESCENDANTS([Location].[Whatever].[Redundant],[Location].[Site], SELF_AND_BEFORE)}
)

وهذا يعطيك كل شيء في المجموعة الأولى باستثناء ما ذكرته في الثانية.من الأسهل أن نفهم مثل هذا:

EXCEPT({the set i want}, {a set of members i dont want})

لا داعي للقلق بشأن الوسيطة الثالثة (الاختيارية): http://msdn.microsoft.com/en-us/library/ms144900.aspx

نصائح أخرى

عند إرجاع الأعضاء إلى التسلسل الهرمي الخاص بك، استخدم ببساطة "-" لاستبعاد العضو الذي لا تريده.هذه هي الطريقة التي أستبعد بها الأعضاء غير المعروفين:

select
{[Module].[Hierarchy].[Module].Members - [Module].[Hierarchy].[Module].[Unknown]} on rows,
{[Date].[Month-day].[Day Of Month].Members - [Date].[Month-day].[Day Of Month].[Unknown]} on     columns
from [StatsView]
where {[Measures].[Maintainability Index]}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top