对MDX查询结果进行分组

时间:2013-02-27 08:40:38

标签: ssas mdx

我有以下查询(基于Microsoft®SQLServer®2008MDX Step by Step一书提供的示例数据):

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月份的订单数量。

最后,我对几个月的细节并不感兴趣: 我想要的只是放在特定产品上的简单订单数量(即我想要放弃/隐藏有关订单月份的信息)。

所以而不是

  • Mountain Bottle Cage,176,January
  • Mountain Bottle Cage,二月,183
  • Road Bottle Cage,141年1月
  • Road Bottle Cage,二月,152
  • 水瓶 - 30盎司,381年1月
  • 水瓶 - 30盎司,二月,403
  • 水瓶 - 30盎司,3月,414

我需要:

  • Mountain Bottle Cage,359(176 + 183)
  • Road Bottle Cage,293(141 + 152)
  • 水瓶 - 30盎司,1198(381 + 403 + 414)

我尝试将important_months设置为where子句,但是(除了由于自定义设置引起的循环引用错误)我将无法投影 行轴上的类别(我会吗?)。另外,我想过使用子查询,但看起来我也不能在那里引用important_months。

换句话说:我需要通过发布

获得SQL中的结果
SELECT SUM([Order Count]) 
FROM <MDX RESULT HERE> 
GROUP BY Product

可以吗?

2 个答案:

答案 0 :(得分: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]
 )

答案 1 :(得分:0)

您正在创建一个非对称集(仅限March for Water Bottle),因此您无法在WHERE子句中直接对此进行切片,而不将其包含在所有其他产品中。

icCube的回答对我来说很好,还有一个小的补充:在行选择中添加一个DISTINCT,将Water Bottle组合成一行。

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]
)