2013-02-27 4 views
0

내가 쿼리 다음 한 결과 (마이크로 소프트 SQL Server®와 함께 제공되는 샘플 데이터를 기반으로 2008 단계 책으로 MDX 단계) :그룹화 MDX 쿼리

WITH 
SET important_months AS 
{ 
    ([Product].[Product Categories].[Subcategory].&[28].CHILDREN , {[Date].[Month of Year].&[1], [Date].[Month of Year].&[2]}), 
    ([Product].[Product Categories].[Product].&[477]    , {[Date].[Month of Year].&[3]}) 
} 

SELECT [Measures].[Order Count] ON COLUMNS, 
    important_months ON ROWS 
FROM [Step-by-Step] 

쿼리에서 제품에 접수 된 주문의 수를 표시 특정 개월에 특정 하위 범주. 카테고리 28의 모든 제품에 대해 1 월 또는 2 월 (1 월 또는 2 월) 주문 건수가 필요합니다. 예외는 제품 447에 대한 주문입니다.이 경우에는 3 월에 주문한 수를 추가해야합니다.

그러나 월간 세부 사항에 대해서는별로 관심이 없습니다. 원하는 제품을 주문한 간단한 주문입니다. 즉, 해당 달에 대한 정보를 숨기거나 숨길 수 있습니다. 명령이 내려졌다).

그래서 대신

  • 산 병 케이지 월, 176
  • 산 병 케이지, 2 월, 183
  • 도로 병 케이지 월, 141
  • 도로 병 케이지, 2 월, (152)
  • 물병 - 30 온스, 1 월, 381
  • 물병 - 30 온스, 2 월, 403
  • -3210
  • 물병 30온스, 3 월, 414

나는이 필요합니다 :

  • 산 병 케이지, 359 (+ 183 176)
  • 도로 병 케이지, 293 (141 + 152)
  • 물병 -. 30 온스, 1,198 (381 + 403 + 414)

I 원형 외에 기준 (WHERE 절에 설정된 important_months줌으로써했지만, 오류가 사용자 정의 집합으로 인해) 나는 축을 축에 범주를 투영 할 수 없을 것입니다 (나?). 또한 하위 쿼리 사용을 고려했지만 important_months 집합을 참조 할 수는 없습니다.

즉 : 나는 SQL에서 내가

SELECT SUM([Order Count]) 
FROM <MDX RESULT HERE> 
GROUP BY Product 

이 그것을 할 수 실행하여 얻을 것이라는 결과를 얻을해야합니까?

답변

1

교양있는 추측은 MDX Subqueries이 해결책이라는 것입니다. 당신은 부속에 사용 튜플을 시도해 봤어 :

WITH 
    SELECT [Measures].[Order Count] ON COLUMNS, 
    {[Product].[Product Categories].[Subcategory].&[28].CHILDREN,[Product].[Product Categories].[Product].&[477]} ON ROWS 
FROM ( 
    SELECT 
    {([Product].[Product Categories].[Subcategory].&[28].CHILDREN,{[Date].[Month of Year].&[1], [Date].[Month of Year].&[2]}), 
    ([Product].[Product Categories].[Product].&[477],{[Date].[Month of Year].&[3]})} ON 0 
    FROM [Step-by-Step] 
) 
+0

답변 해 주셔서 감사합니다. 이것은 내 문제를 해결 한 것 같다.그러나 하위 쿼리에서 세션 범위 멤버를 사용하려고했는데 큐브에서 멤버를 찾을 수 없다는 오류 메시지와 함께 실패했습니다. AFAIK 이것은 올바른 동작입니다.이 문제를 피할 수있는 가능성이 있습니까? 아니면 하위 뷰에 액세스 할 수 있도록 큐브 정의에 멤버를 추가해야합니까? – Szymon

0

당신은 (물병 만 3 월에) 비대칭 세트를 만드는, 그래서 당신이 정말로 그것을 포함하지 않고 WHERE 절에서 직접이 슬라이스 수 없습니다 다른 제품들.

icCube의 대답은 하나의 작은 추가와 함께 나에게 좋을 것 같습니다. 행 선택에 DISTINCT를 추가하여 워터 병을 하나의 행으로 다시 결합합니다.

WITH 
    SELECT [Measures].[Order Count] ON COLUMNS, 
    DISTINCT {[Product].[Product Categories].[Subcategory].&[28].CHILDREN, [Product].[Product Categories].[Product].&[477]} ON ROWS 
FROM ( 
    SELECT 
    {([Product].[Product Categories].[Subcategory].&[28].CHILDREN,{[Date].[Month of Year].&[1], [Date].[Month of Year].&[2]}), 
    ([Product].[Product Categories].[Product].&[477],{[Date].[Month of Year].&[3]})} ON 0 
    FROM [Step-by-Step] 
)