web-dev-qa-db-ja.com

(ディメンションとの関係が異なる)2つのメジャーグループを持つキューブがレポートに返すディメンションメンバーが多すぎる

小売業の在庫データを含むキューブがあります。これには2つのメジャーグループがあり、1つは各棚卸バッチでカウントされる在庫単位の数(製品、バッチ、および時間ディメンションに関連)を含み、もう1つは製品価格(製品ディメンションにのみ関連)を含みます。

価格メジャーグループのメジャーは、MinおよびMax演算子を使用します(つまり、これらは、Productsディメンションの選択したメンバー全体の最小または最大価格を示します)。

キューブとディメンションを正しく構成しているようです(価格メジャーは期待どおりに表示されます)...次の場合を除きます。

Excelでキューブにクエリを実行し、時間とバッチで単位を取得すると、期待される結果(Time = 2015でフィルター処理され、データのない行を非表示にする下の画像を参照)、つまり選択したユニットの単位ファクトデータを含むバッチのみが表示されます時間ディメンションメンバー。

Units by Time and Batch

(フィルターを変更せずに)価格メジャーの1つを追加すると、Unitsの合計は(期待どおり)変更されませんが、バッチディメンションにすべてのメンバーが表示されます(下の画像を参照)。以前に選択したバッチで製品の価格を確認したいだけなので、これはエンドユーザーにとって問題です。

enter image description here

技術的な観点からは、それは一種の理にかなっています-価格の事実は時間とは関係がないため、ユニットのように時間フィルターでフィルターすることはできません。

(キューブデザインまたはExcelで)指定されたフィルターの単位を持たないBatchメンバーを排除するためにできることはありますか?注:ユーザーにMDXクエリを作成させることはできません-レポート作成は「ポイントアンドクリック」のままである必要があります!

EDIT 27/1(TomVの回答ごとに「無関係な次元を無視する= False」を設定した場合の奇妙な副作用を説明するために追加のスクリーンショットを追加)

enter image description here

4
Laurence

正しく説明したように、これは、関係のないディメンション全体でメジャーを表示しようとすると何が起こるかです。

基本的に2つのオプションがあります

  1. IgnoreUnrelatedDimensionsを使用
  2. MDXソリューションを使用する

最初にIgnoreUnRelatedDimensionsを試してみることをお勧めします。メジャーがよりよく集計され、NonEmptyCrossJoinsは、Bitmap Indexesが定義されているときに使用されるAttribute Relationshipsから利益を得ることができるからです。 。

パフォーマンスの問題が発生する可能性があるため、MDXソリューションはより最後の手段であり、また、使用しているメジャーごとに計算メジャーを定義する必要があります。 MDXソリューションは、複雑であるか、合計を台無しにするか、正しくないデータを表示する可能性があります。

IgnoreUnrelatedDimensions

Adventureworks 2012キューブを見ると、従業員が「インターネット販売」にリンクされていないが、「リセラー販売」にリンクされているという状況があります。

キューブを参照するときの結果は、従業員ディメンション全体の両方のメジャーグループからメジャーを追加したときの結果と同じです。

enter image description here

これは、Measure GroupIgnoreUnrelatedDimensionsプロパティをFalseに設定することで解決できます。

enter image description here

キューブを再処理してブラウザを更新すると、結果は次のようになります。

enter image description here

ただし、DefaultMemberの設定に関する問題など、いくつかの注意点があります。

DefaultMemberが関連しないディメンションの属性のAll levelではない場合、ピボットテーブルに含まれていなくてもデフォルトメンバーがフィルターとして機能するため、集計データは取得されません。 :

たとえば、次のように、従業員ディメンションの性別属性にDefaultMemberpropertyを設定した後。

enter image description here

これは、レポートにスライサーが含まれていない場合の結果です。もちろん、ここで合計を確認する必要があります。

enter image description here

他のcalculated measuresのEdgeケースを思い出したようですが、特定の状況を覚えていません。

MDXソリューション

Edgeケースのいずれかに遭遇した場合、@ GregGallowayによって投稿されたMDXソリューションに頼る必要がありますが、それは単調で、単一のレポートまたはユースケースに非常に固有になる可能性があります。

CREATE MEMBER CURRENTCUBE .[Measures].[Max Current CP With Units] AS
  IIf (
    NOT IsEmpty ( [Measures].[Units] ),
    [Measures].[Max Current CP],
    NULL
  ) ;

そのソリューションの欠点は、合計の見た目がめちゃくちゃになり、誤ったデータが表示される可能性があることですが、MIN/MAX集計を使用した価格情報の特定のケースでは許容できるかもしれませんが、合計が完全に壊れ、おそらく表示されます。ユーザーに偽のデータ。

たとえば、このクエリを実行するとき

WITH MEMBER [Measures].[Filtered internet order count] as
'
IIf (
    NOT IsEmpty ([Measures].[Reseller Order Count] ),
    [Measures].[Internet Order Count],
    NULL)
'
SELECT {[Measures].[Filtered internet order count],[Measures].[Reseller Order Count]} ON 0,
[Employee].[Employees].allmembers ON 1
FROM [Adventure Works]

この結果を生成します

enter image description here

合計が個々のメンバーと同じであるため、どちらも奇妙に見えます。しかし、それは最小/最大価格設定の特定のケースでは許容できるかもしれません。それらの従業員のインターネット販売がないので、私はそれが主に誤ったデータを示していると思います。

あなたがレポートを管理しているなら、それは可能だと思います。編集に追加されたピボットテーブルについては、問題のない結果が生成されると思います。

この計算されたメジャーをキューブに追加します。

Create Member CurrentCube.[Measures].[Max Current CP With Units] as 
IIf(Not IsEmpty([Measures].[Units]),[Measures].[Max Current CP],Null);
2
GregGalloway