小売業の在庫データを含むキューブがあります。これには2つのメジャーグループがあり、1つは各棚卸バッチでカウントされる在庫単位の数(製品、バッチ、および時間ディメンションに関連)を含み、もう1つは製品価格(製品ディメンションにのみ関連)を含みます。
価格メジャーグループのメジャーは、MinおよびMax演算子を使用します(つまり、これらは、Productsディメンションの選択したメンバー全体の最小または最大価格を示します)。
キューブとディメンションを正しく構成しているようです(価格メジャーは期待どおりに表示されます)...次の場合を除きます。
Excelでキューブにクエリを実行し、時間とバッチで単位を取得すると、期待される結果(Time = 2015でフィルター処理され、データのない行を非表示にする下の画像を参照)、つまり選択したユニットの単位ファクトデータを含むバッチのみが表示されます時間ディメンションメンバー。
(フィルターを変更せずに)価格メジャーの1つを追加すると、Unitsの合計は(期待どおり)変更されませんが、バッチディメンションにすべてのメンバーが表示されます(下の画像を参照)。以前に選択したバッチで製品の価格を確認したいだけなので、これはエンドユーザーにとって問題です。
技術的な観点からは、それは一種の理にかなっています-価格の事実は時間とは関係がないため、ユニットのように時間フィルターでフィルターすることはできません。
(キューブデザインまたはExcelで)指定されたフィルターの単位を持たないBatchメンバーを排除するためにできることはありますか?注:ユーザーにMDXクエリを作成させることはできません-レポート作成は「ポイントアンドクリック」のままである必要があります!
EDIT 27/1(TomVの回答ごとに「無関係な次元を無視する= False」を設定した場合の奇妙な副作用を説明するために追加のスクリーンショットを追加)
正しく説明したように、これは、関係のないディメンション全体でメジャーを表示しようとすると何が起こるかです。
基本的に2つのオプションがあります
IgnoreUnrelatedDimensions
を使用MDX
ソリューションを使用する最初にIgnoreUnRelatedDimensions
を試してみることをお勧めします。メジャーがよりよく集計され、NonEmptyCrossJoins
は、Bitmap Indexes
が定義されているときに使用されるAttribute Relationships
から利益を得ることができるからです。 。
パフォーマンスの問題が発生する可能性があるため、MDXソリューションはより最後の手段であり、また、使用しているメジャーごとに計算メジャーを定義する必要があります。 MDXソリューションは、複雑であるか、合計を台無しにするか、正しくないデータを表示する可能性があります。
IgnoreUnrelatedDimensions
Adventureworks 2012キューブを見ると、従業員が「インターネット販売」にリンクされていないが、「リセラー販売」にリンクされているという状況があります。
キューブを参照するときの結果は、従業員ディメンション全体の両方のメジャーグループからメジャーを追加したときの結果と同じです。
これは、Measure Group
でIgnoreUnrelatedDimensions
プロパティをFalse
に設定することで解決できます。
キューブを再処理してブラウザを更新すると、結果は次のようになります。
ただし、DefaultMember
の設定に関する問題など、いくつかの注意点があります。
DefaultMember
が関連しないディメンションの属性のAll level
ではない場合、ピボットテーブルに含まれていなくてもデフォルトメンバーがフィルターとして機能するため、集計データは取得されません。 :
たとえば、次のように、従業員ディメンションの性別属性にDefaultMember
propertyを設定した後。
これは、レポートにスライサーが含まれていない場合の結果です。もちろん、ここで合計を確認する必要があります。
他の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]
この結果を生成します
合計が個々のメンバーと同じであるため、どちらも奇妙に見えます。しかし、それは最小/最大価格設定の特定のケースでは許容できるかもしれません。それらの従業員のインターネット販売がないので、私はそれが主に誤ったデータを示していると思います。
あなたがレポートを管理しているなら、それは可能だと思います。編集に追加されたピボットテーブルについては、問題のない結果が生成されると思います。
この計算されたメジャーをキューブに追加します。
Create Member CurrentCube.[Measures].[Max Current CP With Units] as
IIf(Not IsEmpty([Measures].[Units]),[Measures].[Max Current CP],Null);