如何编写按日期范围和维度成员值切片的mdx查询

时间:2013-06-26 02:50:09

标签: mdx mondrian

我需要编写一个mdx查询,该查询通过维度的值限制其结果,但也按日期范围限制。我知道如何做其中一个但我无法弄清楚如何同时做两件事。

适用于日期范围:

SELECT {[Measures].[Hours]} ON COLUMNS, [Time Type].[Type].Members ON ROWS 
FROM [cube]
WHERE {[Date].[Date ISO].[2013-01-26]:[Date].[Date ISO].[2013-06-25]}

这适用于成员切片器:

SELECT {[Measures].[Hours]} ON COLUMNS, [Time Type].[Type].Members ON ROWS 
FROM [cube]
WHERE [Time Type].[Allocation Type].[Direct]

如何同时通过这两个WHERE子句值约束结果?我已经尝试将它们放在同一个WHERE中,如下所示:

SELECT {[Measures].[Hours]} ON COLUMNS, [Time Type].[Type].Members ON ROWS 
FROM [cube]
WHERE ([Time Type].[Allocation Type].[Direct],
    {[Date].[Date ISO].[2013-01-26]:[Date].[Date ISO].[2013-06-25]})

但是Mondrian回复:没有函数匹配签名(,)。

请注意,Mondrian不支持子查询,或者我会这样做。

我想我可能需要在我的行上使用过滤器函数作为我的成员约束,但我需要过滤一些我不想显示的内容,我不知道该怎么做。

1 个答案:

答案 0 :(得分:0)

我认为交叉连接是这样的答案:

SELECT {[Measures].[Hours]} ON COLUMNS, [Time Type].[Type].Members ON ROWS 
FROM [cube]
WHERE CROSSJOIN([Time Type].[Allocation Type].[Direct],
    {[Date].[Date ISO].[2013-01-26]:[Date].[Date ISO].[2013-06-25]})

CROSSJOIN创建“直接”成员和我范围内日期的所有组合作为我的WHERE切片器的元组。我认为这是正确的答案。