MDX使用Query成员作为过滤器值

时间:2013-09-25 01:58:36

标签: filter mdx

您好我试图将查询成员作为过滤条件,而我正在尝试的代码是:

Member [ThisMonth] as VBAMDX.Format(VBAMDX.Now(),"yyyyMM")

  SET [currentdays] AS filter([D Date].[DAY ID].Members,
 [D Date].[MONTH ID]=[ThisMonth])

但查询无法识别条件

Member [ThisMonth] as VBAMDX.Format(VBAMDX.Now(),"yyyyMM")

      SET [currentdays] AS filter([D Date].[DAY ID].Members,
     [D Date].[MONTH ID].&[201309])

然后查询返回所需结果。我只是想知道有没有更动态的方法来做到这一点?

非常感谢!

1 个答案:

答案 0 :(得分:1)

VBAMDX.Format(VBAMDX.Now(),"yyyyMM")返回一个字符串,而不是成员标识符。这类似于SQL select 'myColumn' from myTable,它返回文字字符串'myColumn'而不是列mycolumn的内容。

如果要使用Format函数,则首先需要构造成员的完整唯一名称,然后使用StrToMember将字符串转换为成员标识符:

Member [ThisMonth] as '[D Date].[MONTH ID].&['
                      + VBAMDX.Format(VBAMDX.Now(),"yyyyMM")
                      + ']'    -- this returns a string!

   SET [currentdays] AS filter([D Date].[DAY ID].Members,
       StrToMember([ThisMonth]))

顺便说一下:你这里不需要Filter,它可以大大减慢查询速度,你可以使用

SET [currentdays] AS { StrToMember([ThisMonth]) }