SSAS MDX 计算过滤器

SSAS MDX calculation filter

我想做这样的事情 (tsql):

select saldi
where rek in (4,8)
 and rek5  <> 41111 
 and rek3  not in (a,b,c)

在 MDX 之后,过滤器 (4,8) <> 41111 不起作用。如果我删除 41111 过滤器,测量工作正常,只显示 4/8。添加 41111 作为“<>”过滤器,结果为空,甚至不是 0.00。

THIS = IIF(
   ( [Rekeningen].[Rek n1].CurrentMember  = [Rekeningen].[Rek n1].&[4]
        or [Rekeningen].[Rek n1].CurrentMember  =  [Rekeningen].[Rek n1].&[8] )
   and [Rekeningen].[Rek n5].CurrentMember <> [Rekeningen].[Rek n5].&[41111]
,
   [Measures].[Saldi], 0.00
); 

我尝试了 Google,但似乎没有找到正确的关键字。在 social.msdn.microsoft.com 上,很多反应都被标记为答案,但到目前为止对我来说还没有。 部署 ssas 多维数据集工作正常,没有错误。

任何人都可以指出我正确的方向吗?我试过 Except,但该命令似乎不适用于多字段 (rek3/rek5)。

ISNOT IS用于比较成员。这给了我们这个:

THIS = 
  IIF
  (
      (
        [Rekeningen].[Rek n1].CurrentMember IS [Rekeningen].[Rek n1].&[4]
      OR 
        [Rekeningen].[Rek n1].CurrentMember is [Rekeningen].[Rek n1].&[8]
      )
    AND 
      [Rekeningen].[Rek n5].CurrentMember IS NOT [Rekeningen].[Rek n5].&[41111]
   ,[Measures].[Saldi]
   ,0
  );

而不是 0 你应该几乎总是在多维数据集脚本计算中使用 null 否则你会降低性能:

THIS = 
  IIF
  (
      (
        [Rekeningen].[Rek n1].CurrentMember IS [Rekeningen].[Rek n1].&[4]
      OR 
        [Rekeningen].[Rek n1].CurrentMember is [Rekeningen].[Rek n1].&[8]
      )
    AND 
      [Rekeningen].[Rek n5].CurrentMember IS NOT [Rekeningen].[Rek n5].&[41111]
   ,[Measures].[Saldi]
   ,NULL
  );

我对这些成员名字不服气? [Rekeningen].[Rek n1].CurrentMember[Rekeningen].[Rek n1].&[4]。让我添加两个我认为可能的备选方案:

1.

THIS = 
  IIF
  (
      (
        [Rekeningen].[Rek n1].CurrentMember IS [Rekeningen].[Rek n1].[Rek n1].&[4]
      OR 
        [Rekeningen].[Rek n1].CurrentMember is [Rekeningen].[Rek n1].[Rek n1].&[8]
      )
    AND 
      [Rekeningen].[Rek n5].CurrentMember IS NOT [Rekeningen].[Rek n5].[Rek n5].&[41111]
   ,[Measures].[Saldi]
   ,NULL
  );

2.

THIS = 
  IIF
  (
      (
        [Rekeningen].CurrentMember IS [Rekeningen].[Rek n1].&[4]
      OR 
        [Rekeningen].CurrentMember is [Rekeningen].[Rek n1].&[8]
      )
    AND 
      [Rekeningen].CurrentMember IS NOT [Rekeningen].[Rek n5].&[41111]
   ,[Measures].[Saldi]
   ,NULL
  );