【问题标题】:How can I write an mdx query that slices by both a date range and dimension member value如何编写按日期范围和维度成员值进行切片的 mdx 查询
【发布时间】:2013-06-26 02:50:09
【问题描述】:

我需要编写一个 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]})

但蒙德里安回答:没有函数与签名 (, ) 匹配。

请注意,蒙德里安不支持子查询,否则我会这样做。

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

【问题讨论】:

    标签: mdx mondrian


    【解决方案1】:

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

    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 切片器的元组。我认为这是正确的答案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-03
      • 1970-01-01
      • 1970-01-01
      • 2012-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多