使用 MDX 查询从日期范围中获取特定日期的时间表

Posted

技术标签:

【中文标题】使用 MDX 查询从日期范围中获取特定日期的时间表【英文标题】:Get schedules of particular date from date ranges with MDX query 【发布时间】:2019-04-24 16:06:07 【问题描述】:

这个问题我已经发过很多次了,可惜没人能看懂,对不起我的英语不好:( 我重新制定...

我有以下事实表

我想在所有日期范围(DATE_DEB、DATE_FIN)中获取与特定日期和星期几 (JOUR) 匹配的记录

我可以像这样在 SQL 中做到这一点:

SELECT  DATE_DEB, 
DATE_FIN,
ID_HOR,
to_char(HR_DEB,'hh24:mi:ss') as HR_DEB,
to_char(HR_FIN,'hh24:mi:ss') as HR_FIN,
JOUR
FROM  GRP_HOR HOR, GRP
WHERE GRP.ID_ACTIV_GRP = HOR.ID_ACTIV_GRP
AND TO_DATE('1998-01-08', 'YYYY-MM-DD') between DATE_DEB and DATE_FIN
AND 1 + TRUNC(TO_DATE('1998-01-08', 'YYYY-MM-DD')) - TRUNC(TO_DATE('1998-01-08', 'YYYY-MM-DD'), 'IW') = JOUR

所以,我将获得 29 条记录(见下文),它们包含在每个范围内并与星期几 (JOUR) 匹配,之后我想将它们放大几小时(HR_DEB、HR_FIN)。

问题是,最好的方法是什么?

创建 2 个日期维度并将它们与 DATE_DEB、DATE_FIN 链接。

创建 2 个时间维度并将它们与 HR_DEB、HR_FIN 链接。

如何在 MDX 中实现 between SQL 子句?或大于或小于?

提前谢谢你。

输出:

【问题讨论】:

(增加)有趣的问题 【参考方案1】:

要在MDX 中指定日期范围,只需使用冒号运算符:

这是MSDN上的文档:https://docs.microsoft.com/en-us/sql/mdx/range-mdx?view=sql-server-2017

这是他们给出的例子:

With Member [Measures].[Freight Per Customer] as  
 (  
     [Measures].[Internet Freight Cost]  
     /   
     [Measures].[Customer Count]  
)  
SELECT   
    [Ship Date].[Calendar].[Month].&[2004]&[1] : [Ship Date].[Calendar].[Month].&[2004]&[3] ON 0,  
    [Product].[Category].[Category].Members ON 1  
FROM  
    [Adventure Works]  
WHERE  
    ([Measures].[Freight Per Customer])  

【讨论】:

我终于能够通过日期和时间维度的中间桥实现多对多关系,多维数据集的构建时间增加了一点(15 分钟),但它对我来说是完美的,谢谢你们非常好!

以上是关于使用 MDX 查询从日期范围中获取特定日期的时间表的主要内容,如果未能解决你的问题,请参考以下文章

在日期范围之间使用 TOPCOUNT 的 MDX 查询返回带有一些空值的顶部

如何从 MDX 查询中提取日期中的月份年份

用 MDX 查询的日期范围子句中的现有成员替换不存在的成员

具有两个或多个日期范围的 MDX 查询

如何编写按日期范围和维度成员值进行切片的 mdx 查询

Mondrain MDX 用于日期范围之间的记录,其中开始日期和结束日期是单独的列