针对SSAS多维数据集的缓慢SSRS查询(SQL Server 2008R2)

时间:2014-07-07 20:31:11

标签: sql-server reporting-services ssas

我有SSAS和SSRS 2008R2。最终目标是为每个投资组合和安全组合获取每日MarketValue的报告。 MarketValue具有SCOPE计算以选择日期维度的最后存在。如果删除了SCOPE,则查询仍需要6分钟完成。并且使用SCOPE语句,它会在1小时后超时。这是我的查询

SELECT 
NON EMPTY 
{[Measures].[MarketValue]} ON COLUMNS
,NON EMPTY 
{
[Portfolio].[PortfolioName].[PortfolioName].ALLMEMBERS*
[Effective Date].[Effective Date].[Effective Date].ALLMEMBERS*
[Security].[Symbol].[Symbol].ALLMEMBERS
}
DIMENSION PROPERTIES 
MEMBER_CAPTION
,MEMBER_UNIQUE_NAME
ON ROWS
FROM EzeDM
WHERE 
(
[AsOn Date].[AsOn Date].&[2014-06-17T06:32:41.97]
,[GoldenCopy].[Frequency].&[Daily]
,[GoldenCopy].[GoldenCopyType].&[CitcoPLExposure]
,[GoldenCopy].[PointInTime].&[EOP]
,[GoldenCopy].[PositionType].&[Trade-Date]
);

我对MarketValue Measure的SCOPE声明是

SCOPE 
[Effective Date].[Effective Date].MEMBERS;
THIS = 
Tail
(
(EXISTING 
[Effective Date].[Effective Date].MEMBERS)
,1
).Item(0);
END SCOPE;

安全性DIM大约有4K值。组合DIM有大约100个值,EffectiveDate DIM有大约400个值。

如果我从交叉连接中删除EffectiveDate,则查询花费不到2秒。

到目前为止,我尝试了不同的组合,发现缓慢是由于DIM之间的交叉连接,其中包含大值。但后来我在想DIM中4000的值实际上是大吗?人们必须有效地做同样的报告吗?

这是SCOPE计算吗?如果是这样的话,为什么只有当EffectiveDate在交叉连接中时才会变慢?

感谢任何帮助。

修改:1 如果有帮助,请添加有关当前环境的更多详细信息: 我们没有企业版,目前我们没有任何计划要求我们的客户升级到企业版。

安全维度有大约40个属性,但其中2个总是有数据,最多“最多6”可能有任何数据。不确定MDX查询中未使用的属性是否仍会影响查询性能“无论是否有数据” 在阅读关于MDX查询改进的“Chris Webb”博客后,我注意到ALL维度中所有属性的属性都是正确的。

"AttributeHierarchyEnabled = True"

对于测试,除了目前我正在使用之外,我已经标记为FALSE。

我没有在多维数据集上定义任何聚合,我已经开始使用“设计聚合”向导构建聚合。之后,我描述了相同的报告查询,并没有看到“从聚合获取数据”事件的任何勾号。

所以目前我正在准备/测试“基于使用情况的聚合”

修改:2

因此,我创建了具有50%日志记录采样的日志表,并运行了15-20个不同的报告查询,客户端期望运行并在日志表中看到一些数据。我使用了基于使用情况的聚合向导,让SSAS找出估计的行数。 奇怪的是它没有产生任何聚合。

我还尝试了将Aggregation属性更改为LastChild的方法,正如Frank建议的那样,它工作得很好,但后来我意识到我不能为所有Dimension选择MarketValue的LastChild值。它是跨安全维度的附加,但不是跨时间。

1 个答案:

答案 0 :(得分:0)

我认为摆脱整个SCOPE语句而不是将度量的AggregateFunction属性设置为LastChildLastNonEmpty会加快计算速度。这需要[Effective Date]作为标记为时间的第一个维度,并且您需要SQL Server企业版才能使这些AggregateFunction可用。