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

时间:2018-11-28 23:50:27

标签: ssas 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]

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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函数。

在第二个示例中,您包括级别名称,因此您将仅获得状态名称列表,而没有“全部”成员。

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

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