MDX过滤问题

时间:2008-11-05 20:10:05

标签: filter mdx hyperion essbase

我对整个MDX的事情都很陌生,但以下只是让我感到沮丧。我正在使用的FILTER语句表现得很奇怪。代码示例,后跟说明:

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级别实现这些过滤器,并且在我的机器上处理截断的数据集更简单(让DB执行工作,我说!)。

问题是,此查询在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或其他方法解决这个问题很容易,但我宁愿“正确”解决它。

我有理由相信我只是误解了一些琐碎的细节,但我已经厌倦了把头撞在桌子上。

谢谢!

1 个答案:

答案 0 :(得分:2)

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

将独立评估轴,因此Group上的filter语句将仅查看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]
    )