2012-02-08 24 views
2

我有一些基本的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组& 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 % 

基本上,我需要的百分之总和加起来为100.

我也需要这个在叶节点工作。当我改变statment只返回第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 % 

我觉得像我错过了一些非常基本的东西。我在计算的度量中做了什么错误?

在此先感谢。

回答

1

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

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

这应该得到你的'视觉'百分比。

+0

的公式不起作用,它会返回总维度的项目百分比,而不是过滤的视图。 – user1196219 2012-03-08 13:22:02

3

我通过在计算出的百分比成员中指定维度成员(叶节点)来解决此问题,而不是使用axis()。在我正在开发的网络应用程序中,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)