属性和默认属性层次结构之间的区别?

Difference between attribute and default attribute hierarchy?

默认情况下,属性通常有自己的属性层次结构。不是用户层次结构。只是为了确保我的术语清楚:

属性层次结构:

[Dim City].[State Name]

属性:

[Dim City].[State Name].[State Name]

属性成员:

[Dim City].[State Name].[State Name].&[Kansas]

从编写 MDX 查询的角度来看,大多数情况下,在交叉联接中使用其中任何一种都可以获得所需的结果。有时,当我执行更复杂的查询时,我会遇到在交叉连接中使用 [Dim State].[State Name] 会给我不相关的值组合的情况。

  [Dim City].[State Name]
* [Dim City.[City Name]

通常使用一个或另一个会产生相同的结果,有时则不同。在更复杂的查询中 有时 我会得到不相关成员的组合,例如(堪萨斯州亚特兰大),然后我将其更改为以下并且它可以正常工作:

  [Dim City].[State Name].[State Name]
* [Dim City.[City Name].[City Name]

我的主要问题是不弄清楚为什么这些特定查询可能无法正常工作,但实际上使用 on 或另一个之间有什么区别。

好像都产生了一组相同的成员。

两者似乎都有个人直接成员:

[Dim City].[State Name].[State Name].&[Kansas]

[Dim City].[State Name].&[Kansas]

我了解用户层次结构,但从未真正弄清楚这些默认属性层次结构的功能差异是什么。

通常,每个属性层次结构都存在两个级别:包含 'All' 成员的顶层和包含属性元素的底层。

MDX表达式中维度各部分的整体结构如下:

[Dimension name].[Hierarchy name].[Hierarchy level name].[Member Name]
[Dimension name].[Hierarchy name].[Hierarchy level name].&[Member Key]

你的第一个例子

  [Dim City].[State Name]
* [Dim City.[City Name]

的快捷方式
  [Dim City].[State Name].Members
* [Dim City.[City Name].Members

因此,[Dim City].[State Name].Members 将解析为 {[Dim City].[State Name].[All], [Dim City].[State Name].[Alabama], [Dim City].[State Name].[Alaska], [Dim City].[State Name].[Arizona], ...},因为您在层次结构而不是级别上调用 Members 函数。

在您的第二个示例中,您包含了级别名称,因此您将仅获得没有 'All' 成员的州名称列表。

如果您在某些查询中得到无效的州名和城市名组合,您应该检查您的属性关系。城市名称属性应指向州名称属性,但只有在属性的键值遵循此关系时才应这样做。例如。如果您在多个州拥有同名城市,则每个城市都需要自己的密钥。

顺便说一句:您应该在 MDX 查询中使用 & 而不是 $,但我认为这是一个错字。