2013-02-27 104 views
0

一個(基於提供與Microsoft SQLSERVER®樣本數據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
  • 山水壺架,二月,183
  • 路水壺架,一月141
  • 路水壺架,二月,152
  • 水瓶 - 30盎司,一月,381
  • 水瓶 - 30盎司,二月,403
  • 水瓶 - 30盎司,三月,414

我需要有:

  • 山水壺架,359(176 + 183)
  • 路水壺架,293(141 + 152 )
  • 水瓶 - 30盎司,1198(381 + 403 + 414)

我試圖把套入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 2013-03-12 14:13:33

0

你創建一個非對稱組(同月僅用於水瓶),所以你不能真正在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] 
)