2013-11-22 24 views
0

我有一个date维度和一个time维度和一个称为[Count - Sales]的度量。我想运行一个查询,该查询将给出在给定日期范围内的销售数量范围time,并且还将datetime值连接起来,并显示开始和结束date-time。所以,最终的结果,我希望会是这个样子:在MDX查询中自定义聚合/列连接

StartDateTime | EndDateTime | Count - Sales 
------------------------------------------------ 
20130901 12 | 20130901 16 | 4000 
20130902 12 | 20130902 16 | 4123 

我想出了一个办法来串联日期和时间值,但我一直没能想出一个办法有两列StartDateTimeEndDateTime。查询我现在给我的[Count - Sales]为每隔一小时:

WITH MEMBER Measures.DateTime AS 
     [Date].[Date].CurrentMember.Name + " " + [Time].[Hour 24].CurrentMember.Name + ":00" 
SELECT 
{{[Date].[Date].&[20131101]:[Date].[Date].&[20131101]}*{[Time].[Hour 24].&[10]:[Time].[Hour 24].&[14]}, 
{[Date].[Date].&[20131102]:[Date].[Date].&[20131102]}*{[Time].[Hour 24].&[10]:[Time].[Hour 24].&[14]} } ON ROWS, 

    {Measures.DateTime, 
    [Measures].[Count - Sales] } ON COLUMNS 
    FROM Sales 

,其结果是:

Date  Time DateTime  Count - Sales 
20131101 10  20131101 10 206 
20131101 11  20131101 11 251 
20131101 12  20131101 12 318 
20131101 13  20131101 13 304 
20131101 14  20131101 14 300 
20131102 10  20131102 10 194 
20131102 11  20131102 11 251 
20131102 12  20131102 12 298 
20131102 13  20131102 13 329 
20131102 14  20131102 14 345 

任何帮助/指导,将不胜感激。

回答

1
WITH SET [Time Range Set] AS 
     [Time].[Hour 24].&[10] : [Time].[Hour 24].&[14] 
    MEMBER [Time].[Hour 24].TimeRange AS 
      Aggregate([Time Range Set]) 
    MEMBER Measures.StartDateTime AS 
      [Date].[Date].CurrentMember.Name + " " 
      + [Time Range Set].Item(0).Item(0).Name + ":00" 
    MEMBER Measures.EndDateTime AS 
      [Date].[Date].CurrentMember.Name + " " 
      + Tail([Time Range Set]).Item(0).Item(0).Name + ":59" 
SELECT 
    { Measures.StartDateTime, Measures.EndDateTime, [Measures].[Count - Sales] } 
    ON COLUMNS, 
    {[Date].[Date].&[20131101]:[Date].[Date].&[20131102]} 
    * 
    {[Time].[Hour 24].TimeRange} 
    ON ROWS 
FROM Sales 

在行上,您只想显示两天,以及每个行的时间范围成员。 .Item(0).Item(0)构造获得集合的第一个元组的第一个成员。因此,我们可以直接将它用于StartDateTime,但需要应用Tail,它返回一个集合,该集合包含它所应用的集合的最后一个元组。

请注意,在COLUMNS之前指定ROWS违反了MDX规范(但Analysis Services可以容忍并正确解释它)。

+0

优雅的解决方案,谢谢! – Radix