天天看點

數倉個人作業(四)使用SSAS進行OLAP分析

例子

就以下面這個航班項目為例,分别進行切片、切塊、鑽取、旋轉、移動和與移動平均值的計算

(圖中有個錯誤,事實表沒有主鍵的辨別,是我一開始忘了設定組合鍵)

數倉個人作業(四)使用SSAS進行OLAP分析

數倉個人作業(四)使用SSAS進行OLAP分析

一、切片(Slice)

切片如下圖所示:

數倉個人作業(四)使用SSAS進行OLAP分析

1、點它,在excel中進行分析(因為在SSAS的浏覽器中,它僅顯示單維資料,excel可以顯示多元資料)

數倉個人作業(四)使用SSAS進行OLAP分析

2、拖拽“到達城市”到“行”(這裡根據你的需求拖你的屬性),左邊出現城市的列

數倉個人作業(四)使用SSAS進行OLAP分析

3、拖拽“航空公司”到“列”

數倉個人作業(四)使用SSAS進行OLAP分析

4、拖拽“...計數”到“值”

數倉個人作業(四)使用SSAS進行OLAP分析

5、拖拽“飛行日期”到“篩選”

數倉個人作業(四)使用SSAS進行OLAP分析

6、篩選一個時間,即完成切片

數倉個人作業(四)使用SSAS進行OLAP分析
數倉個人作業(四)使用SSAS進行OLAP分析

7、(可忽略)如果在在SSAS浏覽器中做,是這樣的

數倉個人作業(四)使用SSAS進行OLAP分析

二、切塊

1、參考切片,切塊是選擇更多的時間

數倉個人作業(四)使用SSAS進行OLAP分析

2、在SSAS浏覽器中的展現如下

數倉個人作業(四)使用SSAS進行OLAP分析

三、下鑽

我的了解是,在excel裡面設定多個行。也就是讓它有多層的結構可以展開,展開的過程就是細化的過程,下鑽大概是這個意思。

數倉個人作業(四)使用SSAS進行OLAP分析

這裡我的時間維表沒有設定好,如果把時間維設定成分開的年月日,則“行”裡面就是“年”、“月”、“日” 

四、上卷

上卷是相對于下鑽的,下鑽是添加多行,那麼上卷就是删掉一行或多行。這樣就是泛化的過程,不想下鑽能看到更多的細節。

五、旋轉

就是把行列互換

數倉個人作業(四)使用SSAS進行OLAP分析

六、移動和

上面5個操作,我們看到的都是某一時間點的狀态,現在我們想看到表在不同時間點的變化趨勢,就要用到移動和。這是要寫MDX代碼的。是以我們從“浏覽器”切換到“計算”,在右邊灰色的方框内寫代碼。

數倉個人作業(四)使用SSAS進行OLAP分析

教材上已經有了示例,這裡我改了一下分析的行和值。

CALCULATE;
CREATE MEMBER CURRENTCUBE.[MEASURES].[sum of three days]
AS sum(
[Time Dim].[Filght Date].currentMember.Lag(2):
[Time Dim].[Filght Date].currentMember,
[Measures].[Frequent-flyer Flight Segment Fact Table 計數]
),
FORMAT_STRING="CURRENCY",
NON_EMPTY_BEHAVIOR={[Measures].[Frequent-flyer Flight Segment Fact Table 計數]},VISIBLE=1
           

這個代碼的意思:

第一句是固定的,不管。 

第二句是建立一個成員,也可以說是一列屬性,它叫sum of three days(也就是移動和)。

第三句到第六句,我們抽象成這樣:sum(A:B,C),其中A是 [Time Dim].[Filght Date].CurrentMember.Lag(2) ,B是 [Time Dim].[Filght Date].CurrentMember,這就代表 A是B的前兩行,Lag(2)方法就是擷取前兩行的意思。A和B之間的冒号就是代表從A到B的意思,求和的列是C(也就是[Measures].[Frequent-flyer Flight Segment Fact Table 計數] )。是以,sum(A,B,C)代表着求從目前行到前一行關于列 [Frequent-flyer Flight Segment Fact Table 計數](乘車人次)的和。

後面兩句不是很懂,但是并不影響程式執行。

運作過程是這樣的:

把代碼放進去,注意結尾不能有分号,不然報錯。然後儲存。右鍵項目部署,成功後直接打開excel。

數倉個人作業(四)使用SSAS進行OLAP分析

excel裡面多了“數值”這一項,行的選擇必須是代碼中設定的日期。這樣就有移動和了。

數倉個人作業(四)使用SSAS進行OLAP分析

七、移動平均

移動平均隻用把sum改成avg

CALCULATE;
CREATE MEMBER CURRENTCUBE.[MEASURES].[sum of three days]
AS avg(
[Time Dim].[Filght Date].currentMember.Lag(2):
[Time Dim].[Filght Date].currentMember,
[Measures].[Frequent-flyer Flight Segment Fact Table 計數]
),
FORMAT_STRING="CURRENCY",
NON_EMPTY_BEHAVIOR={[Measures].[Frequent-flyer Flight Segment Fact Table 計數]},VISIBLE=1
           

其他操作如六所示。

繼續閱讀