我对整个 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]
)
我正在尝试按财政年度的一周提取特定销售 channel 的毛单位(有些列略有混淆)。所有这些过滤器都已到位,因为我经常需要在 SKU 级别分解这些过滤器,而且在我的机器上处理截断的数据集更简单(我说让数据库来完成工作!)。
问题是,此查询在 FOS channel 中返回 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 channel 中出现了销售情况。这让我大吃一惊;以前,我假设我正在过滤以只接收显示销售的行,但我没有得到。现在我展示了所有内容,并且有销售行。使用 Perl 或其他工具解决这个问题很容易,但我宁愿“正确”解决它。
我很确定我只是误解了一些琐碎的细节,但我已经厌倦了用头撞 table 。
谢谢!
最佳答案
我通常使用 Microsoft Analysis Services,但 MDX 通常与 Essbase 中使用的非常相似。
轴将被独立评估,因此 Group 上的过滤器语句将仅查看 where 子句中的成员。那么,您的 Gross Units 是否有可能有一些负值并且小于或等于 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]
)
关于filter - MDX 过滤器问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/266455/