1

2つの異なるカウントメジャーを持つキューブがあるとしましょう。それらMeasure1をとと呼びますMeasure2。これらのメジャーの両方に共通のディメンションが含まれておりDimension1、これは両方のメジャーによってカウントされます。

私がする必要があるのは、Dimension1Measure1Measure2必要に応じて各メジャーで適切なフィルタリングを行った後、の両方に存在するメンバーの個別の数を返すことです。

Measure1両方と個別にMDXクエリを定義し、Measure2個別のカウントを取得できますが、両方のセットに存在するメンバーが二重にカウントされないように、結果を「オーバーラップ」できる必要があります。

注:実際のシナリオでは、3つ以上のメジャーが含まれ、すべてのMDXクエリが動的に作成されます(ユーザーは、どのメジャーとディメンション基準を含めるかを定義します)。

これはSSAS/MDXで実行できますか?そうでない場合、それができる別のマイクロソフトのツール/機能はありますか?システムの最小要件は、SQL Server 2008 R2StandardEditionです。

正直なところ、どこから始めればいいのかわかりません。グーグルはこのようなものを何も見つけませんでした(私は単一の測定を含むいくつかのバスケット分析のものを見ましたが、それを私のシナリオに適用するかどうか、またはどのように適用するかはわかりません)。私は決してSSAS/MDX/BIの専門家ではありません。

私が考えることができる2つの選択肢があります:

  1. DRILLTHROUGH個々のMDXクエリと(基本的に)結果を使用して使用しCOUNT DISTINCTます。
  2. データウェアハウスのソースデータベースでT-SQLを使用します。(すべてのシナリオを効率的に説明するのは難しいかもしれません。)

ドリルスルーもできるようにする必要があるので、とにかくソリューション#1を実装する必要がありますが、カウントがはるかに頻繁に必要になるため、カウントだけを取得するためのより効率的な方法があると便利です。。

4

4 に答える 4

0

Dimension1Key属性に基づいてDistinctCountメジャーを追加します。Measure1、2などでフィルタリングするためにSetsMDX機能を使用してExcel2010+で表示します。

于 2013-03-10T23:00:22.470 に答える
0

これに対する MDX ソリューションは見つかりませんでした。

私は、データ ウェアハウスに直接クエリを実行するソリューションを開発しました。これは、いくつかのパフォーマンス調整の後、これまでのところかなりうまく機能しています。このアプローチはすべてのアプリケーションに適しているわけではありませんが、特定のシナリオでは機能するようです。

于 2013-03-21T20:11:53.280 に答える
-1

問題文を簡単にしましょう。パンと卵の両方を購入した顧客、またはトヨタとホンダを所有している顧客の数が必要です。私はずっと前にこの問題に直面し、クエリの設計を考え出しました。これらのクエリのパフォーマンスは良くありませんでした。これらのクエリの性質上、事実を粒度レベルで開いています。したがって、すべての集約利益が失われます。

コードは次のとおりです。ClassicVestS または HLMountainTire およびその他の製品を注文した顧客を名前に基づいて数えています。

with  
member [Measures].[CustomersWhoBoughtClassicVestS] as 
count(
intersect(
{nonempty(
existing ([Customer].[Customer].children),[Measures].[Internet Order Count]
)},
{extract(nonempty( ([Customer].[Customer].children* [Product].[Product].&[471]),[Measures].[Internet Order Count]),[Customer].[Customer])}
)
) 
member [Measures].[CustomersWhoBoughtHLMountainTire] as 
count(
intersect(
{nonempty(
existing ([Customer].[Customer].children),[Measures].[Internet Order Count]
)},
{extract(nonempty( ([Customer].[Customer].children* [Product].[Product].&[537]),[Measures].[Internet Order Count]),[Customer].[Customer])}
)
) 
Select {[Measures].[CustomersWhoBoughtClassicVestS],[Measures].[CustomersWhoBoughtHLMountainTire] 
} on columns , 
{ nonempty( [Product].[Product].children 
,[Measures].[Internet Order Count]) } 
on rows 
from [Adventure Works]

結果

于 2018-11-24T22:51:52.707 に答える