2012-11-27 3 views
1

MDX에서 비교적 간단해야한다고 생각되는 부분을 수행하는 데 약간의 문제가 있습니다. 특정 시점에서 지난 2 주 동안 내 측정 값 중 하나의 합계를 제공하는 계산 된 구성원을 만들고 싶습니다. 이 특히 어렵게 무엇MDX의 CurrentMember를 기준으로 차원 필터링

TimeId TradingDate Day of Week 
----------------------------------- 
1000  11/1/2012  Thursday 
1001  11/2/2012  Friday 
1002  11/5/2012  Monday 
1003  11/6/2012  Tuesday 
...  ... 

내 시간 차원이 확실히 완료되지 않은 것입니다 : 같은 내 시간 차원 보인다. 내 Time 차원의 멤버는 모든 시간이 아닌 주식 시장의 거래일에만 해당합니다. 즉, 주말, 공휴일 또는 주식 시장이 종결 된 다른 날은 제외됩니다. 이것은 또한 정상적인 이동 시간 (예 : LAG 또는 PARALLELPERIOD)이 여기서 제대로 작동하지 않음을 의미합니다. 예를 들어, LAG(14)은 "14 거래일"을 의미하며, 특정 시점에서 실제 시간의 가변 길이를 나타낼 수 있습니다.

계산 된 멤버 내에서 CurrentMember의 지난 2 주 내에 멤버 만 얻으려면 FILTER를 사용하려고합니다. 그러나, 나는 이것을 성취하기위한 적절한 문법 (있는 경우)을 파악할 수 없다. 나는 그것이 다음과 같을 것이라고 상상한다 :

WITH MEMBER [Sum of Price Previous 2 Weeks] AS 
    SUM(
     FILTER(
      [Time].[TimeId].Children 
      , [Time].[TradingDate].MemberValue 
       >= VBA!DATEADD("ww", -2, [Time].[TradingDate].CurrentMember.MemberValue) 
     ) 
     , [Price] 
    ) 

그러나 이것은 잘 작동하지 않는다. FILTER 함수 내에서 별도의 컨텍스트가 될 것으로부터 계산 된 멤버의 현재 컨텍스트를 분리 할 수 ​​없습니다. 즉, 내가 말을하는 방법을 잘 모르겠어요 : FILTER의 내부 세트 반복하면

" 에 계산의 범위를 CurrentMember의 값에 대한 각 반복의 현재 회원 비교 회원 "

나는 가능한 것을 달성하기 위해 노력하고 있습니까? 내가 한 일을 성취하기 위해 취할 수있는 다른 접근법이 있습니까?

+0

SSAS에서 시간 차원이 시간 차원으로 올바르게 설정되어 있으며 다른 차원 특성을 해당 시간 구성 요소에 매핑 했습니까? 이렇게하면 MDX에서 사용할 수있는 시간 함수를 사용하는 데 도움이됩니다. – cairnz

+0

시간 차원은 SSAS에서 "시간"차원으로 설정되고 TradingDate 유형은 날짜입니다. 그러나 TimeId는 날짜로 간주 될 수 있는지 확실하지 않으므로 Regular로만 설정됩니다. 그것은 특정 날짜에 비록 대응합니다. 내 Time 차원이 절대로 완전한 시간 표현이 아니라는 점에 유의해야합니다. 그것은 주식 시장이 열려있는 거래 일을 나타냅니다. – mclark1129

+0

이 문제가 반복적으로 발생했습니다. CurrentMember는 차원이 축에 사용되지 않으면 "this iteration"을 참조합니다.그러나 내가 대답하기를 희망하는보다 일반적인 질문은 "어떻게 특성을 차원에 필터링 할 수 있습니까?"입니다. – Bill

답변

2

계산 된 구성원에서 가져올 결과는 쿼리 축에 따라 다릅니다. 먼저 축에 [Time].[TradingDate]이 있는지 확인하십시오.

두 번째로 [Time].[TradingDate] 계층 구조는 키순으로 정렬해야합니다 (키가 TradingDate이라고 가정).

WITH MEMBER [Sum of Price Previous 2 Weeks] AS 
     SUM(
      GENERATE([Time].[TradingDate].CurrentMember AS CurrentDateAlias, 
        FILTER(
          [Time].[TimeId].Children 
          , [Time].[TradingDate].MemberValue 
          >= VBA!DATEADD("ww", -2, CurrentDateAlias.Item(0).MemberValue) 
        ) 
      ) 
      , [Price] 
     ) 

별칭을 정의하는 바로 사용 생성 : 필터 맥락에서 외부 CurrentMember를 참조하는 사용자가 설정 한 별칭을 사용할 수 있습니다

WITH MEMBER [Sum of Price Previous 2 Weeks] AS 
    SUM(
     [Time].[TradingDate].CurrentMember.Lag(14):[Time].[TradingDate].CurrentMember, [Price] 
    ) 
+0

불행히도 내 Time 차원에는 시장 거래 일원 만 포함되어 있습니다. 주말, 공휴일 또는 시장이 종결 된 날과 같은 요일은 제외됩니다. 즉,'LAG (14)'는 실제 14 일과 일치하지 않으며, 어느 시점이든 지난 2 주에는 다양한 수의 멤버가 포함될 수 있습니다. 죄송합니다. 질문을 수정하고 다시 게시 할 때이 정보를 명시 적으로 포함하는 것을 잊었습니다. – mclark1129

1

:

이제이 멤버 정의를 사용할 수 있습니다 어딘가에.

관련 문제