2012-02-08 10 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 

のように見えるかなり基本的な次元を持っていますが、離れたときに落ちるIサブセットを見たい。素晴らしい作品

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

:たとえば

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] 

私は、次を得ます。私は、グループ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 % 

を取得したいです非常に基本的な何かが欠落しています。私の計算された尺度で何が間違っていますか?

ありがとうございます。

答えて

1

ディメンション(親)の「自然」階層を使用して合計を取得するのではなく、計算されたメンバーの軸を合計します。

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

「視覚的」パーセンテージを取得する必要があります。

+0

式が機能しなかった場合は、フィルタリングされたビューではなく、合計ディメンションのアイテムの割合を返します。 – user1196219

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) 
関連する問題