以下查询需要1或2秒才能执行:
SELECT { [Measures].[Premium], [Measures].[Revenue] }
ON COLUMNS, NON EMPTY { (
[Insured].[PK Insured].[PK Insured].ALLMEMBERS
* [Insured].[Named Insured].[Named Insured].ALLMEMBERS
* [Producer].[Name].[Name].ALLMEMBERS
* [Producer].[PK Producer].[PK Producer].ALLMEMBERS
* [Coverage Category].[Name].[Name].ALLMEMBERS
* [Company].[Name].[Name].ALLMEMBERS
* [Company].[PK Company].[PK Company].ALLMEMBERS
* [Market Ownership Group].[PK Market Ownership Group].[PK Market Ownership Group].ALLMEMBERS
* [Agency Ownership Group].[PK Agency Ownership Group].[PK Agency Ownership Group].ALLMEMBERS
* [Company].[Type].[Type].ALLMEMBERS
) }
ON ROWS FROM ( SELECT ( { [Marketing Rep].[PK Non Broker].&[820676] } )
ON COLUMNS FROM ( SELECT ( [Expiration Date].[Date Hierarchy].[Date].&[2013-08-27T00:00:00] : [Expiration Date].[Date Hierarchy].[Date].&[2013-11-25T00:00:00] )
ON COLUMNS FROM ( SELECT ( { [Policy].[Status].&[PIF], [Policy].[Status].&[BIF] } )
ON COLUMNS FROM [CrumpCRC])))
WHERE ( [Policy].[Status].CurrentMember, [Marketing Rep].[PK Non Broker].&[820676] )
如果我添加日期维度(Expiration Date
),则查询需要几分钟才能执行,有时甚至会返回内存过载错误。这是一个问题:
SELECT { [Measures].[Premium], [Measures].[Revenue] }
ON COLUMNS, NON EMPTY { (
[Insured].[PK Insured].[PK Insured].ALLMEMBERS
* [Insured].[Named Insured].[Named Insured].ALLMEMBERS
* [Producer].[Name].[Name].ALLMEMBERS
* [Producer].[PK Producer].[PK Producer].ALLMEMBERS
* [Coverage Category].[Name].[Name].ALLMEMBERS
* [Company].[Name].[Name].ALLMEMBERS
* [Company].[PK Company].[PK Company].ALLMEMBERS
* [Market Ownership Group].[PK Market Ownership Group].[PK Market Ownership Group].ALLMEMBERS
* [Agency Ownership Group].[PK Agency Ownership Group].[PK Agency Ownership Group].ALLMEMBERS
* [Company].[Type].[Type].ALLMEMBERS
* [Expiration Date].[Date Hierarchy].[Date].ALLMEMBERS
) }
ON ROWS FROM ( SELECT ( { [Marketing Rep].[PK Non Broker].&[820676] } )
ON COLUMNS FROM ( SELECT ( [Expiration Date].[Date Hierarchy].[Date].&[2013-08-27T00:00:00] : [Expiration Date].[Date Hierarchy].[Date].&[2013-11-25T00:00:00] )
ON COLUMNS FROM ( SELECT ( { [Policy].[Status].&[PIF], [Policy].[Status].&[BIF] } )
ON COLUMNS FROM [CrumpCRC])))
WHERE ( [Policy].[Status].CurrentMember, [Marketing Rep].[PK Non Broker].&[820676] )
我正在监视任务管理器中的内存行为:当第一次查询运行时,内存没有任何特殊情况发生,但是当我运行第二个(包含日期dim)时,内存从2GB跳到8GB。我还注意到,当我开始删除列(包括日期)时,查询开始执行得更快,内存消耗也开始下降。我觉得添加每个新列会增加执行查询所需的一些操作。
日期和其他dims之间的区别是日期被设置为层次结构。我还添加了一条警告消息,我在悬停时看到了年/月属性
知道我做错了吗?
答案 0 :(得分:2)
属性类型错误消息表示您没有将日期维度设置为“时间”。这是一个解释维度类型的链接:http://technet.microsoft.com/en-us/library/ms175452.aspx。
我相信当对多维数据集执行查询时,它会查看每个所选维度的所有成员组合以查找交叉点,因此删除维度可以提高性能,因为没有可能的元组。如果您需要定期运行此大型(宽)查询,则可能需要查看多维数据集中的聚合。 SQLCat对于多维数据集设计和查询设计都有great whitepaper on performance tuning它解释了引擎以及执行查询时会发生什么。
SSAS性能调优不是我的强项,但我建议使用BIDS Helper来验证和优化聚合以及整体尺寸设计。