商業智慧應用 10download.microsoft.com/.../mdx.pdf · 2018-10-13 · sql server 2005 mdx...

13
10 為了讓讀者活用先前所學到的MDX知識,所以本章列舉了幾個實際應用 的範例。希望藉由這幾個範例,更能體會出MDX語法的精簡卻又強大的 威力。MDX語法以短短幾行程式碼,就可達成多樣化複雜的分析,雖然 使用SQL也可達成,但其所花的氣力與執行效率卻是⋯。 C H A P T E R 商業智慧應用

Upload: others

Post on 17-Mar-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 商業智慧應用 10download.microsoft.com/.../MDX.pdf · 2018-10-13 · SQL Server 2005 MDX 商業智慧應用 Z字 圖 ︱變 動 分 析 10.2 若要分析Adventure Works,時間區間為2003年的12個月,分析量值為

10

為了讓讀者活用先前所學到的MDX知識,所以本章列舉了幾個實際應用

的範例。希望藉由這幾個範例,更能體會出MDX語法的精簡卻又強大的

威力。MDX語法以短短幾行程式碼,就可達成多樣化複雜的分析,雖然

使用SQL也可達成,但其所花的氣力與執行效率卻是⋯。

CHAPTER

商業智慧應用

Page 2: 商業智慧應用 10download.microsoft.com/.../MDX.pdf · 2018-10-13 · SQL Server 2005 MDX 商業智慧應用 Z字 圖 ︱變 動 分 析 10.2 若要分析Adventure Works,時間區間為2003年的12個月,分析量值為

10.1 柏拉圖分析

所謂「柏拉圖法則」就是找出比例高的少數項目來加以控制,比例低的少

數項目就比較不是所關心的重點。例如:80/20法則與物料管理所使用的

「ABC分析法」,皆為從該法則延伸而來。若以銷售分析為例,總營收

的80%可能是由20%的客戶或產品貢獻的;在生產現場,可能少數幾個不

良原因卻佔了總數的80%。如物料可依單價或其他屬性,將所有物料分成

ABC三類。

柏拉圖(Pareto)分析之應用範圍很廣,特別是涉及因素非常廣泛的情

況,各個因素所佔影響之比例不同,使用柏拉圖找出重點因素,進而針對

重點因素加以解決,則問題已解決一大半。

在做柏拉圖分析時,須先將項目排序(一般是遞減排序),然後計算出累

積百分比,再繪製成圖。以Adventure Works為範例,分析Clothing下各

項Subcategory的銷售。其語法如下:

with

Set [OrderSet] as

Order(

[Product].[Product Categories].[Clothing].Children,

[Measures].[Sales Amount],

DESC )

Member [Measures].[排名] as

Rank(

[Product].[Product Categories].CurrentMember,

OrderSet

)

Member [Measures].[累積金額] as

Sum(Head([OrderSet],[排名]),[Sales Amount])

Member [Measures].[百分比] as

[Sales Amount]/sum(OrderSet,[Sales Amount]),

Format_String = "Percent"

Member [Measures].[累積百分比] as

366

10商業智慧應用

Page 3: 商業智慧應用 10download.microsoft.com/.../MDX.pdf · 2018-10-13 · SQL Server 2005 MDX 商業智慧應用 Z字 圖 ︱變 動 分 析 10.2 若要分析Adventure Works,時間區間為2003年的12個月,分析量值為

SQL Server 2005 MDX 商業智慧應用

10.1柏拉圖分析

Sum(Head([OrderSet],[排名]),[百分比]),

Format_String = "Percent"

select

{[Measures].[Sales Amount],

[Measures].[排名],

[Measures].[累積金額],

[Measures].[百分比],

[Measures].[累積百分比]} on 0,

[OrderSet] on 1

from [Adventure Works]

執行結果如圖10-1所示。

圖10-1:對Clothing的各項Subcategory做柏拉圖分析

將結果繪製成圖表,如圖10-2所示。

圖10-2:對Clothing的各項Subcategory做柏拉圖分析的分析圖

367

Page 4: 商業智慧應用 10download.microsoft.com/.../MDX.pdf · 2018-10-13 · SQL Server 2005 MDX 商業智慧應用 Z字 圖 ︱變 動 分 析 10.2 若要分析Adventure Works,時間區間為2003年的12個月,分析量值為

柏拉圖分析圖會是以「雙Y軸」呈現,左方的軸表示各項目的數值,右方

的軸表示百分比。數值以直條圖呈現,累積百分比以折線圖呈現,之後

再將累積百分比區分成2或3個級距。圖10-2為依80/20法則分類,可看出

前四項Subcategory就佔了全部的80%,80/20法則只是一個常用的區分

方式,當然也可是70/30、60/40⋯等。此外,如果區分0~80、80~95、

95~100等三個級距,即為ABC分析,如圖10-3所示。

圖10-3:ABC分析

10.2 Z字圖-變動分析

Z字圖分析,顧名思義其所呈現的圖形像英文字母的「Z」,通常用來分析

與時間相關的變動。首先,確認要分析的時間區間,例如:2003年中的12

個月。「Z」,代表分析圖上有三條線,每一條線各表示一個數值,一個

為要分析的量值,其他兩個量值是依此量值與時間的關係計算而來,這兩

個量值分別為:

◆ 遞移加總:依時間排序,將要分析的量值作累積加總。例如:5月=

1~5月的總和。

◆ 移動加總:每個時間的移動加總,為該時間點往前推與分析區間同

樣的區間,計算此區間的總和。例如:要分析的時間區間有12個

月,則5月=去年6月到今年5月的總和。

A B C

368

商業智慧應用

10

Page 5: 商業智慧應用 10download.microsoft.com/.../MDX.pdf · 2018-10-13 · SQL Server 2005 MDX 商業智慧應用 Z字 圖 ︱變 動 分 析 10.2 若要分析Adventure Works,時間區間為2003年的12個月,分析量值為

SQL Server 2005 MDX 商業智慧應用

Z

字圖︱變動分析

10.2

若要分析Adventure Works,時間區間為2003年的12個月,分析量值為

Sales Amount,其範例程式碼如下:

with

Set [TimeSet] as

DESCENDANTS(

[Date].[Calendar].[CY 2003],

[Date].[Calendar].[Month])

Member [Measures].[遞移加總] as

Sum(

{[TimeSet].Item(0):

[Date].[Calendar].CurrentMember},

[Sales Amount])

Member [Measures].[移動加總] as

Sum(

LastPeriods(

Count(TimeSet),

[Date].[Calendar].CurrentMember),

[Sales Amount])

select

{[Measures].[Sales Amount],

[Measures].[遞移加總],

[Measures].[移動加總]} on 0,

TimeSet on 1

from [Adventure Works]

將要分析的時間區間變成一個集合,這樣可以少寫很多程式碼,使用起來

也方便。如果要分析其他年份,或某幾個月,只要改變此集合的成員即

可,其他程式碼都不用改變。查詢結果如圖10-4所示。

369

Page 6: 商業智慧應用 10download.microsoft.com/.../MDX.pdf · 2018-10-13 · SQL Server 2005 MDX 商業智慧應用 Z字 圖 ︱變 動 分 析 10.2 若要分析Adventure Works,時間區間為2003年的12個月,分析量值為

圖10-4:產生Z字圖所需資料

結果將其繪製成「Z」字分析圖,如圖10-5所示。

圖10-5:2003年Sales Amount的Z字圖分析

接下介紹各種「Z」字圖形所隱含的意義,Z字圖依移動加總(最上面那

條)的斜率可分成3大類型:成長型、持平型和衰退型,不同的類型與去

年同期比較的分析圖有相關性,可為其參考。將Z字圖的類型和與去年同

期比較的分析圖綜整如下表:

移動加總

遞移加總

Salas Amount

370

商業智慧應用

10

Page 7: 商業智慧應用 10download.microsoft.com/.../MDX.pdf · 2018-10-13 · SQL Server 2005 MDX 商業智慧應用 Z字 圖 ︱變 動 分 析 10.2 若要分析Adventure Works,時間區間為2003年的12個月,分析量值為

SQL Server 2005 MDX 商業智慧應用

類型 Z字圖 與去年同期比較(粗線表示現在)

成長型

持平型

衰退型

表10-1:Z字圖的3大類型和與去年同期比較對照

移動加總的斜率越大,表示今年比去年好;斜率接近0,則與去年差不

多;如果斜率是負的,則表示比去年差。移動加總與其他量值最大的不同

是:移動加總較不受季節因素所影響。

觀察遞移加總,可看各月的貢獻度。大於45度的線段,表示較上月成長;

小於45度,表示較上月衰退。

10.3 預測與分配

導入「商業智慧」後,透過OLAP資料庫,可以快速分析大量的歷史資

料,並以多維的方式呈現資料。但這不是最終目的,最終目的為:依據過

往的經驗,對未來做出正確的決策,如:「營運計畫」、「預算」⋯等。

如何做這些計畫,其所牽涉的Domain Know How廣而深,但就實作而

言,核心動作是將預測值向下分配或向上累計。而預測值怎麼來,怎麼向

下分配,怎麼向上累計,這中間的學問就大了!

371

預測與分配

10.3

Page 8: 商業智慧應用 10download.microsoft.com/.../MDX.pdf · 2018-10-13 · SQL Server 2005 MDX 商業智慧應用 Z字 圖 ︱變 動 分 析 10.2 若要分析Adventure Works,時間區間為2003年的12個月,分析量值為

以下為一個簡單的範例,示範如何利用回歸分析取得下一年度的總銷售

額,再依據去年各個Category與去年總銷售額佔比來分配,計算出各個

Category下一會計年度(Fiscal Year)目標值。

步驟1 先製作出最終結果的格式。

WITH

Member [Measures].[2004] as

([Date].[Fiscal Year].[FY 2004],[Sales Amount])

Member [Measures].[2005目標] as

null

Member [Measures].[佔比] as

null

Member [Measures].[分配值] as

null

Select

{[2004],[2005目標],[佔比],[分配值]} on 0,

[Product].[Category].Members on 1

from [Adventure Works]

執行結果如圖10-6所示。

圖10-6:最終結果的格式

導出量值2004為FY 2004的Sales Amount,供對照參考。

372

商業智慧應用

10

Page 9: 商業智慧應用 10download.microsoft.com/.../MDX.pdf · 2018-10-13 · SQL Server 2005 MDX 商業智慧應用 Z字 圖 ︱變 動 分 析 10.2 若要分析Adventure Works,時間區間為2003年的12個月,分析量值為

SQL Server 2005 MDX 商業智慧應用

步驟2 以線性迴歸計算2005年各類別趨勢的目標值。

WITH

Member [Measures].[2004] as

([Date].[Fiscal Year].[FY 2004],[Sales Amount])

Set [YearSet] as

{[Date].[Fiscal Year].[FY 2002],

[Date].[Fiscal Year].[FY 2003],

[Date].[Fiscal Year].[FY 2004]}

Member [Measures].[ID] as

[Date].[Fiscal Year].CurrentMember.Properties("ID")

Member [Measures].[2005目標] as

LinRegPoint(

5,

YearSet,

[Sales Amount],

[Measures].[ID]),

Format_String = "Currency"

Member [Measures].[佔比] as

null

Member [Measures].[分配值] as

null

Select

{[2004],[2005目標],[佔比],[分配值]} on 0,

[Product].[Category].Members on 1

L i n R e g P o i n t函數的說明請先參閱《第8 . 4節:數值函數》。因為

LinRegPoint需要多組(x,y)值來計算其回歸線,這裡只有一個量值[Sales

A m o u n t]為y,所以利用每個成員都有的成員屬性「 I D」當作x。F Y

2002、FY 2003、FY 2004的ID分別為2、3、4,所以用5當作LinRegPoint

的第一個參數(x),求出FY 2005的值(y)。計算結果如圖10-7所示。

373

預測與分配

10.3

Page 10: 商業智慧應用 10download.microsoft.com/.../MDX.pdf · 2018-10-13 · SQL Server 2005 MDX 商業智慧應用 Z字 圖 ︱變 動 分 析 10.2 若要分析Adventure Works,時間區間為2003年的12個月,分析量值為

圖10-7:2005年所有產品推估的目標值為65939721.26

步驟3 計算佔比。

Member [Measures].[佔比] as

[Measures].[2004]/

CoalesceEmpty(

([Product].[Category].CurrentMember.Parent,

[Measures].[2004])

,[Measures].[2004]),

Format_String = "Percent"

目前值÷父階值,得到各Category的佔比。使用CoalesceEmpty函數避免

分母為0的錯誤。

步驟4 計算分配值。

Member [Measures].[分配值] as

([Product].[Category].[All Products],[2005目標])

* [佔比],

Format_String = "Currency"

所有產品的總目標值*佔比,得到各Category分配到的值,最後結果如圖

10-8所示。

圖10-8:將2005年目標值依2004年佔比分配到各Category

374

商業智慧應用

10

Page 11: 商業智慧應用 10download.microsoft.com/.../MDX.pdf · 2018-10-13 · SQL Server 2005 MDX 商業智慧應用 Z字 圖 ︱變 動 分 析 10.2 若要分析Adventure Works,時間區間為2003年的12個月,分析量值為

SQL Server 2005 MDX 商業智慧應用

排名分析

10.4

此結果可以再計算「2005目標」與「2004」、「分配值」與「2004」、

「分配值」與「2005目標」的差異。如果要取出資料再利用,可以在表格

中按滑鼠右鍵選擇「全選」、「複製」,然後貼到Excel中。

10.4 排名分析

第8章已經有舉一些排名相關的範例,這裡再做更進階的應用。此範例為

找出網際網路銷售中,前三名國家與各國家中前5名的熱銷商品,並計算

每個銷售額在這15筆資料中的排名與每個產品在全部產品的排名。步驟與

範例如下:

步驟1 找出網際網路銷售前三名的國家。

Set [TopCountry] as

TopCount(

[Customer].[Country].[Country].Members,

3,

[Measures].[Internet Sales Amount])

步驟2 前三名國家中,各國家前5名的熱銷商品。

Set [TopProd] as

Generate(

{TopCountry},

TopCount(

{[Customer].[Country].CurrentMember *

[Product].[Product].[Product].Members},

5,

[Measures].[Internet Sales Amount]))

使用Generate函數,根據前三名國家的集合動態產生各國家前5名的集

合,然後將全部集合聯集。

375

Page 12: 商業智慧應用 10download.microsoft.com/.../MDX.pdf · 2018-10-13 · SQL Server 2005 MDX 商業智慧應用 Z字 圖 ︱變 動 分 析 10.2 若要分析Adventure Works,時間區間為2003年的12個月,分析量值為

步驟3 計算每個銷售額在這15筆資料中的排名。

Member [Measures].[Rank1] as

Rank(

([Customer].[Country].CurrentMember,

[Product].[Product].CurrentMember),

Order(

[TopProd],

[Internet Sales Amount],

BDESC))

在這15筆資料中的排名,也就是對步驟2產生的集合TopProd做排名,

TopProd含有兩個維度,所以Rank的第一個Tuple參數也必須跟TopProd

有相同的維度性。BDESC旗標表示打破階層遞減排序。

步驟4 每個產品在全部產品的排名。

Member [Measures].[Rank2] as

Rank(

[Product].[Product].CurrentMember,

Order(

[Product].[Product].[Product].Members,

([Customer].[Country].[All Customers],

[Internet Sales Amount])

,DESC))

這個量值是此範例最不容易寫出來的,因為軸上除了產品維度外,還有

地區維度。如果排序時,Order的第二個參數沒有加上[Customer].[Cou

ntry].[All Customers],那結果會變成依照每個[Customer].[Country].

CurrentMember的Internet Sales Amount將產品排序,結果會是同樣的

產品因各地區的銷售量,導致在各區有不同的排名。但我們要的是該產品

不分區域的總排名,正確結果應該是同樣的產品排名也一樣,如圖10-9所

示。

376

商業智慧應用

10

Page 13: 商業智慧應用 10download.microsoft.com/.../MDX.pdf · 2018-10-13 · SQL Server 2005 MDX 商業智慧應用 Z字 圖 ︱變 動 分 析 10.2 若要分析Adventure Works,時間區間為2003年的12個月,分析量值為

SQL Server 2005 MDX 商業智慧應用

遞迴計算

10.5

將此四個步驟的程式碼,前面加上WITH,最後加上:

Select

{[Internet Sales Amount],[Rank1],[Rank2]} on 0,

{TopProd} on 1

from [Adventure Works]

即為完整的範例,執行結果如圖10-9所示。

圖10-9:排名分析

10.5 遞迴計算

在新增計算量值時,可以將原來既有的量值做運算,但是如果是自己要跟

自己做運算,這種遞迴的計算該如何解決?舉個例子:期末庫存=期初庫

存+期間進-期間出,而期初庫存為上期期末庫存。已經有了各期的進與

出,如何根據這兩個值來產生「期末庫存」?假設來源資料如圖10-10所

示。

377