我有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值。它是跨安全维度的附加,但不是跨时间。
答案 0 :(得分:0)
我认为摆脱整个SCOPE
语句而不是将度量的AggregateFunction属性设置为LastChild
或LastNonEmpty
会加快计算速度。这需要[Effective Date]
作为标记为时间的第一个维度,并且您需要SQL Server企业版才能使这些AggregateFunction可用。