在MDX查询中使用过滤器和Instr时的性能

时间:2012-10-10 08:35:49

标签: mdx activepivot

我有以下表单的MDX查询,我正在使用ActivePivot。我需要通过在另一个维度(列)中存在字符串的部分来过滤结果(在我的行中):

SELECT
NON EMPTY Hierarchize({[CODE].[CODE].Members}) ON ROWS,
NON EMPTY Hierarchize({Filter([RELEVANCE].Members, InStr([RELEVANCE].CurrentMember.Name, "n/a") > 0)}) ON COLUMNS
FROM [CUBE]
WHERE ([Measures].[contributors.COUNT])

使用filter / instr,此查询的性能非常差。我想我可以理解,因为它可能是'扫描'通过所有成员。

是否有另一种方法来实现我想要的,但性能更好。

由于

1 个答案:

答案 0 :(得分:2)

如果您的RELEVANCE维度有3个级别,并且最后一个维度上显示“n / a”,您可以这样写:

SELECT
NON EMPTY [CODE].[CODE].Members ON ROWS,
NON EMPTY Hierarchize({[RELEVANCE].Levels(0).Members,
                       [RELEVANCE].Levels(1).Members, 
                       Filter([RELEVANCE].Levels(2).Members, InStr([RELEVANCE].CurrentMember.Name, "n/a") > 0)}) ON COLUMNS
FROM [CUBE]
WHERE ([Measures].[contributors.COUNT])

它将减少无用的过滤器检查次数。

您还可以使用包含2个成员的级别向您的多维数据集添加另一个维度:“不适用”和“不是不适用”。

在这种情况下,查询将变为:

SELECT
NON EMPTY [CODE].[CODE].Members ON ROWS,
NON EMPTY [RELEVANCE].Members ON COLUMNS
FROM [CUBE]
WHERE ([Measures].[contributors.COUNT], [the new dimension].[...].[not n/a])

但这会改变总计的价值。