我正在尝试根据作为参数传递的日期值(名为 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]} )