2012-02-08 22 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)