缺少边界日期的MDX日期范围查询

时间:2013-01-10 23:21:27

标签: mdx data-warehouse olap pentaho mondrian

我需要按日期过滤蒙德里安的MDX查询,其中一个或两个边界日期可能不存在。我使用下面的查询只要存在2013-01-01和2013-01-08维度就可以使用。如果两个日期中的一个不存在,则它不返回任何结果,即使两者之间的维度确实存在。即使在缺少边界日期维度的情况下,如何才能使此查询正常工作?

SELECT
NON EMPTY {Hierarchize({[Measures].[Number of Something]})} ON COLUMNS,
NON EMPTY {[Date].[2013-01-01]:[Date].[2013-01-08]} ON ROWS
FROM [Users]

3 个答案:

答案 0 :(得分:1)

MDX的构建假设您所引用的每个成员都存在;最好通过预先计算具有这些值的单独表来确保所有可想到的日期维度成员

你可能会变得棘手并将该表实现为存储过程,但是日期维度在宏观方案中不会占用太多空间,所以你几乎不会这样做。

我不知道有任何其他方法可以解决您的问题。

答案 1 :(得分:0)

尝试消除NON EMPTY

答案 2 :(得分:0)

即使我还没有理解实现这个逻辑的原因,你可以通过添加来隐藏它。如果您在Mondrian中添加自定义成员,请尝试使用它。

    /* Exclude Missing Member */
Create Set CurrentCube.[MissingMemberSet] As
iif(IsError(StrToMember("[Dimension].[Hierarchy].&[MEMBER]")),
{}, {[Dimension].[Hierarchy].&[MEMBER]});

Create Member CurrentCube.Measures.[Calculation on Missing Member]
AS
IIF ([MissingMemberSet].Count > 0,
([Dimension].[Hierarchy].&[MEMBER],Measures.[X Measure]),
0
)
,
FORMAT_STRING = "Currency",
LANGUAGE = 1033,
NON_EMPTY_BEHAVIOR = { [X Measure] },
VISIBLE = 1 ,  DISPLAY_FOLDER = 'Display Folder'  ;

您也可以使用IIF(IsError或IIF(存在MDX功能)来实现。