2011-11-22 7 views
2

타임 스탬프 t1에서 t2까지의 데이터를 가져 오려고합니다. 그러나 t1과 t2는 필자의 데이터베이스 테이블에 꼭 필요한 것은 아닙니다. 그래서, 내가 원하는 것은 다음과 같습니다 : t1보다 크거나 같은 다음 타임 스탬프를 찾아야합니다 (t1이 db 테이블에 없거나 t1이있을 경우> t1) 그리고 t2보다 작거나 같은 마지막 사용 가능한 타임 스탬프 (< t2가 없으면 t2, db에 있으면 t2) MDX 쿼리 자체에 저장됩니다.몬드리안의 날짜 범위

난 DB에서 사용할 수있는 모두 (타임 스탬프> = t1과 < = T2에 수 원하는대로 .FirstSibling이 .LastSibling는, .FirstChild는, .LastChild는, .NextMember는, .LastMember는, 머리가, TAIL 나를 위해 작동하지 않습니다

). 어떻게해야합니까?

답변

0

MDX로 ​​이런 방식으로 날짜를 표시하는 것은 고통 스러울 수 있습니다. Name 또는 Caption을 문자열/숫자/날짜로 변환하고 입력 매개 변수 인 t1 및 t2 (이와 유사하게 문자열/숫자/날짜가 같은 형식으로 변환 됨)와 비교하여 과거에 유사한 작업을 수행했습니다.

아마도 t1은 "31/12/2010"이라는 문자열이고 [Time]. [All Time]. [2010]. [12 월]. [29]와 같은 멤버가 큐브에 포함되어 있습니다. 비교할 공통 형식으로 변환해야합니다. MDX는 MemberToStr()과 같은 메서드를 제공합니다.이 메서드는 .CurrentMember의 문자열 표현을 제공하며이 둘을 비교할 수 있습니다. 당신이 ReplaceInStr로 문자열을 조작하고, 심지어 입력 매개 변수와 같은 형태의 값을 얻기 위해 같은 CDate()으로 함수를 호출 할 수 있도록

VBA 함수는 MDX의 일부 맛을 사용할 수 있습니다.

당신은 내가 크게에서는 CDate 함수가 받아 들일 것이라는 점을 문자열로 회원의 캡션을 얻기 위해 필요한 조작을 단순화 불구하고 ... 이런 식으로 뭔가를 보일 수 있습니다 최종 MDX :
SELECT
{Filter({[Time].[Day].members}, CDate([Time].CurrentMember.Caption) <= CDate("2010-12-31"))} ON ROWS,
[Measures].[Something] ON COLUMNS
FROM [CubeName]

행 절은 처음이다 [Day] 레벨의 모든 [Time] 멤버 집합을 가져온 다음 해당 집합을 필터링하여 캡션 (날짜 개체로 변환 됨)이 입력 문자열보다 작거나 같은 날짜 만 남겨 둡니다 (날짜로 변환 됨). 목적).