2014-12-03 73 views
1

我剛開始MDX在SSAS,我必須承認我有點困惑;-)的日期計算成員從FactTable

所以,我想計算是相當簡單的。在事實表FactDelivery我們有兩個日期關鍵字段,CreationDateKeyDeliveryDateKey

處理時間是創建條目和實際交付日期之間的天數。

創建新計算成員時,我們在左下窗口中顯示度量值和維度的字段。但由於FactDelivery的日期值不是實際的度量值,因此未列出corse的值。我本來期望我可以通過以下方式訪問它們。

Case 
    When [FactDelivery].[DeliveryDateKey] < [Fact Delivery].[DateCreatedKey] 
    Then 0 
    Else [FactDelivery].[DeliveryDateKey] - [FactDelivery].[DateCreatedKey] 
End 

這看起來就像您可以在事實表本身定義的命名計算。這是我的第一個方法。但由於我只有鑰匙存儲爲整數YYYYMMDD,我不能真正做日期計算。這就是爲什麼我切換到MDX,以便能夠訪問DimDate表中的實際日期。 任何幫助表示讚賞。

問候

塞巴斯蒂安

回答

1

你是絕對正確的軌道「命名計算」對......的邏輯是不一樣簡單,只要你願意;-)

以下是將整數日期(YYYYMMDD)轉換爲日期然後使用DateDiff函數計算兩者之間的天數的示例。

DECLARE @s_dt_int AS INT = 20141205; 
DECLARE @e_dt_int AS INT = 20141208; 

SELECT DATEDIFF(
      DAY, 
      CONVERT(date, CONVERT(varchar(8), @s_dt_int), 112), 
      CONVERT(date, CONVERT(varchar(8), @e_dt_int), 112) 
     ) 
; 

該邏輯可以在視圖被封裝在源或在SSAS數據庫的DSV(雖然我更喜歡源上的視圖,並認爲這是很好的做法,因爲它可以在多個SSAS數據庫中重複使用

編輯:顯然,您可以將DateDiff包裝在CASE語句中,以控制處理CreateDateKey> DeliveryDateKey的情況。