我正在尝试将基于作为参数传递的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]} )
答案 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]") } )
希望它对那里的人有用..