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] ?
谢谢你的帮助
我不明白为什么我在下面这两个代码之间没有得到相同的结果:
我有一个日期维度,其年份属性由以下成员组成: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] ?
谢谢你的帮助