MDX 语法:Period.Financial Year.Financial 年和 Period.Financial Year.Children 之间的区别?
MDX syntax: Difference between Period.Financial Year.Financial Year and Period.Financial Year.Children?
我们有一个名为 Revenue 的多维数据集。
SELECT
{[Measures].[Billable Hours]} on columns,
[Period].[Financial Year].**[Financial Year]** on rows
FROM [REVENUE];
SELECT
{[Measures].[Billable Hours]} on columns,
[Period].[Financial Year].**Children** on rows
FROM [REVENUE];
有一个维度 "Period",我猜属性层次结构是 Financial Year?如果我想要像 2012、2013、2014 这样的行,我必须说 [Period].[Financial Year].Children 或 [Period].[Financial Year].[财政年度]。要获得 [Period].[Financial Year].[Financial Year],在 SSMS
中,我打开了那个属性层次结构,将小点拖到 Members 下的 Financial Year,这就是它给我的内容。
两种方式都得到相同的结果。所以只是想知道,
是.Children更受欢迎,还是只是偏好?
此外,如果要 "diagram" [期间].[财政年度].[财政年度],会不会是 "Dimension.Level.Member"? [财政年度]/Children 也是成员,或者 "whole thing" 和
的图表如何
- 我应该怎么称呼这整件事?
不确定 "diagram" 是什么意思。
我认为你们两个专栏表达都是捷径。
这个
[Period].[Financial Year].[Financial Year]
是这个的缩写
[Period].[Financial Year].[Financial Year].MEMBERS
还有这个:
[Period].[Financial Year].CHILDREN
简称:
[Period].[Financial Year].[All].CHILDREN
(倒带一点)
所有属性层次结构都有两个级别 - 全部级别和叶级别。 all 级别只有一个成员 [All],而后者又有成员 - 叶子。还有叶子层,由叶子组成。
看来您已经进入了层次结构的这两个不同级别 [Financial Year]
。
你应该使用哪个?有时我不相信这很重要。在更复杂的场景中,您使用的可能会对性能产生影响。
有时您可能想获取所有成员和树叶 - 然后您可以执行如下操作:
SELECT
{[Measures].[Billable Hours]} on columns,
[Period].[Financial Year].MEMBERS on rows
FROM [REVENUE];
这应该return一个包含所有成员的集合?
Q2
这个[Period].[Financial Year].[Financial Year]
是Dimension.Hierarchy.Level
。层次结构的所有成员在此级别不可访问。
重复 Greg Galloway 的评论:
[Period].[Financial Year].CHILDREN
assumes the All
member is the
default member and the current member in the context and won't work as
intended in all contexts.
Preferable to use [Period].[Financial Year].[All].CHILDREN
or
[Period].[Financial Year].[Financial Year].MEMBERS
约翰,我以前也遇到过类似情况,并在上面发了一个question on SO。
重点在于,它不仅仅是一个捷径,而是一个冒险实践写 [Dim].[Attribute].CHILDREN
,因为 [All]
成员,另一个答案谈论的是 scoped 成员 而它 不能 总是假设你实际上写的是 [Dim].[Attribute].[All].CHILDREN
,除非你写了额外的 [All]
。最好避免它。
此外,[Period].[Financial Year].[Financial Year]
不是 真正推荐的调用成员的方法。
这个故事的寓意是我们绝对应该尽量不上当 "shortcuts"。
编辑:为什么必须明确说明!
之所以.MEMBERS
是"suggested"方式是因为SSAS引擎在你使用.MEMBERS
函数时会做额外的检查。
如果新手 MDX 编码器不小心使用了不存在的层次结构名称(打字错误..使用 Calendar1
而不是 Calendar
,引擎出人意料地没有抛出任何错误。(请原谅我的白色以下图片下方的空白)
但如果使用 .MEMBERS
,则会发生额外的检查层,从而给出清晰明确的错误消息:
显然,这里的引擎是罪魁祸首,这可能是一个错误。但是,我们必须尽自己的一份力量来使用手头的工具。
以类似的方式,10 次中有 9 次 Dim.Hier.CHILDREN
语法会起作用,但事实是,它具有误导性。新手可能会查看代码并假设层次结构可以有 children。而事实是只有会员才能拥有children。
有点离题,但在 SQL 中也是如此,在语句末尾使用分号是标准的 ANSI
语法,但很少有人真正使用该语法。当某些操作符没有使用分号时,引擎反过来会通过抛出错误来惩罚我们,比如当我们使用 CTE 时。那么我们应该养成使用更多分号的习惯吗? 见鬼! 这真的是一条捷径吗? 没有!
我们有一个名为 Revenue 的多维数据集。
SELECT
{[Measures].[Billable Hours]} on columns,
[Period].[Financial Year].**[Financial Year]** on rows
FROM [REVENUE];
SELECT
{[Measures].[Billable Hours]} on columns,
[Period].[Financial Year].**Children** on rows
FROM [REVENUE];
有一个维度 "Period",我猜属性层次结构是 Financial Year?如果我想要像 2012、2013、2014 这样的行,我必须说 [Period].[Financial Year].Children 或 [Period].[Financial Year].[财政年度]。要获得 [Period].[Financial Year].[Financial Year],在 SSMS
中,我打开了那个属性层次结构,将小点拖到 Members 下的 Financial Year,这就是它给我的内容。
两种方式都得到相同的结果。所以只是想知道,
是.Children更受欢迎,还是只是偏好?
此外,如果要 "diagram" [期间].[财政年度].[财政年度],会不会是 "Dimension.Level.Member"? [财政年度]/Children 也是成员,或者 "whole thing" 和
的图表如何
- 我应该怎么称呼这整件事?
不确定 "diagram" 是什么意思。
我认为你们两个专栏表达都是捷径。
这个
[Period].[Financial Year].[Financial Year]
是这个的缩写
[Period].[Financial Year].[Financial Year].MEMBERS
还有这个:
[Period].[Financial Year].CHILDREN
简称:
[Period].[Financial Year].[All].CHILDREN
(倒带一点)
所有属性层次结构都有两个级别 - 全部级别和叶级别。 all 级别只有一个成员 [All],而后者又有成员 - 叶子。还有叶子层,由叶子组成。
看来您已经进入了层次结构的这两个不同级别 [Financial Year]
。
你应该使用哪个?有时我不相信这很重要。在更复杂的场景中,您使用的可能会对性能产生影响。
有时您可能想获取所有成员和树叶 - 然后您可以执行如下操作:
SELECT
{[Measures].[Billable Hours]} on columns,
[Period].[Financial Year].MEMBERS on rows
FROM [REVENUE];
这应该return一个包含所有成员的集合?
Q2
这个[Period].[Financial Year].[Financial Year]
是Dimension.Hierarchy.Level
。层次结构的所有成员在此级别不可访问。
重复 Greg Galloway 的评论:
[Period].[Financial Year].CHILDREN
assumes theAll
member is the default member and the current member in the context and won't work as intended in all contexts.Preferable to use
[Period].[Financial Year].[All].CHILDREN
or[Period].[Financial Year].[Financial Year].MEMBERS
约翰,我以前也遇到过类似情况,并在上面发了一个question on SO。
重点在于,它不仅仅是一个捷径,而是一个冒险实践写 [Dim].[Attribute].CHILDREN
,因为 [All]
成员,另一个答案谈论的是 scoped 成员 而它 不能 总是假设你实际上写的是 [Dim].[Attribute].[All].CHILDREN
,除非你写了额外的 [All]
。最好避免它。
此外,[Period].[Financial Year].[Financial Year]
不是 真正推荐的调用成员的方法。
这个故事的寓意是我们绝对应该尽量不上当 "shortcuts"。
编辑:为什么必须明确说明!
之所以.MEMBERS
是"suggested"方式是因为SSAS引擎在你使用.MEMBERS
函数时会做额外的检查。
如果新手 MDX 编码器不小心使用了不存在的层次结构名称(打字错误..使用 Calendar1
而不是 Calendar
,引擎出人意料地没有抛出任何错误。(请原谅我的白色以下图片下方的空白)
但如果使用 .MEMBERS
,则会发生额外的检查层,从而给出清晰明确的错误消息:
显然,这里的引擎是罪魁祸首,这可能是一个错误。但是,我们必须尽自己的一份力量来使用手头的工具。
以类似的方式,10 次中有 9 次 Dim.Hier.CHILDREN
语法会起作用,但事实是,它具有误导性。新手可能会查看代码并假设层次结构可以有 children。而事实是只有会员才能拥有children。
有点离题,但在 SQL 中也是如此,在语句末尾使用分号是标准的 ANSI
语法,但很少有人真正使用该语法。当某些操作符没有使用分号时,引擎反过来会通过抛出错误来惩罚我们,比如当我们使用 CTE 时。那么我们应该养成使用更多分号的习惯吗? 见鬼! 这真的是一条捷径吗? 没有!