سؤال

تحية مكدس المجتمع فوق المجتمع.

لقد بدأت مؤخرًا في بناء مكعب OLAP في SSAS2008 وعلقت. سأكون ممتنًا إذا تمكن شخص ما على الأقل من توجيهني نحو الاتجاه الصحيح.

قارة: اثنين من الجداول الحقائق ، نفس المكعب. تحتوي FactCalls على معلومات حول المكالمات التي أجراها المشتركون ، وتحمل FactTopups بيانات Topup. كلا الجدولين لهما العديد من الأبعاد المشتركة واحدة منهم هو البعد المشترك.

حقائق الحقوق             FactTopups
المشترك المشترك
CallDuration DateKey
قيمة Topup CallCost ...

ما أحاول تحقيقه هو أن أكون قادرًا على بناء تقارير حقائق الحقوق القائمة على المشتركين المتميزين الذين تصدروا حساباتهم خلال الأيام السبعة الماضية.

ما أبحث عنه بشكل أساسي عن MDX المكافئ لـ SQL's:

select *  
  from FactCalls  
 where SubscriberKey in 
       ( select distinct SubscriberKey from FactTopups where ... );  

لقد حاولت إنشاء بُعد متدهول لكلا الجدولين الذي يحتوي على المشتركين والقيام:

Exist( 
         [Calls Degenerate].[Subscriber Key].Children, 
         [Topups Degenerate].[Subscriber Key].Children 
     )

بدون نجاح.

أطيب التحيات،

فينس

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

المحلول

من المحتمل أن تجد شيئًا مثل ما يلي أداء أفضل. سيتم إجبار نهج المرشح على التكرار من خلال كل مشترك ، في حين أن وظيفة غير فارغة () يمكن أن تستفيد من التحسينات في محرك التخزين.

select non empty{ 
        [Measures].[Count], 
        [Measures].[Cost], 
        [Measures].[Topup Value] 

      } on columns, 
      { 
NonEmtpy( [Subscriber].[Subscriber Key].Children,     
            ( [Measures].[Topups Count],     
              [Topup Date].[Calendar].[Month Name].&[2010]&[3] ) )
   } on rows 
 from [Calls] ; 

نصائح أخرى

أنت تعرف كيف في بعض الأحيان الحلول الأكثر وضوحًا والأكثر وضوحًا التي تثيرك بطريقة أو بأخرى؟ حسنا ، هذا هو على ما يبدو واحد منهم. يقولون "MDX ليس SQL" وأعرف الآن ما يعنيه. لقد كنت أعمل في هذا من وجهة نظر SQL بالكامل ، تطل على الاستخدام الواضح لأمر المرشح.

with set [OnlyThoseWithTopupsInMarch2010] as
    filter( 
            [Subscriber].[Subscriber Key].Children, 
            ( [Measures].[Topups Count], 
              [Topup Date].[Calendar].[Month Name].&[2010]&[3] ) > 0 
          )

select non empty{
        [Measures].[Count],
        [Measures].[Cost],
        [Measures].[Topup Value]

      } on columns,
      non empty{ [Test] } on rows
 from [Calls] ; 

بسيطة بشكل محرج.

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