Filter 用MDX进行子选择

Filter 用MDX进行子选择,filter,ssas,mdx,exists,subquery,Filter,Ssas,Mdx,Exists,Subquery,欢迎来到我们的社区 我最近开始在SSAS2008中构建OLAP多维数据集,但遇到了问题。如果有人能至少为我指出正确的方向,我将不胜感激 情境:两个事实表,同一个立方体。FactCalls保存有关订阅者呼叫的信息,FactTopups保存topup数据。两个表都有许多公共维度,其中一个是订户维度 FactCallsFactTopups subscriberkey subscriberkey CallDurationDateKey CallCostTopup值 我试图实现的是能够根据过去7天内已加

欢迎来到我们的社区

我最近开始在SSAS2008中构建OLAP多维数据集,但遇到了问题。如果有人能至少为我指出正确的方向,我将不胜感激

情境:两个事实表,同一个立方体。FactCalls保存有关订阅者呼叫的信息,FactTopups保存topup数据。两个表都有许多公共维度,其中一个是订户维度

FactCallsFactTopups
subscriberkey subscriberkey
CallDurationDateKey
CallCostTopup值

我试图实现的是能够根据过去7天内已加满帐户的不同订户构建FactCalls报告

我基本上是在寻找与SQL等价的MDX:

select *  
  from FactCalls  
 where SubscriberKey in 
       ( select distinct SubscriberKey from FactTopups where ... );  
我已尝试为包含SubscriberKey和doing的两个表创建退化维度:

Exist( 
         [Calls Degenerate].[Subscriber Key].Children, 
         [Topups Degenerate].[Subscriber Key].Children 
     )
没有成功

亲切问候,


文斯

你知道有时候最简单、最明显的解决方案不知怎的让你难以捉摸吗?这显然是其中之一。他们说“MDX不是SQL”,我现在知道他们的意思了。我一直从完全SQL的角度来研究这个问题,完全忽略了filter命令的明显用法

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] ; 

令人尴尬的简单

您可能会发现下面这样的功能会更好。过滤器方法将被强制遍历每个订阅服务器,而NonEmpty()函数可以利用存储引擎中的优化

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] ;