パラメーターとして渡された日付値 (AsOnDate という名前) に基づいて、Web パーツ日付フィルターからパフォーマンス ポイント レポートの 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]} )