我应该这样说,我基本上对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,这不是完全有用的。所以我真的很想有人帮我弄清楚这有什么不妥。
谢谢!
答案 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
希望有所帮助。