sql-server - 获取自定义时间段的第一个或最后一个值

标签 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

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

最佳答案

尝试创建一个新度量来获取时间维度第一秒的价格。例如,如果您想要一天的第一秒,那么在行的交叉连接中不需要它,但您可以在计算的度量中获取 [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

关于sql-server - 获取自定义时间段的第一个或最后一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10729005/

相关文章:

sql-server - 如何在postgresql中声明局部变量?

sql-server - 将表格模型部署到 Azure Analysis Services

sql-server - SSAS 依赖 FormatString 显示不同的值单位

mdx - javascript 为 mdx 进行美化

ssas - 基于strtomember访问前一个成员

SQL Server 聚集索引 - 索引问题的顺序

c# - 使用保留字作为实体名称

sql - 在 mdx 查询中查找每个后续财务周期年份的数据

sql - OLE DB 或 ODBC 错误 : Login failed for user 'NT AUTHORITY\NETWORK SERVICE

ssas - 引用相同属性的不平衡层次结构