2008-11-05 114 views
3

我对整个MDX的东西很陌生,但以下只是驱使我batty。我使用的FILTER声明奇怪地表现了......。代码示例,接着描述:MDX过滤器问题

SELECT 
    { 
     FILTER(
      MEMBERS([Time].[5-4-4 Week Year]), 
      [Measures].[Ship Gross Units] > 0 
     ) 
    } 
    ON COLUMNS, 
    { 
     FILTER(
      MEMBERS([Group].[Alternate Hierarchies]), 
      [Measures].[Ship Gross Units] > 0 
     ) 
    } 
    ON ROWS 
FROM SBD.SBD 
WHERE 
    (
     [FiscalYear].[FY09], 
     [Scenario].[Actuals Total], 
     [Measures].[Ship Gross Units], 
     [Channel].[FOS] 
    ) 

我想拉总台特定销售渠道,通过本财年的一周(某些列稍微模糊)。所有这些过滤器都适用,因为我经常需要在SKU级别分解这些过滤器,并且在我的机器上处理截断的数据集更简单(让我们说数据库完成工作)。

问题是,此查询在FOS通道中返回0销售量。这似乎很奇怪,所以我删除了行筛选器:

SELECT 
    { 
     FILTER(
      MEMBERS([Time].[5-4-4 Week Year]), 
      [Measures].[Ship Gross Units] > 0 
     ) 
    } 
    ON COLUMNS, 
    MEMBERS([Group].[Alternate Hierarchies]) 
    ON ROWS 
FROM SBD.SBD 
WHERE 
    (
     [FiscalYear].[FY09], 
     [Scenario].[Actuals Total], 
     [Measures].[Ship Gross Units], 
     [Channel].[FOS] 
    ) 

突然之间,销售额突然出现在FOS渠道中。这打击了我的思想;以前,我认为我过滤只是接收显示销售的行,而我没有。现在我正在展示一切,并且有销售行。用Perl或其他方法解决这个问题很简单,但我宁愿解决它“正确”。

我相当确定我只是误解了一些小小的细节,但我厌倦了把我的头撞向桌子。

谢谢!

回答

2

我通常使用Microsoft Analysis Services,但MDX通常非常类似于Essbase中使用的MDX。

该轴将独立进行评估,因此组上的过滤器语句将仅查看where子句中的成员。那么09年有可能您的总单位有一些负值并且小于或等于0?或者你的单元数量是否足够大,以至于它们可能会溢出数据类型并包装到负数?

如果您只是寻找非空单元,可能的解决方法之一是在轴上使用NON EMPTY关键字。 例如。

SELECT  
    NON EMPTY MEMBERS([Time].[5-4-4 Week Year]), 
    ON COLUMNS, 
    NON EMPTY MEMBERS([Group].[Alternate Hierarchies]) 
    ON ROWS 
FROM SBD.SBD 
WHERE 
    (
     [FiscalYear].[FY09], 
     [Scenario].[Actuals Total], 
     [Measures].[Ship Gross Units], 
     [Channel].[FOS] 
    )