MDX的新手,并使用以下方法继承了应用程序以检索最近7个工作日。
注意,实际日期是动态生成的。
WHERE ( [DimCalendar].[WorkDayHierarchy].[WorkDate].&[2016-03-25T00:00:00]
: [DimCalendar].[WorkDayHierarchy].[WorkDate].&[2016-03-26T00:00:00].lag(6)
)
我希望它使用上一个前7个工作日:
2016-03-17
至2016-03-25
但是,它使用的是未来日期
2016-03-25
至 DimCalendar中的最新日期 根据我的阅读,这是因为2016-03-26
在层次结构中不存在,所以结束范围变为NULL,这说明了将来的日期。
[WorkDate].&[2016-03-25T00:00:00] : NULL
问题在于日期值是动态生成的,并且事先不知道层次结构中存在哪些值。我不确定如何构造MDX日期范围以获得所需的结果。
我尝试使用<=
和FILTER
,但始终遇到转换错误。使用普通SQL,这将很容易。我可以写:
WHERE [WorkDate] >= '2016-03-17'
AND [WorkDate] <= '2016-03-25'
任何想法都等同于MDX中的等效过滤器?
答案 0 :(得分:1)
快速修复方法可能是
位置([DimCalendar]。[WorkDayHierarchy]。[WorkDate]。&[2016-03-25T00:00:00] .lag(7) :[DimCalendar]。[WorkDayHierarchy]。[WorkDate]。&[2016-03-25T00:00:00] ) 但这仅在过去的日期位于层次结构中(在这种情况下为2016-03-25)时有效。
编辑:基于以下问题
///不使用强名称进行查询。 (否&)
select {[Measures].[Internet Order Count] }
on columns,
[Date].[Day of Year].[1]:[Date].[Day of Year].[10]
on rows
from [Adventure Works]
//此查询通过将维成员值作为度量值进行过滤。
WITH
MEMBER [Measures].[Data Type] AS
[Date].[Day of Year].CurrentMember.Properties ("Member_Value",TYPED)
select {[Measures].[Internet Order Count] }
on columns,
filter ([Date].[Day of Year].[Day of Year],[Measures].[Data Type]<12)
on rows
from [Adventure Works]
//您也可以尝试以下一种
select
{[Measures].[Internet Sales Amount],[Measures].[Reseller Sales Amount]}
on columns,
filter([Date].[Day of Year].[Day of Year],
[Date].[Day of Year].currentmember.Properties ("Member_Value",TYPED)
>12 and [Date].[Day of Year].currentmember.Properties ("Member_Value",TYPED)<20)
on rows
from
[Adventure Works]
编辑
//这可能是最适合您的解决方案
select
{[Measures].[Internet Sales Amount],[Measures].[Reseller Sales Amount]}
on columns,
([Geography].[Country].&[United States]
)
on rows
from
[Adventure Works]
where
filter([Date].[Day of Year].[Day of Year],
[Date].[Day of Year].currentmember.Properties ("Member_Value",TYPED)
>12 and [Date].[Day of Year].currentmember.Properties ("Member_Value",TYPED)<20)