SQL Server 2008 MDX應(yīng)用之組裝有序集合
SQL Server 2008 MDX應(yīng)用之組裝有序集合是本文我們主要要介紹的內(nèi)容,接下來我們通過一些具體的例子來介紹這一過程,希望能夠?qū)δ兴鶐椭?/p>
打開MDX查詢編輯器,如下:
例6-1
- SELECT
- {([Measures].[Reseller Sales Amount])} ON COLUMNS,
- {[Product].[Product].[Product].Members} ON ROWS
- FROM [Step-by-Step];
查詢結(jié)果:
我們修改排序,如下:
例6-2
- SELECT
- {([Measures].[Reseller Sales Amount])} ON COLUMNS,
- Order(
- {[Product].[Product].[Product].Members},
- ([Measures].[Reseller Sales Amount]),
- DESC
- ) ON ROWS
- FROM [Step-by-Step];
注意排序字段,這里使用了Order函數(shù)(http://msdn.microsoft.com/zh-cn/library/ms145587.aspx)。
例6-3
- SELECT
- {
- ([Measures].[Reseller Sales Amount]),
- ([Measures].[Internet Sales Amount])
- } ON COLUMNS,
- Order(
- {[Product].[Product].[Product].Members},
- VBAMDX!ABS(
- ([Measures].[Reseller Sales Amount]) -
- ([Measures].[Internet Sales Amount])
- ),
- DESC
- ) ON ROWS
- FROM [Step-by-Step];
注意,我們使用了上一節(jié)提到的VBA函數(shù),結(jié)果以兩列之差的絕對值為排序依據(jù)。
注意:使用Order還可以突破分層限制。
例6-4
- SELECT
- {([Measures].[Reseller Sales Amount])} ON COLUMNS,
- {[Product].[Subcategory].[Subcategory].Members} ON ROWS
- FROM [Step-by-Step];
例6-5
- SELECT
- {([Measures].[Reseller Sales Amount])} ON COLUMNS,
- {[Product].[Category].[Category].Members} *
- {[Product].[Subcategory].[Subcategory].Members} ON ROWS
- FROM [Step-by-Step];
再進一步,看一個雙排序的例子
例6-6
- SELECT
- {([Measures].[Reseller Sales Amount])} ON COLUMNS,
- Order(
- {[Product].[Category].[Category].Members} *
- {[Product].[Subcategory].[Subcategory].Members},
- ([Measures].[Reseller Sales Amount]),
- DESC
- ) ON ROWS
- FROM [Step-by-Step];
在上面的查詢中,交叉聯(lián)接使用默認排序,而且后面指定了([Measures].[Reseller Sales Amount])排序,但是大家注意到?jīng)]有,這一列并沒有按照指定的數(shù)值排序,為什么呢?因為默認的ASC和DESC是分層的(hierarchical),換句話說,這些元組的前一個成員的排序被保留了。為了打亂這個層次結(jié)構(gòu),可以使用BASC和BDESC(http://msdn.microsoft.com/zh-cn/library/ms145587(v=SQL.105))。
例6-7
- SELECT
- {([Measures].[Reseller Sales Amount])} ON COLUMNS,
- Order(
- {[Product].[Category].[Category].Members} *
- {[Product].[Subcategory].[Subcategory].Members},
- ([Measures].[Reseller Sales Amount]),
- BDESC
- ) ON ROWS
- FROM [Step-by-Step];
OK!這下消停了。
順便,我們提一下Hierarchize函數(shù)(http://msdn.microsoft.com/zh-cn/library/ms145981.aspx),該函數(shù)可以按層次結(jié)構(gòu)的順序組織指定集中的成員,返回集的有效多維表達式 (MDX)。
我們看一個例子
例6-8
- SELECT
- {([Measures].[Reseller Sales Amount])} ON COLUMNS,
- Hierarchize(
- {
- ([Product].[Product Categories].[Subcategory].[Road Bikes]),
- ([Product].[Product Categories].[All Products]),
- ([Product].[Product Categories].[Subcategory].[Mountain Bikes]),
- ([Product].[Product Categories].[Category].[Bikes]),
- ([Product].[Product Categories].[Subcategory].[Touring Bikes])
- }
- ) ON ROWS
- FROM [Step-by-Step];
如果定義POST標(biāo)志,則 Hierarchize 函數(shù)按非自然順序?qū)σ欢墑e的成員進行排序。 也就是說,子成員優(yōu)先于他們的父級。
例6-9
- SELECT
- {([Measures].[Reseller Sales Amount])} ON COLUMNS,
- Hierarchize(
- {
- ([Product].[Product Categories].[Subcategory].[Road Bikes]),
- ([Product].[Product Categories].[All Products]),
- ([Product].[Product Categories].[Subcategory].[Mountain Bikes]),
- ([Product].[Product Categories].[Category].[Bikes]),
- ([Product].[Product Categories].[Subcategory].[Touring Bikes])
- },
- POST
- ) ON ROWS
- FROM [Step-by-Step];
范圍操作符:包含一個默認的排序
例6-10
- SELECT
- {([Measures].[Reseller Sales Amount])} ON COLUMNS,
- {[Date].[Calendar].[CY 2001]:[Date].[Calendar].[CY 2004]} ON ROWS
- FROM [Step-by-Step];
- /*
- Reseller Sales Amount
- CY 2001 $8,065,435.31
- CY 2002 $24,144,429.65
- CY 2003 $32,202,669.43
- CY 2004 $16,038,062.60
- */
關(guān)于SQL Server 2008 MDX應(yīng)用之組裝有序集合的相關(guān)知識就介紹到這里了,希望本次的介紹能夠?qū)δ兴斋@!
【編輯推薦】






