MDX表示层次结构子集的总百分比

时间:2012-02-08 03:23:23

标签: mdx

我有一些基本的mdx问题。我需要在层次结构中计算总数的百分比,当我想要一个不包含完整层次结构的结果集时,我遇到了问题。

我有一个相当基本的维度,看起来像

Groups
    Group A
        Item 1
        Item 2
        Item 3
    Group B
        Item 4
        Item 5
    Group C
        Item 6
        Item 7
        Item 8

我正在使用我在读数中找到的计算量度,如果我正在查看完整的层次结构,那么效果很好,但当我想要查看子集时,它会分崩离析。

例如,

WITH MEMBER [Measures].[Percent] AS iif([Measures].[Result Count] = 0,
NULL,
IIF(isempty( ([Measures].[Result Count], Axis(1)(0)( Axis(1)(0).Count - 1).Dimension.CurrentMember.Parent )),1,
[Measures].[Result Count] / ( [Measures].[Result Count], Axis(1)(0)( Axis(1)(0).Count - 1 ).Dimension.CurrentMember.Parent ))), FORMAT_STRING ="#,##0.00 %;-#,##0.00 %"
SELECT
   { [Measures].[Result Count],[Measures].[Percent] } ON COLUMNS,
   { [Groups].[Group Participation]} ON ROWS
FROM [Cube]

我得到以下内容:

        Result Count    Percent
Group A     1541            11.92 %
Group B     2300            17.79 %
Group C     9086            70.29 %

哪个效果很好。但是,如果我只想要B组和B组。 C组:

WITH MEMBER [Measures].[Percent] AS iif([Measures].[Result Count] = 0,
NULL,
IIF(isempty( ([Measures].[Result Count], Axis(1)(0)( Axis(1)(0).Count - 1 ).Dimension.CurrentMember.Parent )),1,
[Measures].[Result Count] / ( [Measures].[Result Count], Axis(1)(0)( Axis(1)(0).Count - 1 ).Dimension.CurrentMember.Parent ))), FORMAT_STRING ="#,##0.00 %;-#,##0.00 %"
SELECT
   { [Measures].[Result Count],[Measures].[Percent] } ON COLUMNS,
   { [Groups].[Group Participation].&[1],[Groups].[Group Participation].&[2]} ON ROWS
FROM [Cube]

我得到以下内容:

        Result Count    Percent
Group B     2300            17.79 %
Group C     9086            70.29 %

我想要

        Result Count    Percent
Group B     2300            20.20 %
Group C     9086            79.79 %

基本上,我需要百分比之和加起来。

我还需要在叶节点上工作。当我将法规更改为仅返回第4项,第5项,第6项

WITH MEMBER [Measures].[Percent] AS iif([Measures].[Result Count] = 0,
NULL,
IIF(isempty( ([Measures].[Result Count], Axis(1)(0)( Axis(1)(0).Count - 1 ).Dimension.CurrentMember.Parent )),1,
[Measures].[Result Count] / ( [Measures].[Result Count], Axis(1)(0)( Axis(1)(0).Count - 1 ).Dimension.CurrentMember.Parent ))), FORMAT_STRING ="#,##0.00 %;-#,##0.00 %"
SELECT
   { [Measures].[Result Count],[Measures].[Percent] } ON COLUMNS,
   { [Groups].[Group].&[4],[Groups].[Group].&[5],[Groups].[Group].&[6]} ON ROWS
FROM [Cube]

我得到以下内容:

    Result Count    Percent 
Item 4  103             4.48 %
Item 5  12              0.52 %
Item 6  455             19.78 %

我想要

    Result Count    Percent 
Item 4  103             18.07 %
Item 5  12              2.10 %
Item 6  455             79.82 %

我觉得我错过了一些非常基本的东西。我的计算方法是做错了什么?

提前致谢。

2 个答案:

答案 0 :(得分:3)

我通过在计算的百分比成员中指定过滤视图的维度成员(叶节点)而不是使用axis()来解决此问题。在我正在使用的Web应用程序中,MDX是动态生成的,因此很容易实现它。

在上面的示例中,这意味着对于叶节点(返回项4,5和6的示例),它应该如下所示:

[Measures].[Result Count] / SUM( { [Groups].[Group].&[4],
      [Groups].[Group].&[5],[Groups].[Group].&[6]}, [Measures].[Result Count] )

而不是:

[Measures].[Result Count] / ( [Measures].[Result Count], 
    Axis(1)(0)( Axis(1)(0).Count - 1 ).Dimension.CurrentMember.Parent )

答案 1 :(得分:1)

您不应再使用维度(父级)的“自然”层次结构来获取总数,而是在计算成员中使用轴上的总和。

WITH MEMBER [Measures].[Percent] AS [Measures].[Result Count] / Sum( Axis(1), [Measures].[Result Count])  , FORMAT_STRING = 'percent'

那应该得到你的“视觉”百分比。