我正在尝试在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 /内存。
答案 0 :(得分:3)
分裂赢得了巨大的变化。
你的第三次尝试几乎就是你想要的。你用立方体测量的目的是让它们稀疏"。我对此的解释是,你希望它们只存在于它们应该存在的多维数据集部分中 - 多维数据集空间应该是空的其他地方 - 这是通过在度量中使用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]
的效果 - 这是如何计算的?