在 MDX 中的不同时间段内并排获取相同度量值的两列

Getting the same measure in two columns side-by-side for different time periods in MDX

需要在 MDX 中生成特定的输出,我正在努力生成所需的结果。我正在尝试使用 ADW Cube 构建示例。

我需要生成一个 table,其中有三列:

  1. 一些类别(本例中为城市,但此列将 最终根据 SSRS 中选定的参数动态更改),
  2. 特定月份的类别(在此示例中为 Internet 销售)的一些度量
  3. 与第二列中相同的度量,但针对上个月

table 应根据第二列中的度量仅过滤到前三项最高的项目。

下面是我到目前为止得到的一些简单的静态示例,但基本上是这样的想法:用户在参数中选择一些值,这些值将对 table 将被过滤的数据进行子集化(表示为[国家](示例中的加拿大))。然后,他将在他想要的结果的某个层次结构中选择粒度级别(在示例中由 [City] 表示)。然后他将选择所需的时间段(特定 [年] 和 [月])。根据 运行 查询, 他应该得到如下类似的 table(根据第二列,他获得了前三名的结果):

Category      Internet Sales Amount (CurrentPeriod) Internet Sales Amount (PreviousPeriod)
Langford      ,468.39                             null
Vancouver     ,291.48                             ,447.26
Sooke         ,563.01                             null

第一列表示选择的粒度。第二列代表给定项目的所选年月组合的 Internet 销售额,第三列代表所选组合前一个月的 Internet 销售额。

这是我到目前为止得到的。我能够生成 table 的前两列,但我很难将第三列也包括在内。我来自 SQL,对 MDX 还很陌生,所以如果我问的问题看起来很简单,或者我目前的方法与应该如何完成相去甚远,请多多包涵。

SELECT [Measures].[Internet Sales Amount] ON 0,  
TopCount  
   ({[Customer].[City].[City].Members}  
   , 3  
   , [Measures].[Internet Sales Amount]
   ) ON 1  
FROM [Adventure Works]  
WHERE ( [Customer].[Country].&[Canada], 
        [Date].[Calendar Year].&[2007], 
        [Date].[Month of Year].&[12] )

好的,我设法解决了这个简化的例子。

WITH 
  MEMBER [Measures].[SalesPrevMth] AS 
    (
      [Measures].[Internet Sales Amount]
     ,[Date].[Calendar].CurrentMember.PrevMember
    ) 
SELECT 
  NON EMPTY 
    {
      [Measures].[Internet Sales Amount]
     ,[Measures].[SalesPrevMth]
    } ON COLUMNS
 ,NON EMPTY 
    TopCount  
     ({
        [Customer].[City].[City].Members
      * 
        [Date].[Calendar].[Month].ALLMEMBERS
      }, 3, [Measures].[Internet Sales Amount]) ON ROWS
FROM 
(
  SELECT 
    [Date].[Calendar].[Month].&[2007]&[12] ON COLUMNS
  FROM [Adventure Works]
)
WHERE [Customer].[Country].&[Canada];