7

我需要一个按日期过滤的蒙德里安 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]
4

3 回答 3

1

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

您可能会变得棘手并将该表实现为存储过程,但日期维度在总体方案中不会占用大量空间,因此您几乎不会这样做。

我不知道有什么其他方法可以解决你的问题。

于 2013-01-14T01:17:32.973 回答
0

尝试消除 NON EMPTY

于 2013-01-15T16:23:04.597 回答
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(Exists MDX 函数来实现。

于 2016-04-12T14:34:38.320 回答