2016-06-02 9 views
0

교차 결합을 포함하는 MDX 쿼리에서 결과 집합을 주문하고 싶습니다.교차 결합 이후/결과를 사용하여 결과를 정렬 (및 최상위 필터링)하는 MDX 쿼리

나는 다음과 같은 측정 값 및 차원이 있습니다.

  • [조치] [시작]
  • [워크] [워크 이름]
  • [워크] [통로 이름]
..

[Measures]. [Starts]의 상위 25 개 숫자에 해당하는 (해당하는) Framework 및 Pathway 이름의 목록을 만들고 싶습니다.

I 출력에 사용 결과의 전체 목록을 관리 한 : 나는 그것이 내림차순으로 시작으로 분류 할 필요가, 그러나 example table required

:

select [Measures].[Starts] on COLUMNS, 
NON EMPTY CrossJoin(
Hierarchize({DrilldownLevel({[Framework].[Pathway Name].Children})}), 
Hierarchize({DrilldownLevel({[Framework].[Framework Name].Children})}) 
) on ROWS 
from [DataCube] 

다음 예제 출력을 생성하기를 (그리고 선호 상위 25 개 결과 만 유지하는 것이 바람직 함). 나는 거의 모든 것을 시도했고 실패했다. Google 검색 결과가 없습니다.

답변

0

TopCount 함수에서 비틀 거 렸니?

select [Measures].[Starts] on COLUMNS, 
NON EMPTY 
    TopCount 
     (
     CrossJoin 
      (
      Hierarchize({DrilldownLevel({[Framework].[Pathway Name].Children})}), 
      Hierarchize({DrilldownLevel({[Framework].[Framework Name].Children})}) 
      ), 
     25, 
     [Measures].[Starts] 
     ) on ROWS 
from [DataCube] 

여기는 msdn link입니다.

H2H는 TopCount 기능을 사용하기 전에 세트를 주문하는 것이 좋습니다 효율성을

+0

감사합니다! 나는 그 유용한 기능을 발견하지 못했습니다. 그것은 내가 필요한 것을 해낸다. –

0

:

WITH 
SET [SetOrdered] AS 
    ORDER(
    {DrilldownLevel([Framework].[Pathway Name].Children)} 
    *{DrilldownLevel([Framework].[Framework Name].Children)} 
    ,[Measures].[Starts] 
    ,BDESC 
) 
SET [Set25] AS 
    TOPCOUNT(
    [SetOrdered] 
    ,25 
) 
SELECT 
    [Measures].[Starts] on 0, 
NON EMPTY 
    [Set25] on 1 
FROM [DataCube]; 
+0

그냥 궁금 해서요 - 어떻게 더 효율적입니까? 캐싱은 전혀 차이가 없습니다. 둘째,'TopCount '대신'Head'를 사용할 수 있습니다. 그것은 성능 측면에서 조금 더 좋은 점수를 얻었을 것입니다. – SouravA

+0

@SouravA 2008R2부터 수정 된 것이 확실하지만 엄지 손가락의 일반적인 규칙은 TopCount_의 세 번째 인수를 사용하지 않는다는 것을 확신하지 못합니다. ... 미리 설정된 순서대로 정렬합니다. 정렬 된 집합은 다음 고정 배열로 저장됩니다. 큐브 공간의 셀과 TopCount는 정확히 어디를 볼 수 있는지 알고 있습니다. 필요할 경우 참조를 찾을 수 있습니까? – whytheq

+0

@SouravA Rank 함수와 혼동을 느낄 수도 있습니다. 여기에서 : http://sqlblog.com/blogs/mosha/archive/2006/03/14/ranking-in-mdx.aspx Mosha는 게시물 끝에 "MDX에서이 쿼리 계획을 표현하는 방법, MDX의 명명 된 세트는 항상 정적입니다. 즉, 정의 된 컨텍스트에서 평가됩니다. 정적은 Materialized를 의미하지 않습니다. 예를 들어 CrossJoin은 완전히 정적 일 수 있지만 구체화되지는 않습니다.) 그리고 해시 인덱스는 정적 세트 위에 구축됩니다. "_ 날씨 이것은 TopCount에도 도움이 될 수 있습니다 - 아마도 – whytheq