MDX过滤器问题
问题描述:
我对整个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或其他方法解决这个问题很简单,但我宁愿解决它“正确”。
我相当确定我只是误解了一些小小的细节,但我厌倦了把我的头撞向桌子。
谢谢!
答
我通常使用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]
)