2015-01-09 62 views
0

很厲害,我有MDX和SSAS很少的經驗,所以不知道從哪裏開始的這:快速MDX查詢的SSAS 2012

我們正在從一個SQL 2005環境遷移到SQL 2012。在SSAS 2005上,下面的查詢在大約3到4秒內運行。在SSAS 2012上運行相同的查詢時,它會在完成之前運行高達1小時58分鐘。任何人都可以闡明爲什麼表現如此糟糕,以及如何改進?我們在SQL 2012 11.0.5532.0(X64)上。

非常感謝。

with member [Measures].[Calculation] as 
    Format(
     IIF(isempty([Measures].[average complience to requirements]), null, 
     [Measures].[average complience to requirements]), 
     "#,0.00" 
) 

select 
    non empty 
    { 
     [Measures].[average complience to requirements], 
     [Measures].[Calculation] 
    } on 0, 
    nonempty 
    (
     [Customer].[App Key Company Id].children * 
     [Location].[App Key Region Id].children * 
     [Category].[App Key Category Id].children * 
     [Vendor].[App Key Vendor Id].children, 
     [average complience to requirements] 
) on 1 
from 
    [BSC] 
where 
    (
     strtomember(
       "[Date Submitted Date].[YYYY-MMMM-DD].[Month Of Year].&[" + Format(Now(), "yyyyMM") + "]" 
      ): 
     strtomember(
       "[Date Submitted Date].[YYYY-MMMM-DD].[Month Of Year].&[" + Format(Now(), "yyyyMM") + "]").Lag(2) 

) 
+0

請回答以下問題:1.「BSC」立方體中是否有分區? 2.「日期提交日期」維度成員是否大於當前月份? –

+0

爲什麼在兩個座標軸中選擇'[平均滿足要求]?將其從'AXIS(1)' – SouravA

+0

@AlexPeshik中刪除要回答您的問題:1.否2.否 – user2460549

回答

0

如果當月是最後一個成員[日期提交日期] [YYYY-MMMM-DD]層次結構,查詢可以簡化爲這一個:

with member [Measures].[Calculation] as 
    Format([Measures].[average complience to requirements],"#,0.00") 
select 
    { 
     [Measures].[average complience to requirements], 
     [Measures].[Calculation] 
    } on 0, 
    nonempty 
    (
     [Customer].[App Key Company Id].children * 
     [Location].[App Key Region Id].children * 
     [Category].[App Key Category Id].children * 
     [Vendor].[App Key Vendor Id].children, 
     [average complience to requirements] 
) on 1 
from 
    [BSC] 
where 
    Tail([Date Submitted Date].[YYYY-MMMM-DD].[Month Of Year].Members,3) 
  1. 不必要的非空從軸0和[Measures]中移除檢查。[計算]。
  2. TAIL函數被用來代替動態成員來讓服務器使用塊模式而不是逐個單元計算。

請同時回答您的留言中的問題以更好地理解可能出現的問題。

+0

如果第2點的答案是肯定的,那麼TAIL不會起作用。另外,有時候,我親自看到'NON EMPTY'子句實際上*加速了查詢。 – SouravA

+0

@Sourav_Agasti,我完全同意你的說法。幸運的是,作者回答'不',所以我們不需要添加一些棘手的邏輯。 –

+0

感謝亞歷克斯,我試過這個,它只運行了幾秒鐘,但沒有返回任何結果。嘗試運行尾部值設置爲20,仍然沒有數據返回。 – user2460549

0

不知道這是否會工作,但試試這個太:

這裏更換WITH子句subselect

with member [Measures].[Calculation] as 
    Format(
     IIF(isempty([Measures].[average complience to requirements]), null, 
     [Measures].[average complience to requirements]), 
     "#,0.00" 
) 

select 
    non empty 
    { 
     [Measures].[average complience to requirements], 
     [Measures].[Calculation] 
    } on 0, 
    nonempty 
    (
     [Customer].[App Key Company Id].children * 
     [Location].[App Key Region Id].children * 
     [Category].[App Key Category Id].children * 
     [Vendor].[App Key Vendor Id].children 
     //[average complience to requirements] //removed 
) on 1 
from 
    (

    SELECT 
    { 
     strtomember(
       "[Date Submitted Date].[YYYY-MMMM-DD].[Month Of Year].&[" + Format(Now(), "yyyyMM") + "]" 
      ): 
     strtomember(
       "[Date Submitted Date].[YYYY-MMMM-DD].[Month Of Year].&[" + Format(Now(), "yyyyMM") + "]").Lag(2) 

    } ON 0 
    FROM [BSC] 
) 

多少時間下面的查詢需要?上ROWS

with member [Measures].[Calculation] as 
    Format(
     IIF(isempty([Measures].[average complience to requirements]), null, 
     [Measures].[average complience to requirements]), 
     "#,0.00" 
) 

select 
    non empty 
    { 
     [Measures].[average complience to requirements], /////This measure removed 
     [Measures].[Calculation] 
    } on 0, 
{} on 1 
    FROM [BSC] 

    where (
    { 
     strtomember(
       "[Date Submitted Date].[YYYY-MMMM-DD].[Month Of Year].&[" + Format(Now(), "yyyyMM") + "]" 
      ): 
     strtomember(
       "[Date Submitted Date].[YYYY-MMMM-DD].[Month Of Year].&[" + Format(Now(), "yyyyMM") + "]").Lag(2) 

    } 

) 

3)

1)否計算成員

//with member [Measures].[Calculation] as 
// Format(
//  IIF(isempty([Measures].[average complience to requirements]), null, 
//  [Measures].[average complience to requirements]), 
//  "#,0.00" 
//) 

select 
    non empty 
    { 
     // [Measures].[average complience to requirements], /////This measure removed 
     [Measures].[Calculation] 
    } on 0, 
    nonempty 
    (
     [Customer].[App Key Company Id].children * 
     [Location].[App Key Region Id].children * 
     [Category].[App Key Category Id].children * 
     [Vendor].[App Key Vendor Id].children 
     //[average complience to requirements] //removed 
) on 1 
    FROM [BSC] 

    where (
    { 
     strtomember(
       "[Date Submitted Date].[YYYY-MMMM-DD].[Month Of Year].&[" + Format(Now(), "yyyyMM") + "]" 
      ): 
     strtomember(
       "[Date Submitted Date].[YYYY-MMMM-DD].[Month Of Year].&[" + Format(Now(), "yyyyMM") + "]").Lag(2) 

    } 

) 

2)沒什麼NO SLICER

select 
    non empty 
    { 
     // [Measures].[average complience to requirements], /////This measure removed 
     [Measures].[Calculation] 
    } on 0, 
    nonempty 
    (
     [Customer].[App Key Company Id].children * 
     [Location].[App Key Region Id].children * 
     [Category].[App Key Category Id].children * 
     [Vendor].[App Key Vendor Id].children 
     //[average complience to requirements] //removed 
) on 1 
    FROM [BSC] 

如果n沒有什麼結論,只是做一些更類似的故障排除,以解決問題的實際原因。一旦你弄明白了,它將很容易處理。對於我們來說,在沒有任何關於內部立方體的想法的情況下進行扶手椅分析顯然沒有意義,因爲實際查詢看起來相當不錯。

+0

感謝您的建議 - 嘗試運行此並終止它,當它仍然沒有完成40分鐘後。 SSAS 2005大約需要3-4秒,所以我不知道爲什麼SSAS 2012會慢得多。 – user2460549

+0

查看更多查詢以執行一些疑難解答(如我的編輯所示)。 – SouravA