1

我正在尝试根据作为参数传递的日期值(名为 AsOnDate)从 Webpart 日期过滤器中将值提取到性能点报告的 MDX 中。这是一个帐户数据库,场景是获取休眠帐户数据。我面临的问题是我需要在 AsOnDate 值之前 6 个月之前获取具有休眠日期的帐户,即 AsOnDate -6 个月,我设法使用 DateAdd() 函数计算了 6 个月大的日期,如下所示:

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>>'))+"]")} 
) 

但是,按以下方式直接传递日期过滤器值可以正常工作:

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

1 回答 1

4

想通了,经过几次成功的试验.. 设法破解 StrToMember() 和 Format() 的组合,将计算的 Date 转换为字符串并将其作为 Member 输入 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]") } ) 

希望它会对那里的人有所帮助..

于 2013-06-08T18:07:07.487 回答