如何从最后几天获取数据

时间:2014-01-06 13:05:00

标签: sql mdx

我是SQL MDX的新手,并不知道如何实现这一目标。

我需要从最后一个可用数据中获取我的多维数据集中最近X天的数据。

以下是我的代码:

SELECT { [Measures].[Fact Stays Count], [Measures].[Time Spent] } ON COLUMNS,
       NON EMPTY { ( [Dim Locals].[Local Description].[Local Description].ALLMEMBERS * [FK Date].[Date].[Date] ) } ON ROWS
FROM
(
select { TAIL(FILTER([FK Date].[Date].MEMBERS, NOT ISEMPTY([FK Date].[Date].CURRENTMEMBER)),30) } ON COLUMNS
FROM (
    SELECT ( STRTOSET(@userId, CONSTRAINED) ) ON COLUMNS
    FROM [DW]
)
)

问题是查询返回数据存在的最后30天,而不是最近30个连续日历日。

如何更改查询以获得我想要的结果?

1 个答案:

答案 0 :(得分:1)

试试这个。我唯一改变的是选择日期。而不是要求最后30天有措施的数据,我要求最后一天有措施的数据,获得最后一项,然后在日期开始时做29天的滞后范围,然后没有滞后(到数据的最后一天)为日期范围的结束。

SELECT { [Measures].[Fact Stays Count], [Measures].[Time Spent] } ON COLUMNS,
       NON EMPTY { ( [Dim Locals].[Local Description].[Local Description].ALLMEMBERS * [FK Date].[Date].[Date] ) } ON ROWS
FROM
(
select { TAIL(FILTER([FK Date].[Date].MEMBERS, NOT ISEMPTY([FK Date].[Date].CURRENTMEMBER)),1).item(0).lag(29): TAIL(FILTER([FK Date].[Date].MEMBERS, NOT ISEMPTY([FK Date].[Date].CURRENTMEMBER)),1).itm(0)} ON COLUMNS
FROM (
    SELECT ( STRTOSET(@userId, CONSTRAINED) ) ON COLUMNS
    FROM [DW]
)
)

请注意,现在查询的方式将返回两个度量数据的最后一天。如果这两个措施没有对齐,它可能无法提供你想要的东西。例如,如果截至2013年12月30日有关Fact Stays Count的数据和截至2014年1月5日的Time Spent数据,将于2013年12月30日返回。如果您希望它依赖于这两个指标,那么您就是好的。如果您希望它依赖于一个度量,您可以将其切换为类似下面的内容。

Tail(Filter([FK Date].[Date].[Date].MEMBERS.MEMBERS, [Measures].[Fact Stays Count] >0),1).item(0)