以下哪种 MDX 语法最 'correct'?

Which of the following MDX syntax is most 'correct'?

在以下方法中,引用成员的首选方法是什么?

-- dimension.hierarchy.level.member
[Team].[Name].[All].[Detroit Lions],
[Team].[Name].[Name].[Detroit Lions], -- how does 'name' get auto-added as a level?
[Team].[Name].[Detroit Lions],
[Team].[Detroit Lions],
[Detroit Lions],

它们在 SELECT 子句中对我产生相同的结果。此外,为什么可以在第二个语句中直接从 Name(属性)到 Detroit Lions(成员)到 'jump' - 隐式添加解析为:

[Name].[Detroit Lions] ==> [Name].[All].[Detroit Lions]

或者 'work' 究竟如何?

我假设您在这里使用的是用户层次结构。基于此,这里是答案。 最好的推荐方式是使用强名称,例如
“[团队].[姓名].[姓名].&[底特律雄狮队]”。 (您需要检查个人成员的确切强名)。为什么这是最好的方法,因为 MDX 无需进行任何查找即可找到该成员。

如果您不使用强名称,“[Team].[Name].[Name].[Detroit Lions]”也很有效。

现在为什么要做剩下的工作。它们之所以有效,是因为 MDX 将遍历您的所有维度来找到该成员。在这个成员第一次出现时,它会被选中,如果你想引用第二次出现的“底特律雄狮”,你就有麻烦了。 现在其他条款是什么意思。

  1. “[底特律雄狮队]”你正在经历所有维度
  2. “[Team].[Detroit Lions]”您正在遍历 TEAM 维度中的所有成员
  3. [Team].[Name].[Detroit Lions]”您正在遍历维度 TEAM 的所有成员,层次结构 NAME
  4. "[Team].[Name].[Name].[Detroit Lions]", 您正在浏览维度团队的所有成员,层级名称,级别名称。
  5. "[球队].[姓名].[全部].[底特律雄狮]"这与 3
  6. 相同