抓取自定义时间段的第一个或最后一个值

时间:2012-05-23 22:57:36

标签: sql-server ssas mdx olap cube

首先,SSAS非常新。但我想要完成的事情似乎相当微不足道(我希望)。

我有第二个发生的交易数据。我创造了两个时间维度。一个维度基于使用时间维度向导的标准时间维度。另一个是由我自己的脚本生成的时间维度,其中我每天都有一个记录。

我已将我的事实表与我的维度相关联,并正确部署了我的多维数据集。在我的事实数据中,其中一个属性是价格。现在使用min和max我已经能够获得在特定时间段内发生的最高价格和最低价格。我想要获得的是一段时间内发生的第一个和最后一个价格。我尝试过使用“第一个值”和“最后一个值”,但返回的内容不正确,似乎是某种聚合。

所以举个例子。如果我超过1分钟的价格是:

1233,1233.85,1300,1250

首先应该返回,1233和最后应该返回1250.这应该适用于所有时间段。

要添加,对于我的自定义时间维度,我已尝试将其类型设置为“时间”,但结果保持不变。我很感激任何建议。我基本上希望获得底层和最后一个值的第一个值。

让我了解其中一部分的示例查询:

SELECT NON EMPTY 
     { [Measures].[High]
     , [Measures].[Low]
     , [Measures].[Price Count]
     , [Measures].[Price]
     } ON COLUMNS
     , NON EMPTY
     { [Dim Date].[Year -  Week -  Date].[Date].ALLMEMBERS
     * HEAD( [Dim Time].[Hour - Second].[Second].ALLMEMBERS )
     } ON ROWS 
FROM [Cube]

enter image description here

请注意,价格计数列有多条记录。我需要来自这里的第一条记录我不想要实际的总和。

1 个答案:

答案 0 :(得分:0)

尝试创建一个新度量,获取时间维度第一秒的Price。例如,如果您想要当天的第一秒,那么您在行上的交叉连接中不需要它,但是您可以在计算的度量内获得[Hour - Second]层次结构的第一秒:

with
    member [Measures].[First Price] as
        (head(descendants([Dim Time].[Hour - Second].CurrentMember, Second)), [Measures].[Price])
select
    non empty {
        [Measures].[High],
        [Measures].[Low],
        [Measures].[Price Count],
        [Measures].[Price] 
    } on columns,   
    {
        [Dim Date].[Year -  Week -  Date].[Date].ALLMEMBERS
    } on rows
from
    [Cube]

如果您希望时间段较小,例如按小时计算,例如:

    non empty {
        [Dim Date].[Year -  Week -  Date].[Date].ALLMEMBERS * [Dim Time].[Hour - Second].[Hour]
    } on rows