2012-02-02 74 views
0

我正在使用MDX查询来提取信息以支持一组报告。报告需要高度详细的信息,因此需要一段时间才能生成。为了加快访问时间,我们将需要的数据提取出来并存储在一个平坦的Oracle表中,然后在Excel中连接到表。这使得报告在数秒内而不是在几分钟内刷新。MDX MEMBER导致NON EMPTY无法过滤

此前,MDX由部门生成并由100个部门运行,然后运行多个其他过滤器。所有这些都是在VB.Net中完成的。过滤器的要求已经发展到这种方法不可持续的程度(可能不是最好的方法)。

我已经将整个数据集构建到一个完美工作的MDX查询中。我的一个组,我CROSS JOIN包括来自三个不同层次的层次结构的成员,它看起来像这样:

(
Descendants([Merch].[Merch CHQ].[All], 2), 
Descendants([Merch].[Merch CHQ].[All], 3), 
[Merch].[Merch CHQ].[Department].&[1].Children 
) 

对我来说,问题是在我们的层次(我不能改变),每个组(第一项目)和每个部门(第二项目)与他们的命名具有相同的结构,即15-DeptName,并且使用起来很混乱。

为了解决它,我增加了一个成员:

MEMBER 
[Measures].[Merch Level] AS 
(
[Merch].[Merch CHQ].CurrentMember.Level.Name 
) 

它返回什么类型的部件,它完美的作品。

问题是,它会更新每个成员,所以没有行被NON BLANK过滤,而不是65k行,我有130k行,这会损害我的访问性能。

我的查询是否可以更改为仍然过滤出非空白使用IIF检查每个测量为空?

回答

1

您可以根据您的主要衡量标准一样指定空的成员:

MEMBER 
[Measures].[Merch Level] AS 
IIf(IsEmpty([Measures].[Normal Measure]),null,[Merch].[Merch CHQ].CurrentMember.Level.Name) 

这样,当有数据只会产生。如果您需要更精确的话,您可以进一步添加额外的尺寸到空支票。

+0

完美的工作,谢谢彼得。 – Jesse 2012-02-03 17:18:18