如何根据MDX中的参数使用计算的日期值进行过滤

时间:2013-06-08 16:00:00

标签: sharepoint ssas mdx dashboard-designer

我正在尝试将基于作为参数传递的Date值(名为AsOnDate)的值从Webpart Date Filter中提取到Performance Point报告的MDX中。这是一个帐户数据库,方案是获取休眠帐户数据。我面临的问题是我需要获取具有休眠日期的账户,直到AsOnDate值前6个月,即AsOnDate -6个月,我设法使用DateAdd()函数计算6个月的日期,如下所示: / p>

DateAdd('m', -6, DateValue('<<AsOnDate>>'))

现在,我无法弄清楚如何在WHERE子句中传递此值代替参数,MDX查询如下所示:

WITH 

SET [Products] AS { <<Product>> } 

MEMBER [Measures].[Dormant A/C Count] AS ([Measures].[Account Head Count]) 

MEMBER [Measures].[Dormant A/C Vol.] AS ([Measures].[LC Balance]) 

MEMBER [AH].[Subhead - Description].[Totals] AS Aggregate([Products]) 

SELECT 

{ [Measures].[Dormant A/C Count], [Measures].[Dormant A/C Vol.]} 
ON COLUMNS, 

{[Products], [AH].[Subhead - Description].[Totals]} 
ON ROWS 

FROM 
[MyCUbe] 

WHERE (

[AH].[Is Dormant].&[1], 
[AH].[Is Inoperative].&[0], 
{NULL : [AH].[Dormant Date].&[ DateAdd('m', -6, DateValue('<<AsOnDate>>')) ]} 

) 

我收到此错误:

Error running data source query.
The 'DateAdd('m', -6, DateValue('2012-12-03'))' 
string cannot be converted to the date type.

我尝试过StrToMember(),如:

WHERE ( 
[AH].[Is Dormant].&[1], [AH].[Is Inoperative].&[0], 
{ NULL : StrToMember("[AH].[Dormant Date].&["+DateAdd('m', -6, DateValue('<<AsOnDate>>'))+"]")} 
) 

但是,直接传递Date Filter值如下:

WHERE ( [AH].[Is Dormant].&[1], [AH].[Is Inoperative].&[0], 
{ NULL : [AH].[Dormant Date].&[<<AsOnDate>>T00:00:00]} ) 

1 个答案:

答案 0 :(得分:4)

在经历了一些试验之后想出来......设法破解了StrToMember()和Format()的组合,将计算出的Date转换为字符串并将其作为成员提供给MDX,这是工作的WHERE子句:

WHERE ( [AH].[Is Dormant].&[1], [AH].[Is Inoperative].&[0], 
{ NULL : StrToMember("[AH].[Dormant Date].&[" + Format(DateAdd('m', -6, DateValue('<<AsOnDate>>')), 'yyyy-MM-dd') + "T00:00:00]") } ) 

希望它对那里的人有用..