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

Posted

技术标签:

【中文标题】如何构建仅考虑 2 月最后 10 天发生的事实的 MDX 查询?【英文标题】:How do I build a MDX query that considers only facts that happened in the last 10 days of February? 【发布时间】:2015-08-12 09:03:40 【问题描述】:

我有一个具有时间维度的事实表,其中包含年、月、日和小时。

我能够找到过滤给定日期或月份中发生的事情的方法(简单的位置/按所需级别过滤)。但我想创建一个 MDX 查询来过滤结果,以便我的多维数据集包含有关 2 月最后 10 天记录的事实的信息。

有没有我能做到的?

【问题讨论】:

【参考方案1】:

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

像这样..

WHERE ([Date].Month)

假设您有一个年-月-日-小时层次结构,并且可能缺少一些日期

Select....... on COLUMN,
....... ON ROWS
FROM ....
WHERE
([Time].[Month].&[Feb 2015].LastChild.LAG(10) : [Date].[Month].&[Feb 2015].LastChild)

如果日期暗淡中没有缺少日期,

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】:

正如一些额外信息 - 如果您想要“滚动” 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 个月)。谢谢! :D

以上是关于如何构建仅考虑 2 月最后 10 天发生的事实的 MDX 查询?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 jQuery datepicker 禁用每个月的最后 3 天

Autosys工作计划在每个月的最后4天之外运行

《数据仓库工具箱》——事实表

如何使用 Python 仅查找包含该月最后一天的日期的文件?

2018年Q4计划

#10月2日集训内容总结