MDX对结果集进行bucketizing并分配频率

时间:2013-12-26 11:10:49

标签: ssas mdx ssas-2008

我有一个场景,必须对结果集进行分区并指定频率。

例如,以下MDX查询:

WITH MEMBER [MEASURES].[PERC_1] AS
    AGGREGATE ( EXISTING  [DIM CUSTOMER].[CUSTOMER ID].[ALL].CHILDREN,[MEASURES].[AMOUNT])

SELECT
[MEASURES].[PERC_1] ON 0,
[DIM CUSTOMER].[CUSTOMER ID].CHILDREN,[DIM CUSTOMER].[NAME].CHILDREN        
FROM [ANALYSIS DW]
WHERE ([DIM CUSTOMER].[ADDRESS].[ALL])

应该返回此结果:

     Perc1
 C1   10
 C2   0
 C3   20
 C4   30
 C5   40
 C6   50
 C7   50 
 C8   50 
 C9   90
 C10  100

现在,我希望将此结果集划分为存储桶。如果我的桶大小为3,则桶应为

  • 0-30
  • 31-60
  • 61-100

这些存储桶是根据上述perc_1指标的最大值和最小值计算得出的;即,0最小,100最大。铲斗计算为(0 + 100)/ 3 - (0-30,31-60,61-100)。

现在,上述结果集中频率分布后的结果应如下所示 -

         frequency
 0-30      4
 31-60     4 
 61-100    2

我无法访问OLTP设计/ SSAS Cube解决方案。

1 个答案:

答案 0 :(得分:2)

WITH SET [0-30 set] AS
         Filter([DIM CUSTOMER].[CUSTOMER ID].CHILDREN,
                [MEASURES].[PERC_1] >= 0 AND [MEASURES].[PERC_1] <= 30
               )
     SET [31-60 set] AS
         Filter([DIM CUSTOMER].[CUSTOMER ID].CHILDREN,
                [MEASURES].[PERC_1] >= 31 AND [MEASURES].[PERC_1] <= 60
               )
     SET [61-100 set] AS
         Filter([DIM CUSTOMER].[CUSTOMER ID].CHILDREN,
                [MEASURES].[PERC_1] >= 61 AND [MEASURES].[PERC_1] <= 100
               )
     MEMBER [DIM CUSTOMER].[CUSTOMER ID].[0-30] AS
            NULL
     MEMBER [DIM CUSTOMER].[CUSTOMER ID].[31-60] AS
            NULL
     MEMBER [DIM CUSTOMER].[CUSTOMER ID].[61-100] AS
            NULL
     MEMBER [Measures].[frequency] AS
            CASE [DIM CUSTOMER].[CUSTOMER ID].CurrentMember
                 WHEN [DIM CUSTOMER].[CUSTOMER ID].[0-30] THEN
                      [0-30 set].Count
                 WHEN [DIM CUSTOMER].[CUSTOMER ID].[31-60] THEN
                      [31-60 set].Count
                 WHEN [DIM CUSTOMER].[CUSTOMER ID].[61-100] THEN
                      [61-100 set].Count
            END
SELECT { [Measures].[frequency] } ON 0,
       { 
         [DIM CUSTOMER].[CUSTOMER ID].[0-30],
         [DIM CUSTOMER].[CUSTOMER ID].[31-60],
         [DIM CUSTOMER].[CUSTOMER ID].[61-100]
       } ON 1
  FROM [ANALYSIS DW]
WHERE ([DIM CUSTOMER].[ADDRESS].[ALL])

我认为你不能在MDX中完全做到这一点,因为“3”是MDX查询的参数,因为你至少需要在MDX语句中明确地拥有类似于桶的成员定义的东西。 WITH子句(或会话级CREATE语句)是您可以创建行轴上显示的成员的唯一位置,即使它们仅用作占位符且不包含任何逻辑。

您需要一个外部工具来生成如上所述的参数特定MDX语句。