更简单的mdx过滤器解决方案

时间:2014-03-21 11:52:41

标签: filter conditional-statements mdx

我有一个查询返回过去12个月的结果,我需要以某种方式应用过滤器,只有在过去7个月内具有特定度量的产品模型>返回0(至少在其中一个月内)。

我可以这样做:

 SELECT {[Measures].[MQ]} ON COLUMNS, 
FILTER([dim_ProductModel].[Product Model].members, (([Dim_Date].[Date Full].&[2013-08-01],[Measures].[MQ]) > 0)   OR (([Dim_Date].[Date Full].&[2013-09-01],[Measures].[MQ]) > 0) OR  ([Dim_Date].[Date Full].&[2013-10-01],[Measures].[MQ]) > 0) * {[Dim_Date].[Date Full].&[2013-08-01]:[Dim_Date].[Date Full].&[2014-02-01]} ON ROWS FROM [cub_dashboard_spares] 

(我离开了其他ORs结合)所以我需要6个OR,我不喜欢, 不知怎的,不可能像我期望的那样(伪代码)以这种方式编写过滤器:

FILTER([dim_ProductModel].[Product Model].members, (ANY({[Dim_Date].[Date Full].&[2013-08-01]:[Dim_Date].[Date Full].&[2014-02-01]}),[Measures].[MQ]) > 0)

,请问一些技巧/语法如何避免使用mutliple OR?喜欢ANY或idk ..

非常感谢你提前帮助,

1 个答案:

答案 0 :(得分:0)

您可以使用其他Filter()并检查其中是否至少有一个Count的结果:

FILTER([dim_ProductModel].[Product Model].members,
       FILTER({[Dim_Date].[Date Full].&[2013-08-01]:[Dim_Date].[Date Full].&[2014-02-01]}),
              [Measures].[MQ]) > 0
             ).Count > 0
      )

假设没有MQ的负值,您还可以观察到,如果至少有一个月的值为> 0,则总和必须> 0,并使用

FILTER([dim_ProductModel].[Product Model].members,
       Sum({[Dim_Date].[Date Full].&[2013-08-01]:[Dim_Date].[Date Full].&[2014-02-01]}),
           [Measures].[MQ]
          )
        > 0
      )