MDX MEMBER导致NON EMPTY不过滤

时间:2012-02-02 23:16:31

标签: sql-server ssas mdx

我正在使用MDX查询来提取信息以支持一组报告。报告需要高度详细,因此需要一些时间来生成。为了加快访问时间,我们提取所需的数据并将其存储在平坦的Oracle表中,然后连接到Excel中的表。这使得报告可以在几秒钟而不是几分钟内刷新。

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

我已将整个数据集构建到一个完美运行的MDX查询中。我交叉加入的一个集合包括来自三个不同层次结构的成员,它看起来像这样:

(
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 个答案:

答案 0 :(得分:1)

您可以根据主要指标为您的会员指定Null,如:

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

这样它只会在有数据的情况下生成。如果您需要更精确,可以进一步为空检查添加额外的尺寸。