繁体   English   中英

在MDX中筛选多个DateRanges

[英]Filter on Multiple DateRanges in MDX

假设我有一张看起来像的桌子

ID | EntryDate  | ExitDate   | LastSeen   | Sex
---|------------|------------|----------------
1  | 2000-01-23 | 2015-01-18 | 2013-08-01 | M
2  | 2008-01-13 | null       | 2012-06-25 | F
3  | 2014-01-09 | 2014-12-21 | 2014-09-12 | M

我已经创建了作为[Measures]。[People]作为Count(ID)的度量和维,并具有3个唯一的日期维[EntryDate],[ExitDate],[LastSeenDate],具有[Day] Level,以'YYYYMMDD'格式表示(例如:20151231)

我要编写的MDX是计算2014年1月1日之前进入的人数,2013年1月1日之后最后一次看到的人数以及2013年1月1日之后的退出日期的人数

如果我将其编写为sql,则语法为

Select count(ID) from table where entryDate < 20140101 and exitDate > 20130101 and lastseenDate > 20130101;

我的第一次尝试是将MDX编写为

With
Set [EnrolDateRange] As Filter([EnrolDate].[Day].Children,[Enrol Date].[Day].CurrentMember.Name < '20140101')
Set [LastSeenDateRange] As Filter([LastSeenDate].[Day].Children,[LastSeen Date].[Day].CurrentMember.Name > '20130101')
Set [ExitDateRange] As Filter([ExitDate].[Day].Children,[ExitDate].[Day].CurrentMember.Name > '20130101')
MEMBER [Measures].[N1] As Aggregate ([EnrolDateRange],[Measures].[People])
MEMBER [Measures].[N2] As Aggregate ([LastSeenDateRange],[Measures].[People])
MEMBER [Measures].[N3] As Aggregate ([ExitDateRange],[Measures].[People])
MEMBER [Measures].[Total] As ([Measures].[N1] + [Measures].[N2] + [Measures].[N3])
Select { [Measures].[Total] } on columns, { [Sex].[Sex].Children } on Rows FROM [Cube]

但是这里的问题是我得到的总数是错误的,因为相同的行将分别为每个条件聚合。

我无法在日期上进行交叉联接的原因是因为我拥有60多年的数据。

有什么方法可以使用MDX来实现上述目标

NULL:(Date)用于<= ,将(Date):NULL用于>=

select [Measures].[People] on 0
from [Cube]
where
(
 {NULL:[EntryDate].[Day].&[20131231]}
 /* not 20140101 because <= */

 ,{[LastSeenDate].[Day].&[20130102]:NULL}
 /* not sure, you mean after including Jan 1st or no */

 ,{[ExitDate].[Day].&[20130102]:NULL} /* the same */
)

一个重要提示:过滤器中的成员必须存在于每个维度。

例如,如果此维度中没有[EntryDate].[Day].&[20131231] ,则服务器将其替换为NULL,并且不知道要过滤哪个维度,因为另一个范围部分是查询中的NULL。 结果将全部为NULL,请小心。

按照我的做法:将空成员(没有真实数据)添加到维度比开发其他行为(例如“如果成员不存在,请在其右侧/左侧找到第一个非空成员”)更好。 与棘手的逻辑相比,这不会影响磁盘空间(仅影响维度数据),并且性能下降非常低。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM