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



我应该首先说我对MDX基本上一无所知。直到昨天我什至不知道它的存在,当时有人把这个查询交给我使用,声称它正在工作,我运行它,当它应该由一个人过滤时,它返回了每个结果。所以我希望解释一下 a. 它目前实际在做什么,以及 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;";

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

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

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

谢谢!

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

了解子选择

会创建一个新的"子多维数据集",仅限于子选择中的成员及其所有祖先(即,它将格式良好的层次结构保留回根目录(。如果顶级选择不是很严格,人们有时会惊讶地发现最终结果中的祖先。(我知道这不是你的情况,仅供参考。

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]
)

下面是用于子选择的文档。请参阅最后的"备注"部分,了解"位置":http://technet.microsoft.com/en-us/library/ff487138.aspx

希望有帮助。

最新更新