PowerPivot Query上的Filter()太慢

时间:2018-05-11 16:02:18

标签: mdx powerpivot

我有一个关于MDX代码的问题,我试图从我的多维数据集中包含多个帐号的度量中筛选出值,但是,性能太慢而且我还没有找到更好的解决方案比以下。

Filter
(
  [Cost Element].[ZCE Level08].[ZCE Level08].ALLMEMBERS
 ,
   Instr
     (
       [Cost Element].[ZCE.Level08].CurrentMember.Properties('Member_Caption')
                                     ,'A12600100'
     ) = 0

    AND 
      Instr
          (
             [Cost Element].[ZCE Level08].CurrentMember.Properties('Member_Caption')
                                     ,'A12600300'
          ) = 0
)

此代码实现的目的是过滤掉代码中包含任何帐户的任何行,但它是一个非常大的多维数据集,我必须添加17个帐户,这使得此过滤器实际上很慢有没有更好的解决方案比这个?

先谢谢你们!

1 个答案:

答案 0 :(得分:0)

好的有一个更快的方法 - 使用函数EXCEPT而不是FILTER并使用实际成员制作一组例外,而不是通过instr识别它们:

EXCEPT
(
  [Cost Element].[ZCE Level08].[ZCE Level08].ALLMEMBERS
 ,
  {
    [Cost Element].[ZCE.Level08].[ZCE Level08].[A12600100],
    [Cost Element].[ZCE.Level08].[ZCE Level08].[A12600300]
  }
)

如果你需要使用FILTER,那么只是为了摆脱member_caption / instr位应该加快速度:

FILTER
(
  [Cost Element].[ZCE Level08].[ZCE Level08].ALLMEMBERS
 ,
   [Cost Element].[ZCE.Level08].CurrentMember
     IS NOT [Cost Element].[ZCE.Level08].[ZCE Level08].[A12600100]
   AND 
   [Cost Element].[ZCE.Level08].CurrentMember
     IS NOT [Cost Element].[ZCE.Level08].[ZCE Level08].[A12600300]
)