我有以下查询(基于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月份的订单数量。
最后,我对几个月的细节并不感兴趣: 我想要的只是放在特定产品上的简单订单数量(即我想要放弃/隐藏有关订单月份的信息)。
所以而不是
我需要:
我尝试将important_months设置为where子句,但是(除了由于自定义设置引起的循环引用错误)我将无法投影 行轴上的类别(我会吗?)。另外,我想过使用子查询,但看起来我也不能在那里引用important_months。
换句话说:我需要通过发布
获得SQL中的结果SELECT SUM([Order Count])
FROM <MDX RESULT HERE>
GROUP BY Product
可以吗?
答案 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]
)