В MDX как мога да намеря транзитното количество в последния ден на всеки месец?

Използвам 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]

person Terry    schedule 04.10.2013    source източник
comment
Вашата дата на изпращане пълно измерение на дата ли е (дата не липсва в нея)? Каква MDX заявка сте опитвали досега?   -  person michele    schedule 07.10.2013


Отговори (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> до края на същото ниво.

person FrankPl    schedule 08.10.2013