我有以下表单的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,此查询的性能非常差。我想我可以理解,因为它可能是'扫描'通过所有成员。
是否有另一种方法来实现我想要的,但性能更好。
由于
答案 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])
但这会改变总计的价值。