代码之家  ›  专栏  ›  技术社区  ›  kyle

MDX过滤器问题

  •  3
  • kyle  · 技术社区  · 16 年前

    我对MDX这件事还很陌生,但下面的内容让我抓狂。A. 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 回复  |  直到 16 年前
        1
  •  2
  •   Darren Gosbell    16 年前

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

    如果只是查找非空单元格,一个可能的解决方法是在轴上使用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]
        )