Ssas mdx查询中的筛选器未正确应用

Ssas mdx查询中的筛选器未正确应用,ssas,mdx,Ssas,Mdx,我有一个MDX过滤器的问题,我认为我使用正确,但我仍然得到一些我不想得到的行。 示例查询是: SELECT {[Measures].[AFR],[Measures].[IB],[Measures].[IC All]} ON COLUMNS, NON EMPTY ( ([dim_ProductModel].[Product Model].&[DSDB]) * FILTER( ([dim_Country].[Country Name].members -[dim_Name].[Count

我有一个MDX过滤器的问题,我认为我使用正确,但我仍然得到一些我不想得到的行。 示例查询是:

SELECT {[Measures].[AFR],[Measures].[IB],[Measures].[IC All]} ON COLUMNS,
NON EMPTY ( ([dim_ProductModel].[Product Model].&[DSDB]) 
* FILTER(  ([dim_Country].[Country Name].members -[dim_Name].[Country Key].[All]),[Dim_Date].[Date Full].&[2014-01-01]*[Measures].[IB] > 0 AND NOT ISEMPTY ([Dim_Date].[Date Full].&[2014-01-01]*[Measures].[IB] )) 
* {[Dim_Date].[Date Full].&[2013-02-01]:[Dim_Date].[Date Full].&[2014-01-01]}) 
ON ROWS FROM [cub_dashboard_spares]
现在我需要的是排除那些国家!(过滤器)对于这种情况下的特定产品型号[DSDB],其中2014年1月(维度)的度量值IB大于0或不为空。现在它似乎正确地过滤掉了一些国家,但我仍然得到一些结果,上个月IB为0或上个月IB为(空)(在我们的案例中为2014年1月)

谁能帮我一下哪里有问题


非常感谢

我将把国家添加到过滤条件中,即。E使用

SELECT {[Measures].[AFR],[Measures].[IB],[Measures].[IC All]}
       ON COLUMNS,
       NON EMPTY
       [dim_ProductModel].[Product Model].&[DSDB]
       * FILTER(([dim_Country].[Country Name].members -[dim_Name].[Country Key].[All]),
                ([dim_Country].[Country Name].CurrentMember, [Dim_Date].[Date Full].&[2014-01-01], [Measures].[IB]) > 0
                AND NOT
                ISEMPTY(([dim_Country].[Country Name].CurrentMember, [Dim_Date].[Date Full].&[2014-01-01], [Measures].[IB]))
               ) 
       * {[Dim_Date].[Date Full].&[2013-02-01]:[Dim_Date].[Date Full].&[2014-01-01]}
       ON ROWS
  FROM [cub_dashboard_spares]

这是我的问题..:不明白为什么会出现AFR 0的结果:(


你好,弗兰克,很遗憾,你提出的解决方案得到的结果与我的查询结果完全相同。我不太明白,如果我告诉你,如果我通过SSAS的浏览器浏览多维数据集,我通过MDX查询获得的多余行将不可见。在SSAS中,国家成员正确地不可见。嗯,如果我删除Measure.AFR则查询正确运行。如果IB为(null)或为零,则AFR始终为零,因为它是根据IB和IC计算得出的度量值(2个其他度量值)-对于一个特定国家,度量值U IB为0,度量值IC和度量值IB为(null)。如果我从查询的SELECT部分删除measure.AFR,那么我就不会正确地返回任何行。似乎如果我涉及AFR,其计算为iif(IB>0,IC/IB,0),那么它将被迫显示所有行,而不考虑IB度量上的过滤器。@Peter备注:1)如果您对照
0
进行检查,则不必使用
NOT ISEMPTY
,请参阅。2) 测量值
AFR
0
且不为
null
可防止
非空
抑制这些行。但是,这并不能解释过滤器的行为。尽管如此,我还是建议删除
非空的
以及
和NOT ISEMPTY(…)
,以便为测试
过滤器的行为提供一个更简单的案例
@FrankPI谢谢你的评论,然而,这比我想象的还要奇怪。起初我认为非空在这里没有任何意义,但如果没有非空,我得到的(空)结果集比开始时的非空结果集更多。这可能是因为过滤器工作不完全正常。(thoug,一些结果也通过此过滤器过滤掉)是否为计算度量?也许“非空行为”设置是错误的?从AnalysisServices 2008版开始,如果tehre没有使用它的特殊原因,Microsoft建议将其保留为空。嗯,但是正如您所看到的,Measure.IB甚至没有在我的查询中使用,这会不会是一个问题?如果不直接或间接使用该度量,我不认为此设置有任何影响(可能用于计算查询中使用的其他度量值)在MDX查询返回所有行后,是否有其他选项来过滤AFR=0且日期=2014-01-01的行?就像在SQL中一样,我可以接受我的查询,将其作为派生查询,然后进行过滤。我真的可以显式地“封装”吗我的MDX查询将其作为一个内部查询,然后过滤掉这些行?因为到目前为止,我还不能一步完成。我想我现在明白了问题所在。只有在过滤的行上只包含维度时,过滤器才会起作用。如果包含任何其他交叉连接维度,那么它就不起作用。例如,在我的屏幕截图中,首先返回行(DSDB,奥地利,2014-01-10,AFR=0),因为有其他DSDB和/或2014-01-01成员的AFR不是0。如果我只包括国家,而不包括产品型号和日期,那么过滤器是正确的。嗯,所以我需要设法管理,过滤器应用于整个组,而不仅仅是一个维度。(就我而言是国家)