Как в MDX найти количество в пути в последний день каждого месяца?

Я использую службы аналитики MDX и Microsoft SQL Server 2008. У меня есть куб Отгрузки со следующими размерами:

* 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