2017-09-01 68 views
0

我有一個SSAS多維數據集,其中包含許多用MDX編寫的計算度量值。SSAS多維數據集中的計算度量值非常慢或不具備所有功能

一個具體是造成我的麻煩 - 運行總計。

用途的計算度量

的計算措施應總結從B.O.T.所有運動直到時間結束, 由於我們已經到達現在的日子而沒有更多的移動時的意義,那麼值應該重複,直到我的時間維度中沒有更多的日期。 例子:

FY13 0.00 
FY14 10.00 
FY15 13.00 
FY16 14.00 
FY17 20.00 
FY18 20.00 
FY19 20.00 
FY20 20.00 
FY21 20.00 

而且該措施應該是工作沿着我所有的日期層次結構(有四個)。 事實上,我也像預期的那樣用下面的代碼工作:

CREATE MEMBER CURRENTCUBE.[Measures].[Actual Balance LCY] 
AS AGGREGATE(
    {NULL:[Posting Date].[Calendar Year Y-Q-M-D].CurrentMember} 
    * {NULL:[Posting Date].[Calendar Year Y-M-D].CurrentMember} 
    * {NULL:[Posting Date].[Fiscal Year Y-M-D].CurrentMember} 
    * {NULL:[Posting Date].[Fiscal Year Y-Q-M-D].CurrentMember} 
,[Measures].[Actual LCY] 
), 
FORMAT_STRING = "#,##0.00;-#,##0.00", 
VISIBLE = 1 , ASSOCIATED_MEASURE_GROUP = 'Actual'; 

問題:

當度量添加到數據透視表在Excel和如在行上添加兩個維度,在列上添加一個日期層次結構,查詢變得非常緩慢。 40-60秒(我知道這很慢,因爲我們在timeXtender中構建了一個遺留多維數據集,它在相同的數據量下在5-10秒內完成相同的數據透視表)

我將NON_EMPTY添加到MDX。然後查詢很快,但FY17之後沒有更多的價值,這不是預期的行爲。 在傳統解決方案NON_EMPTY也沒有輸入,但它仍然更快。

問題:

做什麼,讓這兩個措施的預期行爲和合理的查詢速度?

+0

不'[措施] [實際LCY]'需要'彙總''可以用'Sum'代替嗎? – whytheq

+0

可能我可以,我不是MDX專家 –

回答

1

你的表現塞在這裏:

{NULL:[Posting Date].[Calendar Year Y-Q-M-D].CurrentMember} 
* {NULL:[Posting Date].[Calendar Year Y-M-D].CurrentMember} 
* {NULL:[Posting Date].[Fiscal Year Y-M-D].CurrentMember} 
* {NULL:[Posting Date].[Fiscal Year Y-Q-M-D].CurrentMember} 

這種交叉連接操作簡直是太沉重。 我有兩種使用方式。選擇你喜歡的更多:

1:取決於你選擇哪個層次結果(不需要交叉連接所有內容)。

Aggregate(
    case 
     when not [Posting Date].[Calendar Year Y-Q-M-D].CurrentMember is [Posting Date].[Calendar Year Y-Q-M-D].DefaultMember 
     then {NULL:[Posting Date].[Calendar Year Y-Q-M-D].CurrentMember} 
     when not [Posting Date].[Calendar Year Y-M-D].CurrentMember is [Posting Date].[Calendar Year Y-M-D].DefaultMember 
     then {NULL:[Posting Date].[Calendar Year Y-M-D].CurrentMember} 
     when not [Posting Date].[Fiscal Year Y-M-D].CurrentMember is [Posting Date].[Fiscal Year Y-M-D].DefaultMember 
     then {NULL:[Posting Date].[Fiscal Year Y-M-D].CurrentMember} 
     when not [Posting Date].[Fiscal Year Y-Q-M-D].CurrentMember is [Posting Date].[Fiscal Year Y-Q-M-D].DefaultMember 
     then {NULL:[Posting Date].[Fiscal Year Y-Q-M-D].CurrentMember} 
     else NULL 
    end, 
    [Measures].[Actual LCY] 
) 

2:添加一個最大的一天措施(所以當前成員的最後一天知道(層次無關):

Aggregate(
    NULL:StrToMember('[Posting Date].[Day].[' + cint([Measures].[Max Day]) + ']') 
    [Measures].[Actual LCY] 
) 
+0

非常感謝,它使刷新時間從4分鐘減少到大約1-2分鐘,這是可以接受的。如果沒有使用非空的話,沒有任何辦法可以加快速度? –

+0

是的,在SSAS中快速而穩固的滾動方法是痛苦的,它錯過了> =關係,但是,你可以預先刪除包含滾動邏輯和LastChild聚合的度量表。你也可以在Where子句中設置硬編碼報告{NULL:[Posting Date]。[Calendar Year Y-Q-M-D]。[20170101]}。 –

+0

不幸的是,製作這些報告的人的需求變化非常大。但不是很tech.savvy,所以更動態,更好;)創建一個度量表?像普通的事實表一樣?聽起來像是一個好主意,但我認爲SSAS特別適合這種計算 - 是不是使用立方體的權力之一? –

相關問題