SSAS MDX计算过滤器

时间:2016-06-15 14:52:59

标签: filter ssas mdx

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

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

在MDX之后,过滤器(4,8)&lt;&gt; 41111,无法正常工作。如果我删除了41111过滤器,该测量工作正常,只显示4/8。将41111添加为&#39;&lt;&gt;&#39;过滤器,结果为空白,甚至不是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
); 

我试过谷歌,但似乎没有把关键字弄好。在social.msdn.microsoft.com上,很多反应被标记为答案,但到目前为止对我来说并非如此。 部署ssas cube工作正常,没有错误。

有人能指出我正确的方向吗?我尝试Except,但该命令似乎不适用于多字段(rek3 / rek5)。

1 个答案:

答案 0 :(得分:0)

比较成员时使用

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