1

機密性のために少数の数字を隠すというビジネス要件があります。

私は隠しメジャーと計算を使用してこれを実行しようとしています。非表示のメジャーの名前は「Encounters_Count」で、計算に使用している MDX は次のとおりです。

CREATE MEMBER CURRENTCUBE.[Measures].[Number of Encounters]
    AS IIF( [Measures].[Encounters_Count] <= 5, "<hidden>", [Measures].[Encounters_Count] ),
FORMAT_STRING = "#,##0", NON_EMPTY_BEHAVIOR = { [Encounters_Count] }, VISIBLE = 1;

これは機能しますが、場合によっては、グループの合計から隠れた数字を導き出すことができます。

IsLeaf() を使用して再帰的な計算を作成し、親か子かによって異なるルールを適用して合計から "<hidden>" の結果を除外しようとしましたが、これを正しく行う方法がわかりません。

これは私がやろうとしてきたことです:

...
IIF( IsLeaf( [Measures].[Encounters_Count] ),
    IIF( [Measures].[Encounters_Count] <= 5, "<hidden>", [Measures].[Encounters_Count] ),
    SUM( IIF( [Measures].[Number of Encounters] <> "<hidden>", [Measures].[Number of Encounters], NULL ) )
),
...

 

編集:これは私が回避しようとしているもののスクリーンショットです。この場合、 <hidden> 数が 4 であることがわかります。総計が 31,163 を表示することが望ましいでしょう。数字。

エクセルのスクリーンショット

4

3 に答える 3

1

私が理解しているように、必要なのは、数値が低い場合、または合計に近い場合は、それを非表示にする必要があるということです。

CREATE MEMBER CURRENTCUBE.[Measures].[Number of Encounters] AS
    IIF( ([Measures].[Encounters_Count] <> 0 AND [Measures].[Encounters_Count] <= 5)
      OR (    ([Measures].[Encounters_Count], [Dim1].[Hier1].[All]) - [Measures].[Encounters_Count] > 0
          AND ([Measures].[Encounters_Count], [Dim1].[Hier1].[All]) - [Measures].[Encounters_Count] <= 5)
      OR (    ([Measures].[Encounters_Count], [Dim1].[Hier2].[All]) - [Measures].[Encounters_Count] > 0
          AND ([Measures].[Encounters_Count], [Dim1].[Hier2].[All]) - [Measures].[Encounters_Count] <= 5)
      OR (    ([Measures].[Encounters_Count], [Dim2].[Hier1].[All]) - [Measures].[Encounters_Count] > 0
          AND ([Measures].[Encounters_Count], [Dim2].[Hier1].[All]) - [Measures].[Encounters_Count] <= 5)
      OR // add all 'All' members of all hierarchies here
       , "<hidden>", [Measures].[Encounters_Count] ),
    FORMAT_STRING = "#,##0", NON_EMPTY_BEHAVIOR = { [Encounters_Count] }, VISIBLE = 1;

これらを隠します。これはかなり長いステートメントであり、キューブ内の階層を変更したらすぐに慎重にメンテナンスする必要があります。

完璧なソリューションを得るには、複数のメンバーの組み合わせも処理する必要がありますが、これは組み合わせの爆発Allにつながる可能性があります。独自の MDX。しかし、正直なところ、私はそれについてあまり考えていませんでした。

潜在的に、Abs()負の数が表示される可能性がある場合に問題を回避するために、値を前後に使用することをお勧めします。

于 2013-08-28T16:44:59.080 に答える
0

数値を隠して合計をいじり始めると、レポートの精度が低下します...そのため、ビジネス ユーザーが不正確さに満足していると言うのであれば、目標を達成するための他の方法を (MDX について考える前に) 考えてみませんか? ?

すべての合計に 5% を追加する / 右端の数字を「8」に置き換える / 最も近い 100 に切り上げる...

これをすべての合計に対して行うと、MDX は、IsLeaf() や、合計の中に非表示の値が含まれているものと含まれていないものがあるかどうかを気にする必要がなくなります。

WITH MEMBER [Measures].[Obscured Values] AS
IIF([Measures].[Encounters_Count] <= 5, "<hidden>", 
  IIF([Measures].[Encounters_Count] > 100, VBA!round([Measures].[Encounters_Count]*1.1, 0), [Measures].[Encounters_Count])
)
于 2013-08-28T12:47:01.480 に答える