使用命名集在WHERE中过滤

时间:2017-05-13 19:08:05

标签: ssas mdx

是否可以使用聚合命名集来过滤MDX中的查询?我不希望结果集中的设置项将其移动到WHERE,但这似乎导致所有度量返回(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])

这给了我(null)值,如果我使用[Combined],我收到了一个周期性参考错误,但使用下面的工作正常:

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

我在这里俯瞰什么吗?或者使用错误的方法?也许这只是我要查询的多维数据集的一个怪癖?

1 个答案:

答案 0 :(得分:2)

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

Logical order an MDX query is processed

WHERE发生在WITH

之前

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

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

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

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