0

我有一个以下形式的 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])

使用过滤器/instr 时,此查询的性能非常差。我想我可以理解,因为它大概“扫描”了所有成员。

有没有另一种方法可以实现我想要的,但性能更好。

谢谢

4

1 回答 1

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 个成员级别的维度:“n/a”和“not n/a”。

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

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])

但这会改变您的总计值。

于 2012-10-11T12:03:59.457 回答