0

MDX と Microsoft SQL Server 2008 Analysis Services を使用しています。次のディメンションを持つ出荷キューブがあります。

* Measures: Quantity
* Time: Year/Month/Day
* Ship Date: Year/Month/Day
* Receipt Date: Year/Month/Day

毎月末日の輸送量を知りたい。どうやってやるの?SQL では、次のようになります。

SELECT
  A.[Month], SUM(B.[Quantity]) AS [In Transit]
FROM
  ( SELECT [Month], MAX([Day]) AS [End of Month] FROM [Time] GROUP BY [Month] ) A
  CROSS JOIN
  ( SELECT [Quantity], [Ship Date], [Receipt Date] FROM [Shipments] ) B
WHERE
  B.[Ship Date] <= A.[End of Month]
  AND B.[Receipt Date] > A.[End of Month]
GROUP BY
  A.[Month]
4

1 に答える 1

1

次のクエリは AdventureWorks で実行されます。つまり、構文は正しいです。AdventureWorks は、キューブと非常によく似た構造を持っています。キューブの主な変更点は、メジャー、階層、およびキューブの名前を変更することです。これらすべてを詳細に述べていないので、AdventureWorks で実行されるようにクエリを残しました。

with member [Measures].[In Transit] as
     Sum((null : LinkMember([Date].[Calendar].CurrentMember, [Ship Date].[Calendar]))
          *
         (LinkMember([Date].[Calendar].CurrentMember.NextMember, [Delivery Date].[Calendar]) : null),
         [Measures].[Internet Sales Amount]
        )
select { [Measures].[In Transit] }
       on columns,
       [Date].[Calendar].[Month].Members
       on rows
from [Adventure Works]

LinkMember同じ構造を持つ階層から対応するメンバーを取得します。通常は、同じディメンション テーブルに基づくロール プレイング ディメンションです。また、null : <some member>およびコンストラクトは、 までのすべてのメンバーのセット、または から始まり、同じレベルの最後までのすべてのメンバーをそれぞれ<some member> : null返します。<some member><some member>

于 2013-10-08T18:12:58.970 に答える