Использование функций задержки и отведения MDX - PullRequest
0 голосов
/ 13 марта 2012

Я пытаюсь запросить куб 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>

В РСУБД я вижу, что у меня есть смежные значения, но я не могу заставить MDX возвращать что-либо, кроме нуля. Может быть, я худой, но не вижу решения.

Спасибо за любую помощь

Ответы [ 2 ]

1 голос
/ 16 марта 2012

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 голосов
/ 12 апреля 2012

Чтобы ответить на мой собственный вопрос, оказалось, что есть проблемы с prevmember и nextmember, потому что я хотел ссылаться на следующий пункт по очереди в контексте моих критериев. Я действительно хотел сослаться на следующий элемент в моем наборе, который немного отличается.

Для ссылки на предмет в наборе вы используете предмет, а затем я использовал ранг, чтобы получить соседнюю ячейку.

/* 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

Надеюсь, это кому-нибудь поможет, поскольку использование ранга внутри предмета показалось мне не очевидным решением, но единственным, которое дало мне правильные результаты.

...