首先,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]
请注意,价格计数列有多个记录。我需要这里的第一条记录,我不需要实际的总和。
最佳答案
尝试创建一个新度量来获取时间维度第一秒的价格。例如,如果您想要一天的第一秒,那么在行的交叉连接中不需要它,但您可以在计算的度量中获取 [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/