0

次のクエリがあります(Microsoft®SQLServer®2008MDXステップバイステップブックで提供されるサンプルデータに基づく):

WITH
SET important_months AS
{
    ([Product].[Product Categories].[Subcategory].&[28].CHILDREN    , {[Date].[Month of Year].&[1], [Date].[Month of Year].&[2]}),
    ([Product].[Product Categories].[Product].&[477]                , {[Date].[Month of Year].&[3]})
}

SELECT [Measures].[Order Count] ON COLUMNS,
     important_months ON ROWS
FROM [Step-by-Step]

クエリは、特定の月に特定のサブカテゴリで製品に発注された注文の数を示します。カテゴリ28のすべての製品について、1月または2月(1か月目または2か月目)の注文数が必要です。例外は、製品447での注文です。この場合、3月に行われた注文の数を追加で含める必要があります。

ただし、最終的には、月に関する詳細にはあまり興味がありません。必要なのは、特定の製品に対する単純な注文数です(つまり、注文が行われた月に関する情報を緩めたり非表示にしたりしたい)。 。

だから代わりに

  • マウンテンボトルケージ、176年1月
  • マウンテンボトルケージ、183年2月
  • ロードボトルケージ、141年1月
  • ロードボトルケージ、152年2月
  • ウォーターボトル-30oz、381年1月
  • ウォーターボトル-30oz、403年2月
  • ウォーターボトル-30oz、3月、414

私は持っている必要があります:

  • マウンテンボトルケージ、359(176 + 183)
  • ロードボトルケージ、293(141 + 152)
  • ウォーターボトル-30oz。、1198(381 + 403 + 414)

important_monthsセットをwhere句に入れてみましたが、(カスタムセットによる循環参照エラーを除いて)行軸にカテゴリを投影できませんでした(そうしますか?)。また、サブクエリを使用することを考えましたが、そこに設定されているimportant_monthsも参照できないようです。

言い換えれば、SQLで発行することで得られる結果を得る必要があります

SELECT SUM([Order Count]) 
FROM <MDX RESULT HERE> 
GROUP BY Product

できますか?

4

2 に答える 2

1

An educated guess is that MDX Subqueries is the solution. Did you try using tuples in the subselect :

  WITH
    SELECT [Measures].[Order Count] ON COLUMNS,
    {[Product].[Product Categories].[Subcategory].&[28].CHILDREN,[Product].[Product Categories].[Product].&[477]} ON ROWS
 FROM ( 
   SELECT 
     {([Product].[Product Categories].[Subcategory].&[28].CHILDREN,{[Date].[Month of Year].&[1], [Date].[Month of Year].&[2]}),
  ([Product].[Product Categories].[Product].&[477],{[Date].[Month of Year].&[3]})} ON 0
  FROM [Step-by-Step]
 )
于 2013-02-27T09:46:48.150 に答える
0

非対称セットを作成しているため (マーチはウォーター ボトルのみ)、他のすべての製品に含めずに WHERE 句でこれを直接スライスすることはできません。

icCube の答えは私には良さそうですが、小さな追加が 1 つあります。行の選択に DISTINCT を追加して、ウォーター ボトルを 1 つの行に結合します。

WITH
  SELECT [Measures].[Order Count] ON COLUMNS,
  DISTINCT {[Product].[Product Categories].[Subcategory].&[28].CHILDREN, [Product].[Product Categories].[Product].&[477]} ON ROWS
FROM ( 
  SELECT 
    {([Product].[Product Categories].[Subcategory].&[28].CHILDREN,{[Date].[Month of Year].&[1], [Date].[Month of Year].&[2]}),
    ([Product].[Product Categories].[Product].&[477],{[Date].[Month of Year].&[3]})} ON 0
  FROM [Step-by-Step]
)
于 2013-02-27T17:31:48.770 に答える