2016-07-14 59 views
0

我有一堆計算成員,我需要創建哪些引用了一個日期。如何在整個MDX語句中重用創建的成員?

與其重複獲取該度量將基於的日期成員的MDX,是否有辦法在開始時創建日期成員,然後在整個過程中引用它,以便我不必重複MDX多次?我想類似下面的但它返回NULL:

WITH MEMBER [Date].[Retail].[Closing Date] AS 
IIF (
    [Date].[Retail].CurrentMember.Level.Name = 'Date', 
    [Date].[Retail].CurrentMember.PrevMember, 
    [Date].[Retail].CurrentMember 
) 
MEMBER [Measures].[Closing New] AS 
(
    [Date].[Retail].[Closing Date], 
    [Measures].[On Hand Quantity] 
) 
SELECT 
    [Date].[Retail].[Date].Members ON ROWS, 
    { 
    [Measures].[On Hand Quantity], 
    [Measures].[Closing New] 
    } ON COLUMNS 
FROM 
    Retail 
WHERE 
    [Date].[Retail Year].&[2017] 

如上所述,我想用Closing Date成員多次進行各種計算。

+0

uhmm只是叫你先定義無處不在你需要它的成員。您不想在示例中多次使用[關閉日期]。有任何麻煩/錯誤? – mxix

回答

0

探討爲什麼它返回null嘗試像下面,看它是否是你期待的東西:

WITH 
MEMBER [Measures].[nm] AS 
    [Date].[Retail].CurrentMember.Level.Name 
SELECT 
    { 
    [Measures].[On Hand Quantity], 
    [Measures].[nm] 
    } ON 0, 
    [Date].[Retail].[Date].Members ON 1 
FROM Retail 
WHERE [Date].[Retail Year].&[2017]; 

(我也切換SELECT子句內聲明的順序,因爲它是標準的申報列,因爲它是座標軸0,首先接着是行)

0

爲什麼是,有!

我在這裏遵循的模式是創建一個一個成員的集合,然後引用該集合的第一個項目。

with set currentDate as 
[Date].[Retail].[Date].&[20160725] 

然後引用它在您的查詢的其餘

currentDate.item(0) 
+0

謝謝大衛。這會有什麼性能好處?我的直覺說這是因爲它不需要計算所有其他措施的日期? – Lock

+0

使用這種模式有幾個優點。主要有兩個: 1.您可以在查詢中的某個位置設置日期,並在其他地方使用該成員。 2.它是一個真正的成員,所以現有的聚合將被使用(可能導致性能增益) 2a。再次,它是現有層次結構的一部分,因此您可以使用prevmember,parent,child等功能...... –