2012-03-13 37 views
0

我正在嘗試使用MDX查詢SSAS多維數據集,我有一個在多維數據集中排序的數值的列表,我想引用多維數據集中的相鄰單元格以便返回值。使用MDX滯後函數和潛導函數

WITH MEMBER Measures.[LastShift]<br> 
AS<br> 
(<br> 
    [Measures].[Impact Value GBP], <br> 
    [Dim Shift].[Shift Value1].PrevMember<br> 
)<br> 
MEMBER Measures.[NextShift]<br> 
AS<br> 
(<br> 
    [Measures].[Impact Value GBP], <br> 
    [Dim Shift].[Shift Value1].NextMember<br> 
)<br> 
SELECT <br> 
    {NONEMPTY([Measures].[Impact Value GBP]), <br> 
    Measures.LastShift,<br> 
    Measures.NextShift<br> 
    }<br> 
    ON 0,<br> 
    NONEMPTY([Dim Shift].[Shift Value1].[Shift Value1])<br> 
    ON 1<br> 
FROM [factTradeValues]<br> 

我可以在RDBMS中看到我確實有相鄰的值,但我無法讓MDX返回除null以外的任何內容。也許我很厚,但看不到解決方案。

感謝所有幫助

回答

1

PrevMember和NextMember是「成員函數」,所以你需要做這樣的事情......

WITH 
    MEMBER Measures.[LastShift] AS 
    (
     [Dim Shift].[Shift Value1].CurrentMember.PrevMember, 
     [Measures].[Impact Value GBP] 
    ) 
    MEMBER Measures.[NextShift] AS 
    (
     [Dim Shift].[Shift Value1].CurrentMember.NextMember, 
     [Measures].[Impact Value GBP] 
    ) 
+0

感謝您的建議,沒有奏效。我嘗試這樣做:WITH MEMBER措施[LastShift] AS ( [昏暗轉換] [移位值1] .LAG(1), [措施] [衝擊值] 。) MEMBER措施[NextShift] AS。 ( [Dim Shift]。[Shift Value1] .LEAD(1), [Measures]。[Impact Value] )'code' – 2012-03-23 16:13:28

+0

非常好 - 很高興你能夠正常工作......乾杯! – 2012-03-23 17:32:55

+0

MEMBER Measures.NextValue AS TAIL(NONEMPTY({NULL:[Dim Shift]。[Shift Value1] .LAG(1)} * [Measures]。[Impact Value]))Item(0)這是獲得下一個空值。我發現我正在挑選錯誤的值。 – 2012-03-29 13:54:36

0

要回答我的問題有原來是與prevmember問題和下一個成員,因爲我想在我的標準上下文中輪流引用下一個項目。我其實是想引用我的設定中的下一個項目,這是微妙的不同。

爲了引用集合中的一個項目,您使用item,然後使用rank來獲取相鄰的單元格。

/* Define the shifts appropriate for this scenario */ 
SET [SpotShifts] AS 
EXCEPT(
NONEMPTY([Dim Shift].[Shift Value1].[Shift Value1].MEMBERS, 
(
    [Dim Shift Entity].[Shift Entity].[GBP/FTSE], 
    [Dim Date].[Date].[Date].&[20120305], 
    {PriceImpacts 
    } 
    ,[Dim Instrument].[Arena Name].[CO/GBP/Lch10/FTSE/140908/Inc_Quarter/5L] 
)),[Dim Shift].[Shift Value1].&[0]) 

MEMBER Measures.CurrentSpotShift 
AS 
StrToValue([Dim Shift].[Shift Value1].CURRENTMEMBER.NAME) 

MEMBER Measures.NextSpotShift AS 
IIF((Measures.CurrentSpotShift<0), 
SpotShifts.Item(RANK([Dim Shift].[Shift Value1].CURRENTMEMBER,SpotShifts)-2).NAME, 
SpotShifts.Item(RANK([Dim Shift].[Shift Value1].CURRENTMEMBER,SpotShifts)).NAME) 

MEMBER Measures.PreviousSpotShift AS 
IIF((Measures.CurrentSpotShift<0), 
SpotShifts.Item(RANK([Dim Shift].[Shift Value1].CURRENTMEMBER,SpotShifts)).NAME, 
SpotShifts.Item(RANK([Dim Shift].[Shift Value1].CURRENTMEMBER,SpotShifts)-2).NAME) 

MEMBER Measures.NextValue AS 
IIF(Measures.CurrentSpotShift>0, 
([Measures].[Impact Value],SpotShifts.Item(RANK([Dim Shift].[Shift Value1].CURRENTMEMBER,SpotShifts))), 
([Measures].[Impact Value],SpotShifts.Item(RANK([Dim Shift].[Shift Value1].CURRENTMEMBER,SpotShifts)-2)) 

SELECT  { NONEMPTY([Measures].[Impact Value]), 
      (Measures.PreviousSpotShift), 
      (Measures.LastValue), 
      (Measures.NextSpotShift), 
      (Measures.NextValue)} ON 0, 
     NONEMPTY(SpotShifts) ON 1 
FROM factTradeCube 

我希望這可以幫助別人,因爲我發現項目中的使用等級不會明顯地解決了這個,但我得到了正確的結果只有一個。