在SQL Server 2008中划分功能

时间:2016-03-21 14:30:56

标签: sql-server ssas mdx

我正在尝试在SSAS中使用Divide函数:

https://msdn.microsoft.com/en-us/library/jj873944(v=sql.110).aspx

但是我必须支持SQL Server 2008,看起来它不可用。我遇到的最初问题是,当我将一个case语句添加到度量计算时,查询的性能非常差。有人建议使用此divide函数。

创建成员的声明是:

Create Member CurrentCube.[Measures].[AvgSentiment] As 
   CASE 
      WHEN ([Measures].[SentimentCount]) > 0 THEN  [Measures].[SentimentSum] / [Measures].[SentimentCount] 
      WHEN([Measures].[SentimentCount]) = 0 THEN  0  
   END
  , VISIBLE =1
  , ASSOCIATED_MEASURE_GROUP = 'vw_CUBE_FACT'  ;

我试过替换为:

Create Member CurrentCube.[Measures].[AvgSentiment] As 
    Divide ([Measures].[SentimentSum], [Measures].[SentimentCount], 0)
  , VISIBLE =1
  , ASSOCIATED_MEASURE_GROUP = 'vw_CUBE_FACT'

我也尝试过:

Create Member CurrentCube.[Measures].[AvgSentiment] As 
  IIF(
    [Measures].[SentimentCount] = 0
   , 0
   , [Measures].[SentimentSum]/[Measures].[SentimentCount]
 )
 , VISIBLE =1
 , ASSOCIATED_MEASURE_GROUP = 'vw_SEAMS_CUBE_FACT' 

这也消耗了一吨的CPU /内存。

1 个答案:

答案 0 :(得分:3)

分裂赢得了巨大的变化。

你的第三次尝试几乎就是你想要的。你用立方体测量的目的是让它们稀疏&#34;。我对此的解释是,你希望它们只存在于它们应该存在的多维数据集部分中 - 多维数据集空间应该是空的其他地方 - 这是通过在度量中使用null而不是0来实现的:< / p>

CREATE MEMBER CurrentCube.[Measures].[AvgSentiment] As 
  IIF(
    [Measures].[SentimentCount] = 0
   , NULL //<<got rid of the 0
   , [Measures].[SentimentSum]
    /[Measures].[SentimentCount]
 )
 , VISIBLE =1
 , ASSOCIATED_MEASURE_GROUP = 'vw_SEAMS_CUBE_FACT' 

IIF通常比CASE表现更好,比使用CASE调整您的尝试更好。

如果上述内容仍然表现不佳,那么我怀疑您需要调查[Measures].[SentimentCount]的效果 - 这是如何计算的?