2017-07-27 21 views
0

[條件預測成本]是根據稱爲「成本」和「預測」的度量遵循範圍語句生成的成本」。如何根據所選的半年(涉及範圍,後代陳述)優化兩個度量之間應有條件決定的MDX

這些語句工作正常,但速度太慢。尤其是如果在報告中選擇整個年份(甚至更多年)。等待時間可能超過5分鐘。 任何想法如何優化這個MDX?

SCOPE ([Measures].[Conditional Forecast Cost]);   
THIS = (IIF([DIM Date].[Half Year].&[1],[Measures].[Cost], [Measures].[Forecast Cost])); 
END SCOPE; 

SCOPE ([DIM Date].[Iso Month].[All].children, [Measures].[Forecast Costs]);   
    THIS =  SUM(
        Descendants(
           [DIM Date].[Iso Month].CurrentMember, 
           [DIM Date].[Iso Month] 
          ), 
        [Measures].[Conditional Forecast Cost] 
        ); 
END SCOPE; 

背景資料:

首先聲明表示基本邏輯。

  • 如果選擇上半年度量「成本」應該是 應用。
  • 下半年的措施「預測成本」應該是 應用。

只要我們報告月度水平,這種方式就可以正常工作。

  • 如果全年應該聚集的第一條語句是不是 不夠,因爲發動機將無法aggrate我們已經與「IIF([DIM日期] [半年]定義 的方式。& [1 ],[措施]。[費用] ...」。

因此,與後人的功能,第二SCOPE語句強制發動機從低月度水平做了彙總。 ,到目前爲止的作品,但它是真的很慢。

其他信息:

  • 現在我們寧願在semnatic層 與MDX,而不是在ETL實現這個邏輯。
  • 「成本」度量值也是MDX中的一個計算度量值。
  • DIM日期維只有「YEAR月」( 當然有些附加屬性)。

回答

1
  1. 顯示請MDX腳本的措施。[成本]。
  2. 您的IIF描述了兩個 子立方體=> SCOPE作業。把它轉換爲這樣的形式(簡體):

    MEASURES.[Conditional Forecast Cost] = [Measures].[Forecast Cost] 
    SCOPE([DIM Date].[Half Year].&[1]) 
        MEASURES.[Conditional Forecast Cost] = [Measures].[Cost]; 
    END SCOPE; 
    
  3. 你有遞歸(非常糟糕!):[條件預測費用]調用[預測費用],然後選擇[預測費用]調用[條件預測成本]!你必須重寫它,而不遞歸!

yabele.blogspot.comwww.xing.com/profile/Yuri_Abele

+0

非常感謝。用於測量的MDX腳本。[成本]是:'範圍(IIF(ISERROR([Measures]。[Cost]),{},{[Measures]。[Cost]})); THIS = [Measures]。[Costs 0] + [Measures]。[Brand Costs]; END SCOPE;' –