تعريف العضو المحسوب في MDX - تصفية قيمة المقياس

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

  •  10-07-2019
  •  | 
  •  

سؤال

أحتاج إلى تحديد عضو محسوب في MDX (هذا هو SAS OLAP، لكنني أقدر الإجابات من الأشخاص الذين يعملون مع تطبيقات OLAP المختلفة على أي حال).

يجب أن يتم حساب قيمة المقياس الجديد من مقياس موجود من خلال تطبيق شرط تصفية إضافي.أفترض أنه سيكون أكثر وضوحا مع مثال:

  • التدبير الحالي:"إجمالي حركة المرور"
  • البعد الحالي:"الاتجاه" ("داخل" أو "خارج")
  • أحتاج إلى إنشاء عضو محسوب "حركة المرور الواردة"، والذي يساوي "إجمالي حركة المرور" مع عامل تصفية إضافي (الاتجاه = "في")

المشكلة هي أنني لا أعرف MDX ولدي جدول زمني ضيق جدًا (آسف جدًا لسؤال مبتدئ).أفضل ما يمكنني التوصل إليه هو:

([Measures].[Total traffic], [Direction].[(All)].[In])

وهو ما يعمل تقريبًا، باستثناء الخلايا ذات الاتجاه المحدد:

example

لذلك يبدو أن الفلتر "الجوهري" في الاتجاه قد تم تجاوزه باستخدام الفلتر الخاص بي).أحتاج إلى تقاطع الفلتر "الجوهري" مع الفلتر الخاص بي.كان شعوري الغريزي أن الأمر يتعلق بالتقاطع [Direction].[(All)].[In] مع الإحداثيات الجوهرية للخلية التي يتم تقييمها، ولكن من الصعب معرفة ما أحتاج إليه دون قراءة الموضوع أولاً :)

[عدل] انتهى بي الأمر

IIF([Direction].currentMember = [Direction].[(All)].[Out],
    0,
    ([Measures].[Total traffic], [Direction].[(All)].[In])
)

..ولكن على الأقل في SAS OLAP يؤدي هذا إلى إجراء استعلامات إضافية (لحساب قيمة [في]) لمجموعة البيانات الأساسية، لذلك لم أستخدمها في النهاية.

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

المحلول

للبدء، يمكنك تحديد مقياس محسوب جديد في MDX الخاص بك، وإخباره باستخدام قيمة مقياس آخر، ولكن مع تطبيق عامل تصفية:

WITH MEMBER [Measures].[Incoming Traffic] AS
'([Measures].[Total traffic], [Direction].[(All)].[In])'

كلما قمت بإظهار المقياس الجديد في تقرير، فإنه سيتصرف كما لو كان يحتوي على عامل تصفية "الاتجاه > في" عليه، بغض النظر عما إذا كان بُعد الاتجاه مستخدمًا على الإطلاق.

ولكن في حالتك، فأنت تريد أن يكون لبعد الاتجاه الأسبقية عند استخدامه.... لذلك تصبح الأمور فوضوية بعض الشيء.سيتعين عليك اكتشاف ما إذا كان هذا البعد قيد الاستخدام والتصرف وفقًا لذلك:

WITH MEMBER [Measures].[Incoming Traffic] AS
'IIF([Direction].currentMember = [Direction].[(All)].[Out],
    ([Measures].[Total traffic]),
    ([Measures].[Total traffic], [Directon].[(All)].[In])
)'

لمعرفة ما إذا كان البعد قيد الاستخدام، نتحقق مما إذا كانت الخلية الحالية تستخدم OUT.إذا كان الأمر كذلك يمكننا إعادة إجمالي حركة المرور كما هو.إذا لم يكن الأمر كذلك، فيمكننا أن نطلب منه استخدام IN في صفنا.

نصائح أخرى

أعتقد أنه يجب عليك وضع عمود في جدول حقائق إجمالي حركة المرور الخاص بك لإشارة الدخول/الخروج وإنشاء جدول خافت لقيم الدخول والخروج.يمكنك بعد ذلك تحليل بياناتك بناءً على IN & Out.

نلقي نظرة أيضا على هذا السؤال, ، فهو يصف نفس المشكلة وهناك إجابة مختلفة منشورة هناك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top