如何构建仅考虑 2 月最后 10 天发生的事实的 MDX 查询?
How do I build a MDX query that considers only facts that happened in the last 10 days of February?
我有一个事实 table,它有一个时间维度,包含年、月、日和小时。
我能够找到方法来过滤给定日期或月份发生的事情(按所需级别简单 where/filter)。但我想创建一个 MDX 查询来过滤结果,以便我的多维数据集包含有关 2 月最后 10 天记录的事实的信息。
有什么办法可以做到吗?
假设您的多维数据集中包含二月的所有天数,您可以在其中使用 set
WHERE
子句。
像这样..
WHERE ([Date].Month)
假设您有一个年-月-日-时层次结构并且可能缺少一些日期
Select....... on COLUMN,
....... ON ROWS
FROM ....
WHERE
({[Time].[Month].&[Feb 2015].LastChild.LAG(10) : [Date].[Month].&[Feb 2015].LastChild})
如果 date dim 中没有遗漏任何日期,
select ... ON COLUMNS,
... ON ROWS
FROM ...
WHERE
({[Time].[Date].&[02/19/2015] : [Date].[Date].&[02/28/2015]})
如果您想要每年 2 月最后 10 天的销售额:
SELECT Measures.Sales ON COLUMNS,
Products.Products.MEMBERS ON ROWS
FROM
(
SELECT
generate //This would build the set for the last 10 days of Feb for every year
(
[Time].[Year].[All].children,
TAIL //This returns the last 10 days of february(second month)
(
[Time].[Year].CURRENTMEMBER.FIRSTCHILD.LEAD(1).CHILDREN,
10
)
) ON COLUMNS
FROM YourCube
)
就像一些额外的信息一样 - 如果您想要 "rolling" 10 天的总和或 10 天的平均值,那么类似于以下的代码是一种可能的方法:
WITH
MEMBER [Measures].[Sum 10] AS
Sum
(
LastPeriods
(10
,[Date].[Calendar].CurrentMember
)
,[Measures].[Internet Order Count]
)
MEMBER [Measures].[MovAvg 10] AS
Avg
(
LastPeriods
(10
,[Date].[Date].CurrentMember
)
,[Measures].[Internet Order Count]
), format_string = "#.000"
SELECT
{
[Measures].[Internet Order Count]
,[Measures].[Sum 10]
,[Measures].[MovAvg 10]
} ON 0
,Descendants
(
[Date].[Calendar].[Month].&[2006]&[2]
,[Date].[Calendar].[Date]
) ON 1
FROM [Adventure Works];
它returns数据如下:
我有一个事实 table,它有一个时间维度,包含年、月、日和小时。
我能够找到方法来过滤给定日期或月份发生的事情(按所需级别简单 where/filter)。但我想创建一个 MDX 查询来过滤结果,以便我的多维数据集包含有关 2 月最后 10 天记录的事实的信息。
有什么办法可以做到吗?
假设您的多维数据集中包含二月的所有天数,您可以在其中使用 set
WHERE
子句。
像这样..
WHERE ([Date].Month)
假设您有一个年-月-日-时层次结构并且可能缺少一些日期
Select....... on COLUMN,
....... ON ROWS
FROM ....
WHERE
({[Time].[Month].&[Feb 2015].LastChild.LAG(10) : [Date].[Month].&[Feb 2015].LastChild})
如果 date dim 中没有遗漏任何日期,
select ... ON COLUMNS,
... ON ROWS
FROM ...
WHERE
({[Time].[Date].&[02/19/2015] : [Date].[Date].&[02/28/2015]})
如果您想要每年 2 月最后 10 天的销售额:
SELECT Measures.Sales ON COLUMNS,
Products.Products.MEMBERS ON ROWS
FROM
(
SELECT
generate //This would build the set for the last 10 days of Feb for every year
(
[Time].[Year].[All].children,
TAIL //This returns the last 10 days of february(second month)
(
[Time].[Year].CURRENTMEMBER.FIRSTCHILD.LEAD(1).CHILDREN,
10
)
) ON COLUMNS
FROM YourCube
)
就像一些额外的信息一样 - 如果您想要 "rolling" 10 天的总和或 10 天的平均值,那么类似于以下的代码是一种可能的方法:
WITH
MEMBER [Measures].[Sum 10] AS
Sum
(
LastPeriods
(10
,[Date].[Calendar].CurrentMember
)
,[Measures].[Internet Order Count]
)
MEMBER [Measures].[MovAvg 10] AS
Avg
(
LastPeriods
(10
,[Date].[Date].CurrentMember
)
,[Measures].[Internet Order Count]
), format_string = "#.000"
SELECT
{
[Measures].[Internet Order Count]
,[Measures].[Sum 10]
,[Measures].[MovAvg 10]
} ON 0
,Descendants
(
[Date].[Calendar].[Month].&[2006]&[2]
,[Date].[Calendar].[Date]
) ON 1
FROM [Adventure Works];
它returns数据如下: