2015-08-26 48 views
1

我在Excel中使用MDX查詢以從多維數據集中獲取數據。每年7月財政年度發生變化,我們必須手動更改。有什麼辦法可以在下面的查詢中實現這個case語句嗎?在MDX Query中使用Case語句獲取財政年度給出錯誤

SELECT 
    ({ [Dim ID].[ID Key].&[7]}) ON COLUMNS 
FROM (SELECT 
    ({ [Billing].[FY].&***[2015]*** }) ON COLUMNS 
    FROM [Billing DW]) 
) 
CELL PROPERTIES VALUE, BACK_COLOR, FORE_COLOR, FORMATTED_VALUE, FORMAT_STRING, FONT_NAME, FONT_SIZE, FONT_FLAGS 

代替年份[2015]我想寫這個案例陳述。

CASE 
    WHEN MONTH(getdate()) > 7 THEN YEAR(getdate()) + 1 
    ELSE YEAR(getdate()) 
END ; 
+0

如果是重要的,那麼你應該實現你的立方體一個會計年度層次結構。微軟在他們的AdvWrks多維數據集中說明了這個實現。 – whytheq

回答

0

因爲MDX沒有getdate()函數,所以你需要做一些字符串操作和VB代碼來達到這個目的。正如爲什麼要提到的那樣,未來將爲自己節省很多頭痛,只是在維度本身包含財政年度。

SELECT ({ [Billing].[FY].&[2015] }) 

將成爲

SELECT CASE WHEN FORMAT(now(), "MM") > "07" 
    THEN StrToMember("[Billing].[FY].&["+Format(now(), "yyyy")+"]").lead(1) 
    ELSE 
    StrToMember("[Billing].[FY].&["+Format(now(), "yyyy")+"]") END 
+0

謝謝你!真的很感激它! – Justin

0

您可以動態創建一個表示你需要開票的一年,使用IIF做基於當前月份選擇一個成員。然後使用strtomember()在查詢中挑選出正確的成員。

你原來的查詢將成爲這樣的事:

WITH MEMBER [Current Month] AS MONTH(NOW()) 
    MEMBER [Current Year] AS YEAR(NOW()) 
    MEMBER [Billing Year] AS IIF([Current Month] > 7, [Current Year] + 1, [Current Year]) 
SELECT [Dim ID].[ID Key].&[7] ON COLUMNS, 
     strtomember('[Billing].[FY].&[' + cstr([Billing Year].Value) + ']') ON ROWS 
FROM [Billing DW]