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

Ssas 属性和默认属性层次结构之间的区别?,ssas,mdx,Ssas,Mdx,默认情况下,属性通常有自己的属性层次结构。不是用户层次结构。只是为了确保我清楚我的术语: 属性层次结构: [Dim City].[State Name] 属性: [Dim City].[State Name].[State Name] 属性成员: [Dim City].[State Name].[State Name].&[Kansas] 从编写MDX查询的角度来看,大多数情况下,在交叉连接中使用这两种方法都会得到所需的结果。有时候,当我在执行更复杂的查询时,我会遇到这样的情况:在交叉连接中使用

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

属性层次结构:

[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]
我的主要问题不是弄清楚为什么这些特定的查询可能无法正常工作,而是弄清楚在上使用与在下使用有什么区别

似乎两者都产生了一组相同的成员

两者似乎都有各自的直接成员:

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

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


我了解用户层次结构,但从未真正了解这些默认属性层次结构的功能区别。

通常,每个属性层次结构都有两个级别:包含“全部”成员的顶层和包含属性元素的底层

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].[code>成员将解析为
{[Dim City].[State Name].[All],[Dim City].[State Name].[Alabama],[Dim City].[State Name].[Arizona],…}
,因为您在层次结构而不是层次结构上调用成员函数

在第二个示例中,您包括级别名称,因此您将只获得状态名称列表,而不包含“All”成员

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

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