[英]MDX query is very slow and returns memory exception in SSRS
我正在嘗試從以下多維表達式(MDX)查詢中獲取我的總金額超過100k的所有記錄的詳細列表:
with member [measures].[total] as
[Measures].[m1] + [Measures].[m2] + [Measures].[m3]
select non empty
[measures].[total] on columns,
non empty filter ([dim1].[h1].allmembers
* [dim1].[h2].allmembers
* [Loss Date].[Date].[Year].allmembers
* [Dim1].[h3].allmembers
, [measures].[total]>100000 and [Measures].[Open File Count]>0) on rows
from [Monthly Summary]
where ([1 Date - Month End].[Month End Date].[Month].&[20120331])
盡管我從創建存儲過程中獲得了快速的結果,並且最終結果少於1000行,但是我的MDX查詢在SSMS中永遠運行,並且在SSRS中返回內存異常。 關於如何優化或增強它的任何想法?
您可以使用Having
而不是Filter
,因為它是在Non Empty
之后應用的,因此您可能會獲得更好的性能(請參閱Chris Webb撰寫的精彩博客文章 )。 這將是查詢的新版本:
with member [measures].[total] as
[Measures].[m1] + [Measures].[m2] + [Measures].[m3]
select non empty
[measures].[total] on columns,
non empty
[dim1].[h1].allmembers
* [dim1].[h2].allmembers
* [Loss Date].[Date].[Year].allmembers
* [Dim1].[h3].allmembers
having [measures].[total]>100000 and [Measures].[Open File Count]>0 on rows
from [Monthly Summary]
where ([1 Date - Month End].[Month End Date].[Month].&[20120331])
我建議進行一些更改。
首先,您是否真的要在查詢中返回每個維度的All成員? 如果符合過濾條件,它們將被包括在內。 另外,我發現將where子句更改為子選擇在某些情況下可以更好地執行。 您需要測試以查看它是否會改變性能。 接下來,可以通過將NonEmpty函數放入Filter函數中來首先減少要過濾的成員數。 而且,在某些情況下,使用多態運算符(*)的效果要比使用CrossJoin函數或創建成員的元組集的效果差。 當軸上只有一個項目時,列上的NON EMPTY是不必要的。 我在下面結合了所有這些建議:
with member [measures].[total] as
[Measures].[m1] + [Measures].[m2] + [Measures].[m3]
select
[measures].[total] on columns,
filter (
nonempty(
([dim1].[h1].[h1].members,
[dim1].[h2].[h2].members,
[Loss Date].[Date].[Year].members,
[Dim1].[h3].[h3].members)
, [measures].[m1]),
, [measures].[total]>100000 and [Measures].[Open File Count]>0) on rows
from
(select [1 Date - Month End].[Month End Date].[Month].&[20120331] on columns
from [Monthly Summary])
請參閱此以獲取有關NON EMPTY與NonEmpty的一些解釋: http : //blogs.msdn.com/b/karang/archive/2011/11/16/mdx-nonempty-vs-nonempty.aspx 。 在某些情況下,將NonEmpty函數放入Filter函數中可能會產生性能下降的情況,有時卻不會-您需要進行測試。
問題可能出在維度或多維數據集設計中(存儲引擎問題),而不是查詢中(公式引擎問題)。 您可以在此處使用這些技術進行診斷: http : //www.microsoft.com/zh-cn/download/details.aspx?id=661 。 該白皮書是針對SSAS 2005編寫的,但仍適用於SSAS的更高版本。
為了減少內存,請訂購尺寸。
代替:
[dim1].[h1].allmembers
* [dim1].[h2].allmembers
* [Loss Date].[Date].[Year].allmembers
* [Dim1].[h3].allmembers
采用
[dim1].[h1].allmembers
* [dim1].[h2].allmembers
* [Dim1].[h3].allmembers
* [Loss Date].[Date].[Year].allmembers
在幕后,SSAS將內部加入dim1成員,外部加入Loss Date成員。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.