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

层次结构子集总百分比的MDX,mdx,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 我使用的是我在阅读资料

我有一些关于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 %
        Result Count    Percent
Group B     2300            17.79 %
Group C     9086            70.29 %
    Result Count    Percent 
Item 4  103             4.48 %
Item 5  12              0.52 %
Item 6  455             19.78 %
这很有效。但是,如果我只想要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 A     1541            11.92 %
Group B     2300            17.79 %
Group C     9086            70.29 %
        Result Count    Percent
Group B     2300            17.79 %
Group C     9086            70.29 %
    Result Count    Percent 
Item 4  103             4.48 %
Item 5  12              0.52 %
Item 6  455             19.78 %
我想要

        Result Count    Percent
Group B     2300            20.20 %
Group C     9086            79.79 %
基本上,我需要百分之和加起来等于100

我还需要这个来处理叶节点。当我将状态更改为仅返回项目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
Group A     1541            11.92 %
Group B     2300            17.79 %
Group C     9086            70.29 %
        Result Count    Percent
Group B     2300            17.79 %
Group C     9086            70.29 %
    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 %
我觉得我错过了一些非常基本的东西。我在计算的尺度上做错了什么


提前感谢。

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

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

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

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

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

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

我通过在计算百分比成员中指定筛选视图的维度成员(叶节点),而不是使用
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 )

我通过在计算的百分比成员中指定过滤视图的维度成员(叶节点),而不是使用
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 )

公式不起作用,它返回的是总维度项的百分比,而不是筛选视图。公式不起作用,它返回的是总维度项的百分比,而不是筛选视图。