同様の質問がありました ここ ですが、簡単な紹介をします。 SQL Serverには、次の3つのテーブルがあります。
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が必要です。どんな助けでもいただければ幸いです。テストソリューションは見つけることができます ここ 。
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への階段 シリーズです。