Dimension 元素有一個foreignKey 屬性,它是事實表的列名;而Hierarchy 元素有一個primaryKey 屬性。
若是一個層次有不止一個表,能夠使用primaryKeyTable 屬性來區分。
Level 的column 定義了它的鍵,必須是這個層次所在表的列名。若是鍵是一個表達式,能夠使用KeyExpression 元素子元素。Level、Measure 和Property 的一些屬性相應的嵌套元素:優化
Level 元素的uniqueMembers 屬性用於優化SQL 生成。spa
若是知道一個層次列的取值在整個維表中即便跨越父層次的全部取值中都是惟一的,那就把uniqueMembers 設爲true,不然設爲false。code
例如,時間維度分爲年、月層次,在月層次上要把uniqueMembers 設爲false,由於每一年都有這些月。另外一例子,若是有產品分類、產品層次,若是可以保證產品是惟一
的(別的分類不會有同名產品,或者說,一個產品不會有多個分類),那麼能夠把uniqueMembers 設爲true。若是不肯定,就設爲false。在頂層,uniqueMembers 總會是true,由於它沒有父層次。blog
4.3.2 成員「ALL」
默認狀況下,每套層次都包含一個頂級層次叫作「(All)」,它只包含單個叫「(All {層次名})」的成員。這個成員是這套層次中全部其餘成員的父成員,所以表示一個累計值。它也是這套層次的缺省成員,意思是,若是這套層次沒有出如今軸上或分片上,那就採用它來進行計算。產品
allMemberName 和AlevelName 屬性覆蓋了「All」成員和「All」層次的缺省名稱(即「(All{層次名})」和「(All)」)。
若是Hierarchy 元素有hasAll=」false」,「All」層次會被禁止。如今這一維度的缺省成員會變
成第一個級別的第一個成員。例如,在時間維度層次,會變成第一個年份。修改缺省成員會帶來混淆,所以通常都應該使用hasAll=」true」。Hierarchy 元素一樣有一個defaultMember 屬性,用以覆蓋層次的缺省成員。如下把時間維度的缺省成員設爲1997 年的第一個季度:io
<Dimension name="Time" type="TimeDimension" foreignKey="time_id"> <Hierarchy hasAll="false" primaryKey="time_id" defaultMember="[Time].[1997].[Q1] "/> ...
4.3.3 多層次體系
一個維度能夠由多個層次組成:class
<Dimension name="Time" foreignKey="time_id"> <Hierarchy hasAll="false" primaryKey="time_id"> <Table name="time_by_day"/> <Level name="Year" column="the_year" type="Numeric" uniqueMembers="true"/> <Level name="Quarter" column="quarter" uniqueMembers="false"/> <Level name="Month" column="month_of_year" type="Numeric" uniqueMembers="false"/> </Hierarchy> <Hierarchy name="Time Weekly" hasAll="false" primaryKey="time_id"> <Table name="time_by_week"/> <Level name="Year" column="the_year" type="Numeric" uniqueMembers="true"/> <Level name="Week" column="week" uniqueMembers="false"/> <Level name="Day" column="day_of_week" type="String" uniqueMembers="false"/> </Hierarchy> </Dimension>
注意第一個層次沒有名字。默認第一個層次的名字跟維度的同樣,所以第一個層次就叫」Time」。
除了它們都鏈接事實表的同一列」time_id」之外,這些維度層次沒有多少共同的地方,它們甚至沒有使用同一個表。
把兩個層次放到一個維度中的主要緣由是,這對終端用戶來講有更多意義。終端用戶知道若是把」Time」層次放到一個軸上而把」Time Weekly」放到另外一個軸上是沒有意義的。若是兩個層次是同一個維度,MDX 不會容許它們用於同一個查詢中。終端