2011-09-08 83 views
6

我有一個非常困難的時間,Excel與數據透視表交互時非常慢。添加/刪除字段,更改過濾器或切片器,都需要幾分鐘的時間才能響應。緩慢的Excel數據透視表MDX?

似乎生成的MDX效率極低。我可以理解他們必須動態生成MDX,並且必須支持數據透視表的許多功能,但速度慢100倍是可笑的。

當他們產生MDX上的行或列字段,他們使用DrilldownLevel(... [屬性維度]。[縣])

我不知道是什麼的Excel的更復雜的方法的目的是的,但我希望在某些地方有一些選項可以取消選中,以便Excel不需要使用DrilldownLevel函數。

取而代之的是,我通常省略Drilldownlevel函數,只是做[Property Dimension]。[縣] 。[縣]來訪問屬性。

對於相同結果集的查詢需要5分鐘的Excel MDX時間,並且使用我的MDX時間少於5秒鐘。

我已經驗證了慢速並不是Excel渲染/格式化結果的問題,因爲我使用了Excel使用的MDX,並直接在SSMS中運行它以驗證計時。我可以查看服務器上的任務管理器,並在處理結果時觀察CPU攪動。

請注意,我不會責怪服務器,因爲我可以創建運行速度極快並提供相同結果的MDX查詢。

我怎樣才能讓Excel生成更高效的MDX?我正在使用Excel 2010.

我聽說powerpivot生成更高效的MDX,但是Powerpivot在SSAS之上不可用,因爲它不利用SSAS多維數據集。因此,爲什麼在SSAS之上的Powerpivot不起作用的短暫咆哮。如果您將數據從SSAS導入powerpivot,您實際上所做的就是執行巨大的交叉連接,將數據從SSAS遷移到Powerpivot表中。如果你已經嘗試過,你會發現它會生成字段名稱/標籤,例如「Property DimensionCountyCounty Name」......哇,真的嗎?然後,您只需使用本地Powerpivot的OLAP引擎處理數據,並依靠具有64位操作系統的客戶端計算機來處理合理大小的數據集。這就好像您只是削減了SSAS,將您在構建複雜的OLAP數據庫和所有元數據,計算,聚合等方面的努力拋出了頭緒。使用SSAS的一半原因是爲了能夠彙總粒度數據然後再返回給客戶端,以便客戶端不需要64位操作系統,並且不需要客戶端上的大量資源。我非常努力地使SSAS的動力樞軸可用,但是在嘗試了幾種方法並與用戶來回之後,它確實沒有接近可用的地方。不要敲Powerpivot,因爲我發現它在許多其他情況下非常有用,但是如果您的SSAS多維數據集是您系統的重要組成部分(即計算,彙總服務器端的大量記錄等),那麼powerpivot似乎是錯誤的選項。

這裏是我的查詢的示例:

SELECT 
NON EMPTY CrossJoin(
{[Department Dimension].[Name].[Name]}, 
{[Finance Month].[Report Year].[Report Year]} 
) 
    ON COLUMNS , 
CrossJoin(
    {[Department Finance Line Type Dimension].[Display Order].[Display Order] }, 
    {[Department Finance Line Type Dimension].[Line Number].[Line Number]}, 
    {[Department Finance Line Type Dimension].[Display Name].[Display Name]} 
    ) 
    ON ROWS 
    FROM 
    (
    SELECT ({[Department Dimension].[County].&[Seminole],[Department Dimension].[County].&[Sarasota]}) ON COLUMNS FROM [HYP Data View] 
    ) 
    WHERE ([Department Finance Line Type Dimension].[Section Name].&[Part 1 - Balance Sheet], 
    [Measures].[Amount] 
    ) CELL PROPERTIES VALUE 

及以下的Excel生成的內容。我實際上已經刪除了Excel查詢的其他幾個方面,因爲我試圖簡化它來確定是什麼罪魁禍首。這是查詢在運行緩慢時的樣子,然後下一步我刪除了DrilldownLevel並將其替換爲[All]。[屬性名稱]它開始運行得快得多。

非常非常慢查詢:

SELECT 
NON EMPTY CrossJoin(
{DrilldownLevel({[Department Dimension].[Name].[All]})}, 
{DrilldownLevel({[Finance Month].[Report Year].[All]})} 
) 
DIMENSION PROPERTIES PARENT_UNIQUE_NAME ON COLUMNS , 
CrossJoin(
    {DrilldownLevel({[Department Finance Line Type Dimension].[Display Order].[All] })}, 
    {DrilldownLevel({[Department Finance Line Type Dimension].[Line Number].[All]})}, 
    {DrilldownLevel({[Department Finance Line Type Dimension].[Display Name].[All]})} 
    ) 
    DIMENSION PROPERTIES PARENT_UNIQUE_NAME ON ROWS 
    FROM (
    SELECT ({[Department Dimension].[County].&[Seminole],[Department Dimension].[County].&[Sarasota]}) ON COLUMNS FROM [Afr Data View] 
    ) 
    WHERE ([Department Finance Line Type Dimension].[Section Name].&[Part 1 - Balance Sheet], 
    [Measures].[Amount] 
    ) CELL PROPERTIES VALUE 

爲什麼它需要DrilldownLevel(... [全部])?有沒有一個選項可以翻轉來讓Excel不生成這部分查詢以便它運行得更快?

+0

可能是交叉連接和下鑽層級,因爲下鑽層級功能不夠慢。交叉連接同一維度的不同層次可能非常耗時(您需要在所有組合上執行自動存在)......並不能解決您的問題,但可能有助於您理解 – ic3

+0

屬性層次結構和層次結構的速度是否緩慢? –

回答

0

不幸的是,儘管我已經在Excel和Pivottables上對SSAS MOLAP Cubes進行了相當廣泛的工作,但我還沒有在純Excel中找到一種機制來改變它生成的查詢。

但是我使用了第三方工具叫做XLCubed,它在使用來自SSAS OLAP多維數據集的Excel和MDX查詢時功能非常強大,我可以建議你試一試嗎?您甚至可以像上面那樣用完全自定義的MDX替換它將用於「網格」的MDX。儘管我發現這通常不是必需的,但它們替換數據透視表「Grid」似乎會產生更高效的MDX。

願SSAS上帝與你同在。