2013-10-04 30 views
0

我正在使用MDX和Microsoft SQL Server 2008 Analysis Services。我有一个具有以下尺寸的货运立方体:在MDX中,我怎样才能找到每月最后一天的运输量?

* 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] 
+0

您的发货日期是完整日期维度(没有日期缺失)?你到目前为止尝试过哪些MDX查询? – michele

回答

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>开始的所有成员到同一级别的末尾。

相关问题