MDX where子句vs From子句

问题描述 投票:0回答:1

我不明白为什么下面这两个代码之间不能得到相同的结果:

我有一个日期维度,其年份属性由成员组成: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子句中指定的成员...

感谢您的帮助

sql-server ssas mdx olap-cube
1个回答
0
投票

这是因为在您的第二个查询中,主查询已超出子查询的上下文。在MDX中,当您提供子查询时,它为ypur主查询定义了一个子多维数据集进行操作。因此,在第二个查询中,子多维数据集是在2018年和2019年制作的。但是,子多维数据集并不限制您的查询访问整个维度列表。在第二个查询中,当开始执行主要查询时,查询空间\或维度空间会显示所有维度的默认成员。因此,按照您的判断,“现有”关键字将无效。但是,在您的第一个查询中,查询空间\或维空间表示年份空间中的2018和2019。为了更好地理解,请尝试以下查询。

© www.soinside.com 2019 - 2024. All rights reserved.