Ssas 在MDX中筛选多个日期范围

Ssas 在MDX中筛选多个日期范围,ssas,mdx,Ssas,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 我已将度量

假设我有一张看起来像

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]作为计数(ID) 并且具有3个唯一的日期维度[EntryDate]、[ExitDate]、[LastSeeEndate],其[Day]级别以“yyyyymmdd”格式表示(例如: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;
从entryDate<20140101和exitDate>20130101和LastSeeEndate>20130101的表中选择计数(ID);
我的第一次尝试是将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]
与
将[EnrolDaterRange]设置为筛选器([EnrolDate].[Day]。子项[Enrol Date].[Day]。CurrentMember.Name<'20140101')
将[LastSeenData]设置为筛选器([LastSeenData].[Day]。子项[LastSeenData].[Day]。CurrentMember.Name>“20130101”)
将[ExitDaterRange]设置为筛选器([ExitDate].[Day]。子项[ExitDate].[Day]。CurrentMember.Name>“20130101”)
成员[Measures].[N1]作为聚合([EnroldaterRange],[Measures].[People])
成员[Measures].[N2]作为聚合([lastseendarange],[Measures].[People])
成员[Measures].[N3]作为聚合([ExitDaterRange],[Measures].[People])
成员[措施].[总数]为([措施].[N1]+[措施].[N2]+[措施].[N3])
在列上选择{[Measures].[Total]},在[Cube]的行上选择{[Sex].[Sex].[Children}
但这里的问题是,我得到的总数是错误的,因为相同的行将分别针对每个条件进行聚合

我不能在日期上进行交叉连接的原因是因为我有超过60年的数据

是否有任何方法可以使用MDX实现上述功能使用
NULL:(Date)
for
=

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 */
)
在0上选择[Measures].[People]
从[立方体]
哪里
(
{NULL:[EntryDate].[Day].&[20131231]}

/*不是20140101,因为这是一个很好的主要提示:省去了很多未来的麻烦