默认情况下,属性通常具有自己的属性层次结构。不是用户层次结构。只是为了确保我对术语清楚:
属性层次结构:
[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]
我了解用户层次结构,但从未真正弄清楚这些默认属性层次结构的功能区别是什么。
答案 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查询中使用&
而不是$
,但是我认为这是一个错字。