MDX where 子句与 From 子句

MDX where clause vs From clause

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

我有一个日期维度,其年份属性由以下成员组成: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 年创建的。但是子多维数据集不会限制您的查询访问整个维度列表。在主查询开始执行时的第二个查询中,查询 space\or dimensional space 表示所有维度的默认成员。因此,在您看来 "existing" 关键字将不起作用。但是,在您的第一个查询中,查询 space \or dimensional space 在 space 年表示 2018 年和 2019 年。为了更好地理解,请尝试以下查询。

此查询将 return 与第二个查询相同的字符串。 和 成员 [措施].[MembersInFromClause] AS SETTOSTR(EXISTING([Dim Date].[Calendar].[Year].members))

select [Measures].[MembersInFromClause],[Measures].[SomeMeasureInCube] on 0
FROM 
(
    SELECT (
    {[Dim Date].[Calendar].[Year].&[2018]
    ,[Dim Date].[Calendar].[Year].&[2019]}
    ) ON 0  
    FROM [ODGG2Vente]
)

然而,此查询将 return 过滤字符串。

with
Member [Measures].[MembersInWhereClause] AS
SETTOSTR(EXISTING([Date].[Calendar].[Calendar Year].members))
Member [Measures].[MembersInWhereClause2] AS
SETTOSTR(([Date].[Calendar].[Calendar Year].members))
select {[Measures].[SomeMeasureInCube],
Measures.[MembersInWhereClause],Measures.[MembersInWhereClause2]}  on 0
,[Dim Date].[Calendar].[Year].members on 1 
FROM 
(
  SELECT (
  {[Dim Date].[Calendar].[Year].&[2018]
  ,[Dim Date].[Calendar].[Year].&[2019]}
  ) ON 0  
  FROM [ODGG2Vente]
)

我的第二个查询,行轴上的日期强制查询在多维数据集中执行 space。但是请注意,由于缺少现有

,我的第三维仍然能够绕过上下文

最后,我找到了使用命名集的解决方案。有用 !它可以读取我的子多维数据集的上下文

dynamic set [FirstMemberInASet] as
EXISTS([Dim Date].[Calendar].[Month],EXISTING([Dim Date].[Calendar]. 
[Date].members)).item(0)
Member [Measures].[FirstMember] as
SETTOSTR([FirstMemberSet])

我用子立方体得到这个结果:

{[Dim Date].[Calendar].[Month].&[1]&[2018]}

但问题是我需要一个成员,因为我必须使用 parallelperiod。

是否可以转换包含单个值的集合 {[昏暗的日期].[日历].[月份].&[2018]}

致这样的会员:

[Dim Date].[Calendar].[Month].&[1]&[2018] ?

谢谢你的帮助