2014-03-07 3 views
2

사용자가 분석에 사용할 수 있도록 여러 시간 차원을 포함하는 SSAS 큐브를 작성합니다. 예를 들어, 나는 다음과 같은 날짜 (작업 항목 추적 시스템의 어떤 종류의 상상)SSAS의 날짜 및 시간 범위 측정

  • 만든 날짜
  • 시작 날짜
  • 청산 날짜
  • 마지막 편집 날짜가 가정

사용자 수도 다음을 원합니다.

  • 평균값보기 e 항목이 작성된 날짜와 시작된 날짜 사이의 일 수
  • 시작되는 항목과 닫히는 항목 사이의 최대 시간보기
  • 시작 날짜와 시작 날짜 사이의 최소 시간 폐쇄 날짜
  • 등 ... 한마디로

, 그들은이 날짜의 가장 사이의 날짜/시간 비교를 참조 (전부는 아니지만) 할 수 있어야합니다.

많은 날짜가있는 시스템에서 어떻게 이것을 제공 할 수 있습니까? (바람직 장치 필드 A bazillion "X와 Y의 차이"를 추가하지 않고)

+0

SSAS 표 또는 다차원? –

+0

정확하게 계산하면 네 개의 요소 집합 중 여섯 개의 서로 다른 두 요소 집합이 있습니다. 이자형. 여섯 가지 다른 점이 있습니다. 이는 X와 Y 필드의 'bazillion'차이보다 약간 작습니다.;-) 그리고 세 가지 다른 집계 ('최대', '최소', '평균')를 사용하여 이들을 세 배로 늘리더라도 18 개의 측정만으로 끝납니다. 이는 제 의견으로는 큐브에 대한 합리적인 수의 측정입니다 . – FrankPl

+0

@mike Multidimensional – Justin

답변

1

는 계속 그것을

간단한 방법은 단 4 일 개 유형으로 만 여섯 개 가지 차이가있을 것입니다, 이러한 조치를 이행 할 수 , 세 가지 다른 집계를 적용하면 18 가지 방법으로 끝나게됩니다. 이는 합리적 일 것입니다. 측정 값의 "폴더 표시"속성을 사용하고 클라이언트 도구에서이 값을 사용하는 경우 사용자가 40 또는 50 개의 측정 값을 사용하여 쉽게 찾을 수 있다고 생각합니다. 기술적으로 구현할 수있는 경우에도 비즈니스 관점에서 이해할 수없는 몇 가지 조합이 있습니다.

  • : 세 가지 속성을 가진 유틸리티 차원을 만듭니다

    유틸리티

    또 다른 방법은 어쨌든 다차원 큐브를 사용하는 등,보기의 차원 점에서이 보는 것 속성 "From date"에는 "Created", "Started", "Closed"및 "Last Edit"의 네 멤버가 있습니다.

  • "날짜가"인 경우 각 날짜 유형마다 멤버가 하나씩 있지만
  • 이고 "Ag gregation "에는"최소 ","최대 "및"평균 "의 세 가지 구성원이 있습니다.

이 치수는 어떤 측정 값 그룹과도 완전히 관련이 없습니다. 그것이 기반으로하는 테이블은 이러한 속성의 모든 (유효한) 조합을 포함합니다.

계산 된 측정 값인 "시간 차이"라는 단일 측정 값만 사용합니다.

최종 사용자가 쉽게 이해할 수있는 방법으로 특성과 구성원 및 측정 값의 이름을 바꾸는 것이 좋습니다.

그런 다음 계산 스크립트에서 세 가지 특성의 CurrentMember을 확인하는 방식으로 "시간 차이"측정을 구현 한 다음 적절한 계산을 수행합니다. 이 유사 수 : 큐브의 크기에 따라 약간의 성능 조정이 필요할 수 있습니다

CASE 
    WHEN IsError([Utility].[From Date].CurrentMember) // multi selection 
     OR [Utility].[From Date].CurrentMember IS [Utility].[From Date].[All] 
     OR IsError([Utility].[To Date].CurrentMember) 
     OR [Utility].[To Date].CurrentMember IS [Utility].[To Date].[All] 
     OR IsError([Utility].[Aggregation].CurrentMember) 
     OR [Utility].[Aggregation].CurrentMember IS [Utility].[Aggregation].[All] THEN 
      NULL // these special cases are invalid 
    ELSE 
     CASE 
      WHEN [Utility].[Aggregation].CurrentMember IS [Utility].[Aggregation].[Minimum] THEN 
       Min(Leaves(), 
        CASE 
         WHEN [Utility].[To Date].CurrentMember IS [Utility].[To Date].[Started] THEN 
           Measures.StartDate 
         WHEN [Utility].[To Date].CurrentMember IS [Utility].[To Date].[Closed] 
           Measures.ClosedDate 
         ... 
         END 
         - 
        CASE 
         WHEN [Utility].[From Date].CurrentMember IS [Utility].[From Date].[Started] THEN 
           Measures.StartDate 
         WHEN [Utility].[From Date].CurrentMember IS [Utility].[From Date].[Closed] 
           Measures.ClosedDate 
         ... 
         END 
        ) 
      WHEN [Utility].[Aggregation].CurrentMember IS [Utility].[Aggregation].[Minimum] THEN 
       Max(Leaves(), 
        ... // repeat code from above 
        ) 
      WHEN [Utility].[Aggregation].CurrentMember IS [Utility].[Aggregation].[Average] THEN 
       Avg(Leaves(), 
        ... // repeat code from above 
        ) 
     END 
END 

이 코드는, 그러나 당신은 생각을해야합니다 단지 속성의 모든 경우를 확인하고 적절한 계산을 구현한다.

두 번째 방법의 단점은 사용자가 교육이 필요하다는 것입니다. "시간 차이"측정이 작동하려면 모든 쿼리에 세 가지 특성을 추가하고 적절하게 선택을 적용해야합니다. 클라이언트 도구에 따라 개별 선택 항목이있는 세 가지 속성을 가질 수 없습니다. e. 지.

Attrib | Col 1 | Col 2 
From | Created | Started 
To  | Started | Closed 
Agg | Min  | Max 

과 같이 두 개의 열이 있지만 선택한 구성원의 교차 생성 만 가능합니다.

그리고 다중 선택 또는 전혀 선택이없는 경우 (즉, CurrentMemberAll 회원) 사용자에게 유틸리티 속성에 대해주의를 기울여야합니다. 모든 단점 후

, 여기에 유틸리티 차원의 접근 방식은이 경우, 다른 대상에 적용 할 수있는 방법에 대한 설명입니다 날짜에 년 성장과 전년 대비 올해 같은 시간 계산 : http://sqlblog.com/blogs/marco_russo/archive/2007/09/02/datetool-dimension-an-alternative-time-intelligence-implementation.aspx

혼합 접근

마지막으로 혼합 된 방법을 사용할 수 있습니다. 지. 모든 날짜 유형 조합에 대한 계수를 작성하지만 집계에 대한 유틸리티 속성.

+0

귀하의 유틸리티 방법은 재미 있지만, 나는 BIDS에서 그것을 만드는 방법을 이해하는 데 어려움을 겪고 있습니다. 유틸리티 차원은 필자의 팩트 테이블과 어떤 관련이 있으며 "시간 차이"가 특정 측정 값 그룹에 들어 있어야합니까? – Justin

+0

@Justin 나는 좀 더 많은 정보를 추가하여 나의 대답을 편집했다. 그러나이 접근 방식을 사용한 경험은 대부분의 사용자가 표준 방식을 쉽게 이해할 수있는 반면 세부적인 설명/교육 및 익숙하지 않은 사용자는 극소수의 사용자 만 이해할 수 있다는 것입니다. – FrankPl

+0

설명해 주셔서 감사합니다.하지만 저는 여전히 유틸리티 차원에서 고심하고 있습니다. 차원은 단일 테이블 또는 여러 테이블을 기반으로하며 테이블의 데이터는 무엇입니까? 또한이 차원의 핵심은 무엇입니까? 또한 대략적으로 계산 스크립트는 어떻게 생겼을까요? – Justin

0

필자는 기존 사실을 기반으로 각각의 의미있는 날짜 조합마다 기존 사실 행 당 하나의 행을 사용하여 새로운 사실을 만들 것입니다. 예 : 'Created Date to Closed Date'의 경우 1 행, 'Created Date to Last Edit Date'행의 경우 의미있는 조합 (예 : 'Closed Date to Created Date'행이 없습니다. 날짜를 '오늘'과 비교하는 추가적인 유용한 조합이있을 수 있습니다.

필자는보기를 사용하여 일련의 SELECT 및 UNION ALL 절 (의미있는 날짜 조합 당 하나씩)을 사용하여이 빌드를 작성했습니다. 각 SELECT 절의 디자인은 기존의 사실 데이터의 모든 행과 열과 의미있는 날짜 조합을 설명하는 문자 열을 더하여 datediff의 SQL 계산과 며칠 단위의 시간차를 반환하는 것입니다.

그런 다음이 새 뷰를 큐브에 추가하여 현재 팩트의 차원 관계를 "복사"하고 싶습니다. 며칠 안에 시간대별로 평균, 최소 및 최대 변종을 만들겠습니다 (6 번 측정).

마지막으로 의미있는 날짜 조합을 설명하기 위해 열을 기준으로 사실 (축퇴/정크) 차원을 작성했습니다.