使用命名集在 WHERE 中过滤

Filter in WHERE using Named Set

是否可以使用聚合命名集来过滤 MDX 中的查询?我不希望结果集中的设置项因此将其移动到 WHERE,但这似乎导致所有措施 return (null)。

首先,我使用员工层次结构中的几个成员构建了一个集合:

WITH 
  SET [Combined] as {
   [Staff].[Group].[Practice Group].&[04],
   [Staff].[Group].[Practice Group].&[06]
  }

然后我将该集合聚合成一个新成员:

  MEMBER [Staff].[Group].[Group Combo] AS Aggregate([Combined])

通常我会在我的查询中使用它作为报告区域,可能使用层次化(取决于查询)并且一切都很好。但是这次我需要根据这种成员组合过滤数据,例如:

WHERE ([Staff].[Group].[Group Combo])

这给了我(空)值,如果我使用 [Combined] 我收到了一个循环引用错误,但是使用下面的工作正常:

WHERE ({[Staff].[Group].[Practice Group].&[04],[Staff].[Group].[Practice Group].&[06]})

我是不是忽略了什么?还是使用了错误的方法?也许这只是我正在查询的多维数据集的一个怪癖?

我会说该行为与处理器在您的查询中执行子句的顺序有关:

Logical order an MDX query is processed

WHERE 发生在 WITH

之前

您提到以下工作正常 - 在 where 子句中指定显式成员是非常标准的和快速

WHERE ({[Staff].[Group].[Practice Group].&[04],[Staff].[Group].[Practice Group].&[06]})

您可以将其添加到子select,就像它在 0 轴上一样:

SELECT
 ...
 ...
FROM
  (
    SELECT
       {[Staff].[Group].[Practice Group].&[04],[Staff].[Group].[Practice Group].&[06]} ON 0
    FROM [YourCube]
  );