2014-03-07 60 views
0

我有一个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].[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月为(null))。

可以请任何人帮助我,哪里可以解决问题?

非常感谢你

回答

0

这是我的问题..:不明白为什么与AFR 0的结果显示:(

i don't get it..

+0

是否是[[Measures]。[IB]]是一个计算的度量?也许“非空行为”设置是错误的?从2008年的Analysis Services版本开始,Microsoft建议如果没有特殊原因使用它,请将其保留为空。 – FrankPl

+0

嗯,但正如你所看到的,我的查询中甚至没有使用Measure.IB,但它可能是一个问题吗? – Peter

+0

如果不直接或间接使用该度量(因为它可能用于计算查询中使用的另一个度量),我不认为该设置会有任何影响包含在查询中。 – FrankPl

1

我会添加国家的过滤条件,我。即使用

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] 
+0

喜弗兰克,不幸的是你提出的解决方案,我得到完全相同的结果与我的查询。我真的不明白它,也许它可以帮助你,如果我告诉你,我通过MDX查询获得多余的行是不可见的,如果我通过SSAS的浏览器浏览多维数据集在SSAS国家成员正确不可见 – Peter

+0

如果我删除了Measure.AFR,那么查询运行正确。如果IB为(null)或零,AFR始终为零因为它是来自IB和IC的计算量度(2个其他度量) - 对于某个特定国家/地区,度量IB是0并且度量IC和度量IB是(null)。如果我从查询的SELECT部分​​删除measure.AFR,那么我正确地没有得到任何行。似乎如果我涉及的AFR计算为iif(IB> 0,IC/IB,0),则无论IB度量上的过滤器如何,它都被强制显示所有行。 – Peter

+0

@Peter两条评论:1)如果您检查“0”,则不需要“NOT ISEMPTY”,请参阅http://sqlblog.com/blogs/mosha/archive/2005/06/30/how-to-check-如果-细胞是空的,在-mdx.aspx。 2)测量'AFR'为'0'而不是'null'可以防止'NON EMPTY'压制这些行。但是,这并不能解释'Filter'的行为。不过,我建议删除'NON EMPTY'以及'AND NOT ISEMPTY(...)'来为测试'Filter'的行为提供一个简单的例子。 – FrankPl