0

我应该先说我对 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;";

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

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

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

谢谢!

4

1 回答 1

1

您在此处拥有的查询是子选择,因此 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]
)

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

希望有帮助。

于 2013-09-26T22:43:45.583 回答