【问题标题】:SSAS MDX calculation filterSSAS MDX 计算过滤器
【发布时间】:2016-06-15 14:52:58
【问题描述】:

我想做这样的事情(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)。

【问题讨论】:

    标签: filter ssas mdx


    【解决方案1】:

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

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

    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].&amp;[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
      );
    

    【讨论】:

    • 感谢您的详细回答。 @whytheq 解析错误,这不应该是“不是”吗?将其标记为答案,因为解决了问题,但它并没有在功能上完成我在多维数据集中想要的功能。我会重新考虑并改写我的问题并发布一个新问题。
    • @FabioBruna 为解析错误道歉 - 我已经编辑了答案。是的,我经常得到运行正常但没有返回我期望的数字的 mdx:通常我然后将脚本分成更小的块并测试它们以查看它们返回的数据......然后进一步增加复杂性......直到它按预期“表现”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-06
    相关资源
    最近更新 更多