此MDX查询返回所有结果,忽略WHERE

时间:2013-09-26 21:57:36

标签: mdx

我应该这样说,我基本上对MDX一无所知。我甚至不知道它存在直到昨天,当有人递给我这个查询使用,声称它正在工作,我运行它并且当它应该由一个人过滤时它返回每个结果。所以我想要一个解释。它目前在做什么,以及b。如何解决它来做我想做的事情:

SELECT NON EMPTY
{
    [Measures].[Time Spent]
} ON COLUMNS, 
NON EMPTY
{
    [Consultant].[Account Full Name].[Account Full Name].ALLMEMBERS * 
    [Consultant].[Activity Full Name].[Activity Full Name].ALLMEMBERS * 
    [Consultant].[Description].[Description].ALLMEMBERS * 
    [Consultant].[Engineer Full Name].[Engineer Full Name].ALLMEMBERS
} DIMENSION PROPERTIES MEMBER_CAPTION, MEMBER_UNIQUE_NAME ON ROWS FROM  
( 
    SELECT ( [Date].[Date].&[2013-01-01T00:00:00] : [Date].[Date].&[2014-01-01T00:00:00] )
    ON COLUMNS FROM [Data]
    WHERE ([Consultant].[Engineer Full Name].&[Adam])
    ) CELL PROPERTIES VALUE, BACK_COLOR, FORE_COLOR, FORMATTED_VALUE, FORMAT_STRING, FONT_NAME, FONT_SIZE, FONT_FLAGS;";

在实际代码中,日期范围和人名是调用此查询的函数的参数,我添加了一些换行符以使其更具可读性,但除此之外,这是我给出的代码的查询运行。

据我所知,它首先通过选择日期范围来创建数据,然后通过字段中的名称“切片”它,然后生成一个表,其中一个轴是Time Spent,另一个轴是一些其他数据。哪个好,除了WHERE被完全忽略。我仅在日期范围内获得结果,但未通过工程师全名以任何方式过滤。

我一直在谷歌搜索,但是虽然我发现了一些名义上介绍MDX,我还没有找到一个没有真的假设你基本上已经知道MDX,这不是完全有用的。所以我真的很想有人帮我弄清楚这有什么不妥。

谢谢!

1 个答案:

答案 0 :(得分:1)

此处的查询是一个子选择,因此WHERE子句不是一个切片,就像在非子选择查询中使用的那样。你对切片和表格的解释是正确的 - subselect的行为是你绊倒的。

理解subselect创建一个新的“子多维数据集”,仅限于子选择中的成员,加上他们的所有祖先(即,它将格式良好的层次结构保留回根目录)。如果顶级选择不是非常严格,人们有时会惊讶地发现最终结果中的祖先。 (我知道这不是你的情况,只是我们。)

WHERE子句对子多维数据集没有影响。我认为你应该能够将它移到ROWS来实现你想要的目标。

... FROM (
  SELECT 
    ( [Date].[Date].&[2013-01-01T00:00:00] : [Date].[Date].&[2014-01-01T00:00:00] ) ON COLUMNS 
    ([Consultant].[Engineer Full Name].&[Adam]) ON ROWS
  FROM [Data]
)

这是subselect的文档。请参阅最后关于WHERE的备注部分: http://technet.microsoft.com/en-us/library/ff487138.aspx

希望有所帮助。