我有date
维度和time
维度以及名为[Count - Sales]
的度量。我想运行一个查询,该查询会在给定日期为我提供time
范围内的销售额,并且还会连接date
和time
值并向我显示开始并结束date-time
。所以我期待的最终结果看起来像这样:
StartDateTime | EndDateTime | Count - Sales
------------------------------------------------
20130901 12 | 20130901 16 | 4000
20130902 12 | 20130902 16 | 4123
我想出了一种连接日期和时间值的方法,但我还没有找到一种方法来获得两列StartDateTime
和EndDateTime
。我现在的查询每小时都会给我[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
任何帮助/指导将不胜感激。
答案 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是宽容的并且正确解释它)。