在MDX查询中求和和分组

时间:2013-09-03 14:19:58

标签: ssas mdx

我需要一个MDX查询来汇总一列中的数据,并根据其类型汇总另一列中的数据。例如,我当前的查询是:

    SELECT 
 { [Measures].[DeclCount], [Measures].[SubCount]} ON COLUMNS, 
 {  (
 [Organization].[OrganizationKey].[OrganizationKey].ALLMEMBERS * 
 [Organization].[Name].[Name].ALLMEMBERS * 
 [Organization].[Need Declaration10].[Need Declaration10].ALLMEMBERS *  
 [DeclType].[DeclarationNumber].[DeclarationNumber].ALLMEMBERS
 )
}  
  ON ROWS
FROM 
(
    SELECT
        DESCENDANTS([Organization].[OrganizationKey].CHILDREN) on COLUMNS
    FROM 
    (
        SELECT ([Organization].[Code].&[0105044397] ON COLUMNS
        FROM [MyCube]
    )
)

目前的结果是:     代码 - 名称 - 需要声明10 - DeclType - DeclCount - SubCount     Code1 - Organization1 - 0 - 1 - NULL - NULL     Code1 - Organization1 - 1 - 2 - 1 - 2     Code1 - Organization1 - 1 - 3 - 2 - 2

期望的结果是:

Code - Name - Sum(Need Declaration10) - SumDeclCount1 - SumSubCount1 - SumDeclCount2 - SumSubCount2 - SumDeclCount3 - SumSubCount3
Code1 - Organization1 - 2 - NULL - NULL - 1 - 2 - 2 -2 

如何通过MDX实现这一目标?谢谢你的帮助。

编辑: 谢谢弗兰克,这几乎是我需要的一切。 最后两件事是:  1.我有10种不同的[DeclType]。[DeclarationNumber]。是否可以修改([DeclType]。[DeclarationNumber]。所有,措施。[需要声明的总和10])计算每个的总和?  2.我需要使用此查询填充SSRS报告。是否可以从此查询中获取展平数据集?理想的灵魂将被设置为 (OrganizationKey,OrganizationName,DeclCount_X,SubCount_X,SumOfNeed_X) 其中X = 1..10

1 个答案:

答案 0 :(得分:1)

正如我在评论中已经说过的那样,这比应该更加困难,因为[DeclarationNumber]是一个属性/层次结构,而不是一个度量。我希望下面的解决方法能够正常工作,假设[DeclarationNumber]只包含整数值。然而,它们必须从String转换为数字类型才能使用它们类似于度量。

简单的部分是移动[DeclType].[DeclarationNumber]移动到列。

WITH MEMBER Measures.[Declaration10 numeric] as
            CInt([Organization].[Need Declaration10].CurrentMember.Name)
     MEMBER Measures.[Sum of Need Declaration10] as
            Sum(EXISTING [Organization].[Need Declaration10].[Need Declaration10].Members,
                Measures.[Declaration10 numeric]
            )
SELECT { ( 
           [DeclType].[DeclarationNumber].All,
           Measures.[Sum of Need Declaration10]
       ) }
       +
       (
         [DeclType].[DeclarationNumber].[DeclarationNumber].Members
         *
         {[Measures].[DeclCount], [Measures].[SubCount]}
       )
       ON COLUMNS,

       [Organization].[OrganizationKey].[OrganizationKey].ALLMEMBERS
       * 
       [Organization].[Name].[Name].ALLMEMBERS
       ON ROWS
FROM 
(
    SELECT
        DESCENDANTS([Organization].[OrganizationKey].CHILDREN) on COLUMNS
    FROM 
    (
        SELECT ([Organization].[Code].&[0105044397] ON COLUMNS
        FROM [MyCube]
    )
)

由于我无法访问您的多维数据集,因此可能需要进行一些调整,无论是语法还是语句的某些逻辑。