我有一些基本的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 %
我觉得我错过了一些非常基本的东西。我的计算方法是做错了什么?
提前致谢。
答案 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'
那应该得到你的“视觉”百分比。