2

问候堆栈溢出社区。

我最近开始在 SSAS2008 中构建一个 OLAP 多维数据集并陷入困境。如果有人至少能指出我正确的方向,我将不胜感激。

情况:两个事实表,同一个多维数据集。FactCalls 保存有关订阅者呼叫的信息,FactTopups 保存充值数据。这两个表都有许多共同的维度,其中之一是订阅者维度。

FactCalls              FactTopups
SubscriberKey SubscriberKey
CallDuration DateKey
CallCost 充值值 ...

我想要实现的是能够基于在过去 7 天内充值帐户的不同订阅者构建 FactCalls 报告。

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

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

我尝试为包含 SubscriberKey 的两个表创建退化维度并执行以下操作:

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

没有成功。

亲切的问候,

文斯

4

2 回答 2

2

您可能会发现类似以下内容的效果会更好。过滤器方法将被迫遍历每个订阅者,而 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] ; 
于 2010-03-22T06:19:27.867 回答
1

你知道有时候最简单和最明显的解决方案会以某种方式让你不知所措吗?好吧,这显然是其中之一。他们说“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] ; 

简单的尴尬。

于 2010-03-19T17:29:05.993 回答