我不明白为什么下面这两个代码之间不能得到相同的结果:
我有一个日期维度,其年份属性由成员组成:2016、2017、2018和2019
代码1:
with
Member [Measures].[MembersInWhereClause] AS
SETTOSTR(EXISTING([Dim Date].[Calendar].[Year].members))
select [Measures].[MembersInWhereClause] on 0
from [ODGG2Vente]
WHERE ([Dim Date].[Calendar].[Year].&[2018]:[Dim Date].[Calendar].[Year].&[2019])
我得到的结果是:“ 2018和2019”。它很好用!
代码2
with
Member [Measures].[MembersInFromClause] AS
SETTOSTR(EXISTING([Dim Date].[Calendar].[Year].members))
select [Measures].[MembersInFromClause] on 0
FROM
(
SELECT (
{[Dim Date].[Calendar].[Year].&[2018]
,[Dim Date].[Calendar].[Year].&[2019]}
) ON 0
FROM [ODGG2Vente]
)
因此,我得到这个集合:“ 2016,2017,2018,2019” ???我希望只获取from子句中指定的成员...
感谢您的帮助
这是因为在您的第二个查询中,主查询已超出子查询的上下文。在MDX中,当您提供子查询时,它为ypur主查询定义了一个子多维数据集进行操作。因此,在第二个查询中,子多维数据集是在2018年和2019年制作的。但是,子多维数据集并不限制您的查询访问整个维度列表。在第二个查询中,当开始执行主要查询时,查询空间\或维度空间会显示所有维度的默认成员。因此,按照您的判断,“现有”关键字将无效。但是,在您的第一个查询中,查询空间\或维空间表示年份空间中的2018和2019。为了更好地理解,请尝试以下查询。