如何编写按日期范围和维度成员值进行切片的 mdx 查询
Posted
技术标签:
【中文标题】如何编写按日期范围和维度成员值进行切片的 mdx 查询【英文标题】:How can I write an mdx query that slices by both a date range and dimension member value 【发布时间】: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])
但蒙德里安回答:没有函数与签名 (, ) 匹配。
请注意,蒙德里安不支持子查询,否则我会这样做。
我想我可能需要在我的行上使用过滤器函数来实现我的成员约束,但我需要过滤一些我不想显示的内容,我不知道该怎么做。
【问题讨论】:
【参考方案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 切片器的元组。我认为这是正确的答案。
【讨论】:
以上是关于如何编写按日期范围和维度成员值进行切片的 mdx 查询的主要内容,如果未能解决你的问题,请参考以下文章
OLAP SSAS MDX 如何获取先前选定/可见日期的度量值