MDX查询中的自定义聚合/列连接

时间:2013-11-22 18:54:10

标签: ssas mdx

我有date维度和time维度以及名为[Count - Sales]的度量。我想运行一个查询,该查询会在给定日期为我提供time范围内的销售额,并且还会连接datetime值并向我显示开始并结束date-time。所以我期待的最终结果看起来像这样:

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 个答案:

答案 0 :(得分: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是宽容的并且正确解释它)。