web-dev-qa-db-ja.com

MDX交差点-方法は?

同様の質問がありました ここ ですが、簡単な紹介をします。 SQL Serverには、次の3つのテーブルがあります。

  1. 注文(ID、日付);
  2. 製品(ID、名前);
  3. OrderRefProduct(Id、OrderId、ProductId);

OrderRefProductは多対多のテーブルです。これは、1つの製品を異なる注文にすることができ、異なる製品を1つの注文にすることができるためです。

これはすべて、ディメンションとしてOrdersとProducts、ファクトとしてOrderRefProductを持つOLAP Cubeに固定されています。SQLクエリの出力が提供するような結果を取得する必要があります:

SELECT ProductId, COUNT(*) as [Count]
FROM OrderRefProduct 
GROUP BY ProductId

キューブが正しく構築されていれば、対応するMDXクエリはかなり単純です。

SELECT 
NON EMPTY { [Measures].[Order Ref Product Count] } ON COLUMNS, 
NON EMPTY { ([Product].[Product ID].[Product ID].ALLMEMBERS ) } ON ROWS 
FROM [Sales]

そして、両方の結果は次のとおりです。

ProductId   Count
1   7
2   7
3   5
4   6

ここに問題があります。製品3と4の両方を持つ注文の数を選択したい。SQL:

select ProductId, Count(*) as [Count]
from OrderRefProduct
where [OrderId] in 
(SELECT S.OrderID FROM 
(select * from OrderRefProduct where ProductID=3) as S
INNER JOIN (select * from OrderRefProduct where ProductID=4) as T on T.OrderId = S.OrderID)
Group by ProductId

結果:

ProductId   Count
1   1
2   1
3   3
4   3

MDXクエリでこれを再現することはできません。これまでに達成できたのはFULLJOINですが、INNERが必要です。どんな助けでもいただければ幸いです。テストソリューションは見つけることができます ここ

3

MDXwhere句を追加する必要があります。 基本的なMDX構文 を見てください。

その中で、スライスするSETを指定する必要があります。ご覧ください MDXクエリでのセットの使用

SELECT 
NON EMPTY { [Measures].[Order Ref Product Count] } ON COLUMNS, 
NON EMPTY { ([Product].[Product ID].[Product ID].ALLMEMBERS ) } ON ROWS 
FROM [Sales]
WHERE {[Product].[Product ID].[3],[Product].[Product ID].[4]}

私の個人的な意見では、MDXクエリをSQLクエリに関連付けようとしても無駄です。どちらもまったく別の獣です。

テーブルと結合ではなく、タプルとセット、メンバーとメジャーで考えるのをやめる必要があります。

私の意見では、始めるのに最適なリソースの1つは、 MDXへの階段 シリーズです。