如何构建只考虑2月最后10天发生的事实的MDX查询?

如何构建只考虑2月最后10天发生的事实的MDX查询?,mdx,olap,olap-cube,mondrian,Mdx,Olap,Olap Cube,Mondrian,我有一个事实表,它有一个时间维度,包含年、月、日和小时 我能够找到方法来过滤在某一天或某个月发生的事情,并按照所需的级别进行过滤。但是我想创建一个MDX查询来过滤结果,这样我的多维数据集就有了关于2月份最后10天记录的事实的信息 还有我能做的吗?假设你的多维数据集中有2月份的所有日子,你可以在其中使用一个集合WHERE子句 像这样的 WHERE ([Date].Month) 假设您有一个年-月-日-小时层次结构,并且可能缺少一些日期 Select....... on COLUMN, .....

我有一个事实表,它有一个时间维度,包含年、月、日和小时

我能够找到方法来过滤在某一天或某个月发生的事情,并按照所需的级别进行过滤。但是我想创建一个MDX查询来过滤结果,这样我的多维数据集就有了关于2月份最后10天记录的事实的信息


还有我能做的吗?

假设你的多维数据集中有2月份的所有日子,你可以在其中使用一个集合WHERE子句

像这样的

WHERE ([Date].Month)
假设您有一个年-月-日-小时层次结构,并且可能缺少一些日期

Select....... on COLUMN,
....... ON ROWS
FROM ....
WHERE
({[Time].[Month].&[Feb 2015].LastChild.LAG(10) : [Date].[Month].&[Feb 2015].LastChild})
如果日期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
)

假设您的多维数据集中有2月份的所有日子,您可以在其中使用一个集合WHERE子句

像这样的

WHERE ([Date].Month)
假设您有一个年-月-日-小时层次结构,并且可能缺少一些日期

Select....... on COLUMN,
....... ON ROWS
FROM ....
WHERE
({[Time].[Month].&[Feb 2015].LastChild.LAG(10) : [Date].[Month].&[Feb 2015].LastChild})
如果日期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
)

正如一些额外的信息-如果您想要滚动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];
它返回如下数据:


正如一些额外的信息-如果您想要滚动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];
它返回如下数据:


事实上,我需要固定的解决方案,但这是非常有用的,例如过去30天或过去12个月。谢谢实际上,我需要固定的解决方案,但这非常有用,例如过去30天或过去12个月。谢谢D