用 MDX 查询的日期范围子句中的现有成员替换不存在的成员

Posted

技术标签:

【中文标题】用 MDX 查询的日期范围子句中的现有成员替换不存在的成员【英文标题】:Substituting non-existent member with existing one in date range clause of MDX query 【发布时间】:2012-01-19 14:06:01 【问题描述】:

我有一个从 SSAS 2005 多维数据集检索数据的 MDX 查询:

SELECT NON EMPTY  [Measures].[Record Count]  ON COLUMNS
FROM [Cube]
WHERE  [Dimension].[Date].[Day].&[2012]&[1]&[1]:[Dimension].[Date].[Day].&[2012]&[1]&[10] 

这通常运作良好。但是,当 2012 年 1 月 1 日没有记录时,似乎会替换为 NULL 值,并且查询会忽略该日期范围开始参数。

如何检查该维度成员是否存在,如果不存在,则在该范围子句中使用另一个日期 (2012-01-02)?

【问题讨论】:

【参考方案1】:

看起来是这样的:

SELECT NON EMPTY  [Measures].[Record Count]  ON COLUMNS
FROM [Cube]
WHERE  IIF([Dimension].[Date].[Day].&[2012]&[1]&[1] IS NULL, [Dimension].[Date].[Day].&[2012]&[1]&[2], [Dimension].[Date].[Day].&[2012]&[1]&[1]):[Dimension].[Date].[Day].&[2012]&[1]&[10] 

【讨论】:

【参考方案2】:

子多维数据集查询是否有同样的问题?

SELECT NON EMPTY  [Measures].[Record Count]  ON COLUMNS
FROM 
(SELECT [Dimension].[Date].[Day].&[2012]&[1]&[1]:[Dimension].[Date].[Day].&[2012]&[1]&[10]
ON COLUMNS FROM [Cube])

【讨论】:

是的,它看起来遇到了同样的问题。单独执行该子多维数据集查询似乎也突出了同样的问题 - 因为在 2012-01-01 上没有记录,所以查询用 NULL 替换该成员,这导致它忽略日期范围开始子句并返回所有存在的记录在立方体中直到 2012-01-10。

以上是关于用 MDX 查询的日期范围子句中的现有成员替换不存在的成员的主要内容,如果未能解决你的问题,请参考以下文章

具有两个或多个日期范围的 MDX 查询

MDX 查询以对具有特定日期范围的日期维度进行分组

SSAS MDX WHERE 子句语法 - 从同一层次结构中过滤多个值

使用 MDX 查询从日期范围中获取特定日期的时间表

在日期范围之间使用 TOPCOUNT 的 MDX 查询返回带有一些空值的顶部

WHERE 子句中的 MDX 除外函数