2017-09-27 126 views
0

需要产生在MDX一个特定的输出和我在努力产生期望的结果。我正在尝试使用ADW Cube构建一个示例。获得同样的措施在两列并排的侧不同的时间段中MDX

我需要制作一个表格,我有三列:

  1. 某些类别(城市在这个例子中,但本专栏将 最终动态更改在SSRS所选参数),
  2. 一些措施该类别(在这个例子中网络销售部)某个月份的
  3. 同样的措施在第二列,但对于前一个月

表应该被过滤仅基于在第二列措施前三名最高的项目。

下面是我到目前为止所得到的一些简单的静态示例,但是这个想法基本上是这样的:用户在参数中选择一些值,这些值将对表格进行过滤的数据进行子集化(由[Country](Canada )在示例中)。然后,他将选择他希望得到结果的某个层级中的粒度级别(在该示例中由[City]表示)。他会选择期望的时间段(具体的[年份]和[月份])。在运行查询, 他应该得到类似的表如下(在那里他根据第二列前三名的结果):

Category  Internet Sales Amount (CurrentPeriod) Internet Sales Amount (PreviousPeriod) 
Langford  $13,468.39        null 
Vancouver  $12,291.48        $7,447.26 
Sooke   $11,563.01        null 

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

这是我到目前为止。我是能够产生表的前两列,但我很努力,包括第三列也是如此。我来自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]) 

回答

0

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

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